Я могу вам предложить расчет точек "штатного" зигзага мт4.
В т.ч. и по вашему вопросу "средней линии".
Устроит вас такой вариант ?
Вот так я реализовал в своем советнике расчет точек:
#property copyright "Copyright © 2009, MQ ." #property link "MQL " //-------------------------------------------------------------------+ //В версию Внесены след. изменения: // Введен параметр StopLoss_Average //При StopLoss_Average =True; стоплоссы ордеров выставляются строго на // средней линии между последними экстремуми зигзага. //При StopLoss_Average== false стоплоссы ордеров выставляются в соотв. с // заданными значениями StopLossBuy и StopLossSell extern string _ = "---- ОБЩИЕ ПАРАМЕТРЫ -----"; extern int MAGIC = 2778609; extern double lots=0.1; extern int Time_=60;// время существования ордера в мин. extern int Slippage=3; extern bool StopLoss_Average =True; extern string __ = "---- ПАРАМЕТРЫ BUY -----"; extern bool BUY=True; extern int StopLossBuy=0; extern int TakeProfitBuy=55; extern int Delta=10; extern string ___ = "---- ПАРАМЕТРЫ SELL -----"; extern bool SELL=True; extern int StopLossSell=0; extern int TakeProfitSell=55; extern int Delta_=10; extern string ____ = "---- ПАРАМЕТРЫ ИНДИКАТОРА ZIG-ZAG -----"; extern int ExtDepth = 12; extern int ExtDeviation = 5; extern int ExtBackstep = 3; int ShiftBars = 1;
Далее в функции СТАРТ задаем расчет последних вершин зигзага
int ticket; datetime ExpTime; //-- Подключаемые модули -- #include <stderror.mqh> #include <stdlib.mqh> //================================================== int start() { double // экстремумы Зиг-Зага y3=0, //предпоследнего экстремума y2=0,//значение последего экстремума y1=0,//тек. цена y0,//кончик посл. луча zz; //кончик 3-го экстр int x3, x2, x1, sh=ShiftBars;// номера баров double price; double profit=0; ExpTime=TimeCurrent()+Time_*60; double stop; // Comment(zz,"_",y1,"_",y2,"_",y3); y0=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, 1); double StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL); //============================================================================= // Берём три экстремума Зиг-Зага while (y3==0) { zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh); if (zz!=0 && zz!=EMPTY_VALUE) { if (y1==0) { x1=sh; y1=zz; } else if (y2==0) { x2=sh; y2=zz; } else if (y3==0) { x3=sh; y3=zz; } } sh++;
Потом, для наглядности, выводим на график отображение информации о вершинах зигзага.
//----- Вывод информации на экран ----------------------------------------------- string info=""; string on_off="---------------------------------------------------"+ "\r\n"; if (BUY) on_off=StringConcatenate (on_off,"Сделки BUY разрешены ", "\r\n"); else on_off=StringConcatenate (on_off,"Сделки BUY - отключ. ","\r\n"); if (SELL) on_off=StringConcatenate (on_off,"Сделки SELL разрешены ","\r\n"); else on_off=StringConcatenate (on_off,"Сделки SELL - отключ. ","\r\n"); on_off=StringConcatenate (on_off,"Экстремум= ",y1," на ",x1," баре","\r\n"); on_off=StringConcatenate (on_off,"Экстремум= ",y2," на ",x2," баре","\r\n"); info=StringConcatenate(info,on_off,"\r\n"); info=StringConcatenate(info,"\r\n"); Comment(info); //----------------------------------------------- } // while (y3==0) //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж //ЗДЕСЬ ИДЕТ ОТКРЫТИЕ И ЗАКРЫТИЕ ПОЗИЦИЙ //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж return(0);//конец функции int start() }
Уже в таком виде советник будет выводить на график текущие последние экстремумы (мин и макс).
Посмотрите в тестере, в режиме ВИЗУАЛИЗАЦИЯ.
Надеюсь, теперь у вас затруднений не возникнет.
Чтобы рассчитаь середину между двумя экстремумами последнего луча достаточно взять:
double СЕРЕДИНА =MathAbs( (y1-y2)/2 );
Чтобы потом дополнительных вычислений не делать:
СЕРЕДИНА = (y1+y2)*0,5;
nen Спасибо!
Как раз хотел спросить у Вас как специалиста по ZZ есть подобный ZZ по которому можно расчитать так же идентично расчет как этот только что бы он не перерисовывался, может у Вас завалялась такая версия?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте асы программинга, столкнулся с проблемой деления луча ZZ попалам, и выведения уровня середины луча, - как это сделать?..... мне сказали в ветке вопросов что последняя точка не расчитывается у зигзага.
Как можно сделать что бы было тоже самое, в другом варианте. Сам пока только учусь.