Time: 2014-03-08 | Download file:iCamarillaLevel.mq4
//+------------------------------------------------------------------+ //| 21.01.2009 iCamarillaLevels_v4B.mq4 | //+------------------------------------------------------------------+ // v2 - добавил возможность расчета уровней и по дневным, и по // недельным барам // v3 - добавил возможность расчета с учетом GMT // v4, // v4А- поправил отрисовку уровней на нулевом баре после перехода GMT, // а так же исправил найденные ошибки в расчете уровней // // примечание: // 1. после запуска индикатора ценовые метки и имена уровней // появляются только после новой котировки // 2. выходными индикатор считает все субботы и воскресенья, // выходных среди недели замечать не умеет //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, Bookkeeper" #property link "yuzefovich@gmail.com" #property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 Maroon // L3 #property indicator_color2 Navy // L4 #property indicator_color3 Magenta // L5 #property indicator_color4 Maroon // H3 #property indicator_color5 Navy // H4 #property indicator_color6 Magenta // H5 extern int Period_X=240; // начиная с какого ТФ расчитывать по недельным барам extern int ShihtGMT=1; // сдвиг в часах времени терминала относительно GMT double LLevel3[]; double LLevel4[]; double LLevel5[]; double HLevel3[]; double HLevel4[]; double HLevel5[]; datetime prevD=0; int Period_L, prevBars=0; bool WithShift; //+------------------------------------------------------------------+ int init() { if(Period()>=Period_X) { Period_L=PERIOD_W1; WithShift=false; } else { Period_L=PERIOD_D1; WithShift=true; } IndicatorBuffers(6); SetIndexStyle (0,DRAW_LINE); SetIndexStyle (1,DRAW_LINE); SetIndexStyle (2,DRAW_LINE,STYLE_DASH); SetIndexStyle (3,DRAW_LINE); SetIndexStyle (4,DRAW_LINE); SetIndexStyle (5,DRAW_LINE,STYLE_DASH); SetIndexBuffer(0,LLevel3); SetIndexBuffer(1,LLevel4); SetIndexBuffer(2,LLevel5); SetIndexBuffer(3,HLevel3); SetIndexBuffer(4,HLevel4); SetIndexBuffer(5,HLevel5); return(0); } //+------------------------------------------------------------------+ int deinit() { // Comment(""); // только для отладки ObjectDelete("CamarillaHL3"); ObjectDelete("CamarillaHL4"); ObjectDelete("CamarillaHL5"); ObjectDelete("CamarillaLL3"); ObjectDelete("CamarillaLL4"); ObjectDelete("CamarillaLL5"); ObjectDelete("CamarillaTH3"); ObjectDelete("CamarillaTH4"); ObjectDelete("CamarillaTH5"); ObjectDelete("CamarillaTL3"); ObjectDelete("CamarillaTL4"); ObjectDelete("CamarillaTL5"); return(0); } //+------------------------------------------------------------------+ int start() { if(Period_X>1440) return(-1); if(Period()>1440) return(-1); int limit,counted_bars=IndicatorCounted(); if (counted_bars<0) return(-1); if (counted_bars>0) counted_bars--; limit=Bars-counted_bars-2; int nd=iBars(NULL,Period_L)-1; datetime tnd1=iTime(NULL,Period_L,nd-1); if(Time[limit]0) { int n_today=TimeDayOfWeek(iTime(NULL,Period_L,n-1)); // вечерние часы на нулевом баре при переходе через 24:00 GMT if(n==1 && n_today!=5 && TimeHour(Time[0])>=(24-ShihtGMT)) { s=TimeToStr(Time[0],TIME_DATE)+" "+(24-ShihtGMT)+":00"; today_open_time=StrToTime(s); if(n_today==1) // для понедельника yesterday_open_time=iTime(NULL,Period_L,n-1); else // для остальных дней { s=TimeToStr(iTime(NULL,Period_L,n),TIME_DATE)+" "+(24-ShihtGMT)+":00"; yesterday_open_time=StrToTime(s); } } // утренние и дневные часы до 24:00 GMT else { // пересчет дня недели if(TimeHour(Time[0])>=(24-ShihtGMT)) { nn=n-1; n_today=TimeDayOfWeek(iTime(NULL,Period_L,nn-1)); } else nn=n; if(n_today==1) // для понедельника "вчерашний" день - пятница { today_open_time=iTime(NULL,Period_L,nn-1); s=TimeToStr(iTime(NULL,Period_L,nn+1),TIME_DATE)+" "+(24-ShihtGMT)+":00"; yesterday_open_time=StrToTime(s); } if(n_today==2) // для вторника вчерашний день - понедельник { s=TimeToStr(iTime(NULL,Period_L,nn),TIME_DATE)+" "+(24-ShihtGMT)+":00"; today_open_time=StrToTime(s); yesterday_open_time=iTime(NULL,Period_L,nn); } if(n_today>2 && n_today<6) // для среды, четверга и пятницы расчет вчерашнего дня { s=TimeToStr(iTime(NULL,Period_L,nn),TIME_DATE)+" "+(24-ShihtGMT)+":00"; today_open_time=StrToTime(s); s=TimeToStr(iTime(NULL,Period_L,nn+1),TIME_DATE)+" "+(24-ShihtGMT)+":00"; yesterday_open_time=StrToTime(s); } } yesterday_close_bar=iBarShift(NULL,0,today_open_time)+1; c=Close[yesterday_close_bar]; int j=yesterday_close_bar; while(Time[j]>=yesterday_open_time && i<=limit) j++; count=j-yesterday_close_bar; h=High[iHighest(NULL,0,MODE_HIGH,count,yesterday_close_bar)]; l=Low[iLowest(NULL,0,MODE_LOW,count,yesterday_close_bar)]; // только для отладки //if(n==2) Comment(s); } else { today_open_time=iTime(NULL,Period_L,n-1); c=iClose(NULL,Period_L,n); h=iHigh(NULL,Period_L,n); l=iLow(NULL,Period_L,n); } if(i==0) { datetime D=today_open_time; // только для отладки //Comment(c," ",h," ",l); } while(Time[i]>=today_open_time && i<=limit) { HLevel3[i]=NormalizeDouble((c+(h-l)*1.1/4),Digits); HLevel4[i]=NormalizeDouble((c+(h-l)*1.1/2),Digits); HLevel5[i]=NormalizeDouble(h/l*c,Digits); LLevel3[i]=NormalizeDouble((c-(h-l)*1.1/4),Digits); LLevel4[i]=NormalizeDouble((c-(h-l)*1.1/2),Digits); LLevel5[i]=NormalizeDouble(c*2,Digits)-HLevel5[i]; i++; } i--; n++; } if(prevBars!=Bars) { prevBars=Bars; ObjectDelete("CamarillaHL3"); ObjectDelete("CamarillaHL4"); ObjectDelete("CamarillaHL5"); ObjectDelete("CamarillaLL3"); ObjectDelete("CamarillaLL4"); ObjectDelete("CamarillaLL5"); ObjectCreate("CamarillaHL3",OBJ_ARROW,0,Time[0],HLevel3[0]); ObjectSet ("CamarillaHL3",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectCreate("CamarillaHL4",OBJ_ARROW,0,Time[0],HLevel4[0]); ObjectSet ("CamarillaHL4",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectCreate("CamarillaHL5",OBJ_ARROW,0,Time[0],HLevel5[0]); ObjectSet ("CamarillaHL5",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectCreate("CamarillaLL3",OBJ_ARROW,0,Time[0],LLevel3[0]); ObjectSet ("CamarillaLL3",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectCreate("CamarillaLL4",OBJ_ARROW,0,Time[0],LLevel4[0]); ObjectSet ("CamarillaLL4",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectCreate("CamarillaLL5",OBJ_ARROW,0,Time[0],LLevel5[0]); ObjectSet ("CamarillaLL5",OBJPROP_ARROWCODE,SYMBOL_RIGHTPRICE); ObjectSet ("CamarillaHL3",OBJPROP_COLOR,Maroon); ObjectSet ("CamarillaHL4",OBJPROP_COLOR,Navy); ObjectSet ("CamarillaHL5",OBJPROP_COLOR,Magenta); ObjectSet ("CamarillaLL3",OBJPROP_COLOR,Maroon); ObjectSet ("CamarillaLL4",OBJPROP_COLOR,Navy); ObjectSet ("CamarillaLL5",OBJPROP_COLOR,Magenta); ObjectDelete ("CamarillaTH3"); ObjectDelete ("CamarillaTH4"); ObjectDelete ("CamarillaTH5"); ObjectDelete ("CamarillaTL3"); ObjectDelete ("CamarillaTL4"); ObjectDelete ("CamarillaTL5"); ObjectCreate ("CamarillaTH3",OBJ_TEXT,0,D,HLevel3[0]); ObjectSetText("CamarillaTH3"," H3",10,"System",Maroon); ObjectCreate ("CamarillaTH4",OBJ_TEXT,0,D,HLevel4[0]); ObjectSetText("CamarillaTH4"," H4",10,"System",Navy); ObjectCreate ("CamarillaTH5",OBJ_TEXT,0,D,HLevel5[0]); ObjectSetText("CamarillaTH5"," H5",10,"System",Magenta); ObjectCreate ("CamarillaTL3",OBJ_TEXT,0,D,LLevel3[0]); ObjectSetText("CamarillaTL3"," L3",10,"System",Maroon); ObjectCreate ("CamarillaTL4",OBJ_TEXT,0,D,LLevel4[0]); ObjectSetText("CamarillaTL4"," L4",10,"System",Navy); ObjectCreate ("CamarillaTL5",OBJ_TEXT,0,D,LLevel5[0]); ObjectSetText("CamarillaTL5"," L5",10,"System",Magenta); ObjectDelete ("CamarillaTH3"); ObjectDelete ("CamarillaTH4"); ObjectDelete ("CamarillaTH5"); ObjectDelete ("CamarillaTL3"); ObjectDelete ("CamarillaTL4"); ObjectDelete ("CamarillaTL5"); ObjectCreate ("CamarillaTH3",OBJ_TEXT,0,D,HLevel3[0]); ObjectSetText("CamarillaTH3"," H3",10,"System",Maroon); ObjectCreate ("CamarillaTH4",OBJ_TEXT,0,D,HLevel4[0]); ObjectSetText("CamarillaTH4"," H4",10,"System",Navy); ObjectCreate ("CamarillaTH5",OBJ_TEXT,0,D,HLevel5[0]); ObjectSetText("CamarillaTH5"," H5",10,"System",Magenta); ObjectCreate ("CamarillaTL3",OBJ_TEXT,0,D,LLevel3[0]); ObjectSetText("CamarillaTL3"," L3",10,"System",Maroon); ObjectCreate ("CamarillaTL4",OBJ_TEXT,0,D,LLevel4[0]); ObjectSetText("CamarillaTL4"," L4",10,"System",Navy); ObjectCreate ("CamarillaTL5",OBJ_TEXT,0,D,LLevel5[0]); ObjectSetText("CamarillaTL5"," L5",10,"System",Magenta); } return(0); }