//+------------------------------------------------------------------+ //| VKW Bands.mq4 | //| Copyright © 2008, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Alksnis Gatis" #property link "2xpoint@gmail.com" //---- #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Blue #property indicator_color2 Red #property indicator_color3 White #property indicator_width2 2 //---- input parameters extern int RangePeriod=25; extern int SmoothPeriod=3; extern int SmoothMode=MODE_SMA; extern int Per=5; //---- buffers double ExtMapBuffer0[]; double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; double ExtMapBuffer4[]; bool fb=false, fs=false; double a[],t[],fa,fd; int i, b; datetime drop=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init(){ //---- indicators IndicatorBuffers(5); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); SetIndexDrawBegin(0,SmoothPeriod); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,ExtMapBuffer2); SetIndexDrawBegin(1,SmoothPeriod); SetIndexBuffer(2,ExtMapBuffer0); SetIndexBuffer(3,ExtMapBuffer3); SetIndexBuffer(4,ExtMapBuffer4); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit(){ //---- ObjectsDeleteAll(); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start(){ int counted_bars=IndicatorCounted(); //---- if(drop==0)drop=TimeCurrent()+60; if(drop<=TimeCurrent()){ bool qwe=false; for(i=0;i<=30;i++){ if(ObjectFind("ui"+i) >0) {ObjectDelete("ui"+i); } if(ObjectFind("uw"+i) >0) {ObjectDelete("uw"+i); } if(ObjectFind("txtu"+i)>0) {ObjectDelete("txtu"+i);} if(ObjectFind("tu"+i) >0) {ObjectDelete("tu"+i); } if(ObjectFind("di"+i) >0) {ObjectDelete("di"+i); } if(ObjectFind("dw"+i) >0) {ObjectDelete("dw"+i); } if(ObjectFind("txtd"+i)>0) {ObjectDelete("txtd"+i);} if(ObjectFind("td"+i) >0) {ObjectDelete("td"+i); } } drop=TimeCurrent()+60; } int limit,limit1,cnt,n_max,n_min; if (counted_bars==0){ limit=Bars-RangePeriod; limit1=limit-SmoothPeriod; } if (counted_bars>0){ limit=Bars-counted_bars; limit1=limit; } limit--; limit1--; for(cnt=limit; cnt>=0;cnt--){ ExtMapBuffer0[cnt]=iCustom(NULL,0,"METRO",1,cnt); } for(cnt=limit; cnt>=0;cnt--){ n_max=ArrayMaximum(ExtMapBuffer0,RangePeriod,cnt); n_min=ArrayMinimum(ExtMapBuffer0,RangePeriod,cnt); ExtMapBuffer3[cnt]=ExtMapBuffer0[n_max]; ExtMapBuffer4[cnt]=ExtMapBuffer0[n_min]; } for(cnt=limit1; cnt>=0;cnt--){ ExtMapBuffer1[cnt]=iMAOnArray(ExtMapBuffer3,0,SmoothPeriod,0,SmoothMode,cnt); ExtMapBuffer2[cnt]=iMAOnArray(ExtMapBuffer4,0,SmoothPeriod,0,SmoothMode,cnt); } i=Bars-RangePeriod; while(i>=0){ if(ExtMapBuffer0[i]>=ExtMapBuffer1[i])fs=true; if(fs==true&&ExtMapBuffer0[i]+0.1ExtMapBuffer2[i]){ SetArrow(241,Yellow,"di"+i,1,Time[i],ExtMapBuffer0[i],2); SetArrow(241,Yellow,"dw"+i,0,Time[i],Low[i]-2*Point ,2); fd=FindNearFractal(Symbol(),0,MODE_LOWER,i); //SetText(Symbol(), "txtd"+b, "SELLSTOP "+DoubleToStr(Low[b],Digits), Yellow, Time[b]+3*3600, Low[b], 8, 0, -1); SetTLine(Red, "td"+b, Time[b]-5*3600, Low[b], Time[b]+15*3600, Low[b], false, 0, 2, 0); fb=false; } i--; WindowRedraw(); } //---- return(0); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Установка значка на графике, объекта OBJ_ARROW. | //+----------------------------------------------------------------------------+ //| Параметры: | //| cd - код значка | //| cl - цвет значка | //| nm - наименование ("" - время открытия текущего бара) | //| t1 - время открытия бара (0 - текущий бар) | //| p1 - ценовой уровень (0 - Bid) | //| sz - размер значка (0 - по умолчанию) | //| w - окно отрисовки (0 - основное окно) | //+----------------------------------------------------------------------------+ void SetArrow(int cd, color cl, string nm="", int w=0, datetime t1=0, double p1=0, int sz=0) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (t1<=0) t1=Time[0]; if (p1<=0) p1=Bid; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, w, 0,0); ObjectSet(nm, OBJPROP_TIME1 , t1); ObjectSet(nm, OBJPROP_PRICE1 , p1); ObjectSet(nm, OBJPROP_ARROWCODE, cd); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_WIDTH , sz); }/* void SetText(string sy, string nm, string tx, color cl, datetime t1=0, double p1=0, int fs=9, int w=0, int pos=1){ int d=MarketInfo(sy, MODE_DIGITS); if (nm=="") nm=DoubleToStr(Time[0], 0); if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TEXT, w, 0,0); if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2; if (pos!=1) pos=-1; p1=NormalizeDouble(p1, d); ObjectSetText(nm, tx, fs); ObjectSet(nm, OBJPROP_COLOR, cl); ObjectSet(nm, OBJPROP_TIME1 , t1); if(pos==1 && sy=="EURUSD")ObjectSet(nm,OBJPROP_PRICE1,p1+0.0015); if(pos==-1 && sy=="EURUSD")ObjectSet(nm,OBJPROP_PRICE1,p1-0.0002); if(pos==1 && sy=="GBPUSD")ObjectSet(nm,OBJPROP_PRICE1,p1+0.0035); if(pos==-1 && sy=="GBPUSD")ObjectSet(nm,OBJPROP_PRICE1,p1-0.0002); if(pos==1 && sy=="USDCHF")ObjectSet(nm,OBJPROP_PRICE1,p1+0.0015); if(pos==-1 && sy=="USDCHF")ObjectSet(nm,OBJPROP_PRICE1,p1-0.0002); if(pos==1 && sy=="USDJPY")ObjectSet(nm,OBJPROP_PRICE1,p1+0.15); if(pos==-1 && sy=="USDJPY")ObjectSet(nm,OBJPROP_PRICE1,p1-0.02); if(pos==1 && sy=="EURJPY")ObjectSet(nm,OBJPROP_PRICE1,p1+0.30); if(pos==-1 && sy=="EURJPY")ObjectSet(nm,OBJPROP_PRICE1,p1-0.02); if(pos==1 && sy=="GBPJPY")ObjectSet(nm,OBJPROP_PRICE1,p1+0.45); if(pos==-1 && sy=="GBPJPY")ObjectSet(nm,OBJPROP_PRICE1,p1-0.02); ObjectSet(nm, OBJPROP_FONTSIZE, fs); ObjectSet(nm, OBJPROP_BACK, false); } */ //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Установка текстовой метки, объект OBJ_LABEL. | //+----------------------------------------------------------------------------+ //| Параметры: | //| nm - наименование объекта | //| tx - текст | //| cl - цвет метки | //| xd - координата X в пикселах | //| yd - координата Y в пикселах | //| cr - номер угла привязки (0 - левый верхний, | //| 1 - правый верхний, | //| 2 - левый нижний, | //| 3 - правый нижний ) | //| fs - размер шрифта (9 - по умолчанию ) | //| w - окно отрисовки (0 - основное окно) | //+----------------------------------------------------------------------------+ /*void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9, int w=0){ if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, w, 0,0); ObjectSetText(nm, tx, fs); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_XDISTANCE, xd); ObjectSet(nm, OBJPROP_YDISTANCE, yd); ObjectSet(nm, OBJPROP_CORNER , cr); ObjectSet(nm, OBJPROP_FONTSIZE , fs); }*/ //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Установка объекта OBJ_TREND трендовая линия | //+----------------------------------------------------------------------------+ //| Параметры: | //| cl - цвет линии | //| nm - наименование ( "" - время открытия текущего бара) | //| t1 - время открытия бара ( 0 - Time[10] | //| p1 - ценовой уровень ( 0 - Low[10]) | //| t2 - время открытия бара ( 0 - текущий бар) | //| p2 - ценовой уровень ( 0 - Bid) | //| ry - луч (False - по умолчанию) | //| st - стиль линии ( 0 - простая линия) | //| wd - ширина линии ( 1 - по умолчанию) | //| w - окно отрисовки ( 0 - основное окно) | //+----------------------------------------------------------------------------+ void SetTLine(color cl, string nm="", datetime t1=0, double p1=0, datetime t2=0, double p2=0, bool ry=False, int st=0, int wd=1, int w=0) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (t1<=0) t1=Time[10]; if (p1<=0) p1=Low[10]; if (t2<=0) t2=Time[0]; if (p2<=0) p2=Bid; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, w, 0,0, 0,0); ObjectSet(nm, OBJPROP_TIME1 , t1); ObjectSet(nm, OBJPROP_PRICE1, p1); ObjectSet(nm, OBJPROP_TIME2 , t2); ObjectSet(nm, OBJPROP_PRICE2, p2); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_RAY , ry); ObjectSet(nm, OBJPROP_STYLE , st); ObjectSet(nm, OBJPROP_WIDTH , wd); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 07.10.2006 | //| Описание : Поиск ближайшего фрактала. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента (NULL - текущий символ) | //| tf - таймфрейм (0 - текущий ТФ) | //| mode - тип фрактала (MODE_LOWER|MODE_UPPER) | //| start - бар с которого небходимо начинать поиск (2 - по умолчанию) | //+----------------------------------------------------------------------------+ double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER, int start = 2) { if (sy=="" || sy=="0") sy=Symbol(); double f=0; int d=MarketInfo(sy, MODE_DIGITS), s; if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2; for (s=start; s