//+------------------------------------------------------------------+ //| byOpenDaily_Levels.mq4 | //| fx-system@mail.ru | //+------------------------------------------------------------------+ // Только для графика 1 час #property copyright "Copyright © 2010, fx-system@mail.ru" //---- #property indicator_chart_window #property indicator_buffers 7 #property indicator_color1 Gold #property indicator_width1 2 #property indicator_color2 Red #property indicator_width2 2 #property indicator_color3 Lime #property indicator_width3 2 #property indicator_color4 Red #property indicator_width4 0 #property indicator_style4 STYLE_DASH #property indicator_color5 DarkGreen #property indicator_width5 0 #property indicator_style5 STYLE_DASH #property indicator_color6 DarkGreen #property indicator_color7 Red //---- input parameters extern int setFlatZone = 5; // диапазон флэта в пп, ЕСЛИ < 10пп расчет по часовому ATR(SetFlatByATR) // ручная настройка для натягивания на ФлэтАзия и для контроля на истории и для ... // лучшее "ручное" значение = 19...21 (для евро) extern int SetFlatByATR = 48; extern bool sayLevels = true; // вывод (рисование) значений уровней //---- buffers double DailyOpenBuffer[]; double LevelBUYBuffer[]; double LevelSELLBuffer[]; double TargetBUYBuffer[]; double TargetSELLBuffer[]; double UpSignal[]; // сначала хотелось стрелки, но пусть будет цельВСЕГДА (200% коридора) double DnSignal[]; //---- variables //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; IndicatorBuffers(7); //---- indicator lines SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,DailyOpenBuffer); //SetIndexEmptyValue(0, 0.0); SetIndexLabel(0,"OpenДня"); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,LevelSELLBuffer); //SetIndexEmptyValue(1, 0.0); SetIndexLabel(1,"УровеньSELLПослеПробоя"); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,LevelBUYBuffer); //SetIndexEmptyValue(2, 0.0); SetIndexLabel(2,"УровеньBUYПослеПробоя"); SetIndexStyle(3,DRAW_LINE,STYLE_DASH); SetIndexBuffer(3,TargetBUYBuffer); //SetIndexEmptyValue(3, 0.0); SetIndexLabel(3,"УровеньDN-Цель(300%)Buy?"); SetIndexStyle(4,DRAW_LINE,STYLE_DASH); SetIndexBuffer(4,TargetSELLBuffer); SetIndexLabel(4,"УровеньUP-Цель(300%)Sell?"); SetIndexStyle(5,DRAW_LINE); SetIndexBuffer(5,UpSignal); //SetIndexEmptyValue(5, 0.0); SetIndexLabel(5,"УровеньUP-Цель(200%)"); SetIndexStyle(6,DRAW_LINE); SetIndexBuffer(6,DnSignal); SetIndexLabel(6,"УровеньDN-Цель(200%)"); //---- name for DataWindow and indicator subwindow label // IndicatorShortName(short_name); return(0); } //+------------------------------------------------------------------+ //| OpenDaily_Levels | //+------------------------------------------------------------------+ int start() { if (Period() != 60) { Comment("ТОЛЬКО ДЛЯ ГРАФИКА 1 ЧАС!!! ПЕРЕКЛЮЧИТЬ НА Н1!!!"); return (0); } int i,counted_bars = IndicatorCounted(); double atrH1, highDaily, lowDaily, flat, flatWidth, Low161, High161; double LastHigh, LastLow; double open = iOpen(0,PERIOD_D1,0), low = iLow(0,PERIOD_D1,0), high = iHigh(0,PERIOD_D1,0); double atr = iATR(0,PERIOD_D1,5,0), Ma3, Ma5; double levelSELL = iLow(0,PERIOD_D1,1), levelBUY = iHigh(0,PERIOD_D1,1); string strTemp; int iX; //---- atrH1 = iATR(0,PERIOD_H1,SetFlatByATR,0); flat = setFlatZone*Point; flatWidth = 2*setFlatZone*Point; i = Bars - counted_bars - 1; // цикл индикатора while(i >= 0) { if (TimeHour(Time[i]) == 0) { open = Open[i]; // TimeHour low = Low[i]; high = High[i]; } DailyOpenBuffer[i] = open; LevelSELLBuffer[i] = open - flat; LevelBUYBuffer[i] = open + flat; if (setFlatZone < 10) { LevelSELLBuffer[i] = open - atrH1; LevelBUYBuffer[i] = open + atrH1; flatWidth = 2*atrH1; } // Цель Всегда (2-кратный коридор) UpSignal[i]=LevelBUYBuffer[i] + flatWidth; DnSignal[i]=LevelSELLBuffer[i] - flatWidth; // Цель КакПравило (3-кратный коридор) TargetSELLBuffer[i] = LevelBUYBuffer[i] + 2*flatWidth; TargetBUYBuffer[i] = LevelSELLBuffer[i] - 2*flatWidth; i--; } // конец цикла индикатора // Дополнительная цель 161% Low161 = LevelSELLBuffer[1] - 0.5*flatWidth + 7*Point; DrawTrend ("УровеньDN-Цель(150%)", 55, Low161, 0, Low161, Red, 0, 1, false, true); High161 = LevelBUYBuffer[1] + 0.5*flatWidth - 7*Point; DrawTrend ("УровеньUP-Цель(150%)", 55, High161, 0, High161, Green, 0, 1, false, true); // Say Levels if (sayLevels) { DrawTxt("OpenДня", 0, DailyOpenBuffer[1], " " + DoubleToStr(DailyOpenBuffer[1], 4), Black, 9); DrawTxt("HighФлэт", 0, LevelBUYBuffer[1], " " + DoubleToStr(LevelBUYBuffer[1], 4), Green, 9); DrawTxt("LowФлэт", 0, LevelSELLBuffer[1], " " + DoubleToStr(LevelSELLBuffer[1], 4), Red, 9); DrawTxt("High200%", 0, UpSignal[1], " " + DoubleToStr(UpSignal[1], 4), Green, 9); DrawTxt("Low200%", 0, DnSignal[1], " " + DoubleToStr(DnSignal[1], 4), Red, 9); DrawTxt("High300%", 0, TargetBUYBuffer[1], " " + DoubleToStr(TargetBUYBuffer[1], 4), Green, 9); DrawTxt("Low300%", 0, TargetSELLBuffer[1], " " + DoubleToStr(TargetSELLBuffer[1], 4), Red, 9); DrawTxt("High150%", 0, High161, " " + DoubleToStr(High161, 4), Green, 8); DrawTxt("Low150%", 0, Low161, " " + DoubleToStr(Low161, 4), Red, 8); } else { ObjectDelete("OpenДня"); ObjectDelete("HighФлэт"); ObjectDelete("LowФлэт"); ObjectDelete("High200%"); ObjectDelete("Low200%"); ObjectDelete("High300%"); ObjectDelete("Low300%"); ObjectDelete("High150%"); ObjectDelete("Low150%"); } //++++++++++++++++++++++++++++++++++++++++++++++++++ //---------------- Close-LowВчера, Close-Highчера (на 1 час) iX = iHighest(NULL,0,MODE_CLOSE,23,Hour() + 1); LastHigh = Close[iX]; DrawTrend ("HighCloseВчера(ниже-ОтменаUP)", Hour()+18, LastHigh, 0, LastHigh, DarkGreen, 5, 0, false, true); DrawTxt("txtHighCloseВчера", Hour()+15, LastHigh+10*Point, DoubleToStr(LastHigh, 4), DarkGreen, 11); iX = iLowest(NULL,0,MODE_CLOSE,23,Hour() + 1); LastLow = Close[iX]; DrawTrend ("LowCloseВчера(выше-ОтменаDN)", Hour()+18, LastLow, 0, LastLow, OrangeRed, 5, 0, false, true); DrawTxt("txtLowCloseВчера", Hour()+15, LastLow-3*Point, DoubleToStr(LastLow, 4), OrangeRed, 11); return(0); } int deinit() { ObjectDelete("HighCloseВчера(ниже-ОтменаUP)"); ObjectDelete("LowCloseВчера(выше-ОтменаDN)"); ObjectDelete("OpenДня"); ObjectDelete("HighФлэт"); ObjectDelete("LowФлэт"); ObjectDelete("High200%"); ObjectDelete("Low200%"); ObjectDelete("High300%"); ObjectDelete("Low300%"); ObjectDelete("High150%"); ObjectDelete("Low150%"); ObjectDelete("txtHighCloseВчера"); ObjectDelete("txtLowCloseВчера"); return(0); } //+------------------------------------------------------------------+ //+++++++ Графика ++++++++++++++++++++++++++++++++++++++++++ //----------DrawTrend - рисует Тренд по 2-м точкам void DrawTrend (string TrendName, int iX1, double Y1, int iX2, double Y2, color iTrendColor, int iTrendWidth, int iTrendStyle, bool Ray, bool Back) { if (ObjectFind(TrendName) > -1) ObjectDelete(TrendName); ObjectCreate(TrendName, OBJ_TREND, 0, Time[iX1], Y1, Time[iX2], Y2); ObjectSet(TrendName, OBJPROP_COLOR, iTrendColor); // DarkBlue ObjectSet(TrendName, OBJPROP_WIDTH, iTrendWidth); ObjectSet(TrendName, OBJPROP_STYLE, iTrendStyle); ObjectSet(TrendName, OBJPROP_RAY, Ray); ObjectSet(TrendName, OBJPROP_BACK, Back); } //----------DrawTxt - рисует Текст // ObjectCreate("OpenДня", OBJ_TEXT, 0, Time[0], DailyOpenBuffer[1]); // ObjectSetText("OpenДня", " " + DoubleToStr(DailyOpenBuffer[1], 4) ,9,"Tahoma",Black); // void DrawTxt (string TxtName, int iX1, double Y1, string Txt, color iTxtColor, int iTxtWidth) { if (ObjectFind(TxtName) > -1) ObjectDelete(TxtName); ObjectCreate(TxtName, OBJ_TEXT, 0, Time[iX1], Y1); ObjectSetText(TxtName, Txt, iTxtWidth, "Tahoma", iTxtColor); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //----------DrowMarker - рисует ценовую метку, предупреждающий значок