Не, не так. В цикле надо перебирать, как вам выше писали, оба буфера и значение смещения=инкремент цикла. В ЗЗ не на каждом баре значение рабочее, чаще 0.0 будет.
Не, не так. В цикле надо перебирать, как вам выше писали, оба буфера и значение смещения=инкремент цикла. В ЗЗ не на каждом баре значение рабочее, чаще 0.0 будет.
Обычный зигзаг рисуется по нулевому буферу. Перебираем его, если содержимое ячейки больше нуля, значит это перелом зигзага. Это и есть бар и цена точки. Нулевое значение ячейки пропускаем - нет точки зигзага.
...и так весь буфер
...последние две точки могут перерисовываться
...если у зигзага два буфера для точек, тогда нужно определять последовательность этих вершин, кто выше, кто ниже - чтобы правильно нарисовать перелом
...если у зигзага два буфера для точек, тогда нужно определять последовательность этих вершин, кто выше, кто ниже - чтобы правильно нарисовать перелом
Ничего особо не надо определять, в один буфер всегда пишутся вершины, а в другой, соответственно - всегда впадины. Достаточно их в нужном порядке чередовать.
Vitalie Postolache: Ничего особо не надо определять, в один буфер всегда пишутся вершины, а в другой, соответственно - всегда впадины.
Буфер типа DRAW_SECTION рисует ZZ одним буфером - проводит линии между ненулевыми точками. Это и есть самый обычный из всех обычных
Natalya Dzerzhinskaya:
Там же надо знать время 1 цена 1 и время 2 цена 2
Перебираете (вызываете индикатор) в цикле на глубину в сколько вам надо баров, если значение ненулевое и не EMPTY_VALUE - это экстремум. Само значение - цена, Time[номер бара] - время. В скрипте на 1й странице есть всё что вам нужно. Нашли 3 точки экстремумов - можете нарисовать 2 трендовые линии
Но вообше-то стоит заиметь функцию для расчёта ZZ и вставлять её в советники - это чтобы не вызывать внешний индикатор хрен знает сколько раз
Ничего особо не надо определять, в один буфер всегда пишутся вершины, а в другой, соответственно - всегда впадины. Достаточно их в нужном порядке чередовать.
если определять ничего не нужно, расскажите, что делать когда на одном баре два перелома? как рисовать линию, сверху-вниз или снизу вверх? ;)
Ничего особо не надо определять, в один буфер всегда пишутся вершины, а в другой, соответственно - всегда впадины. Достаточно их в нужном порядке чередовать.
Зигзаг стандартный смотрим нулевой буфер. На барах, где перелом отсутствует, его значение = 0. Перебираем бары и находим отличное от нуля значение. Это цена вершины. Время определяем по номеру бара. Проводим из прошлой вершины в эту ТрендЛинию. Вот мой скрипт, выводящий зигзаг в файл. Где-то скачал и чуть подправил. А зачем рисовать советником, если можно индикатор бросить на график!
//+------------------------------------------------------------------+//| Запись в файл значений индикатора ZigZag ZigZag_to_File.mq4 |//+------------------------------------------------------------------+#property show_inputs#property strictenum Локаль // Десятичный разделитель для отображения в Excel
{ Точка, Запятая };
enum Значения // Количество значений, выводимых в файл
{ Последнее, Все };
// Параметры индикатораexternint ExtDepth=12;
externint ExtDeviation=5;
externint ExtBackstep=3;
extern Значения Все = Все; // Все значения или лишь последнееextern Локаль RUS = Запятая; // Для русской локализации запятуюvoidOnStart()
{
string ИмяФайла=Symbol()+".txt"; // Имя файла на дискеint Файл = FileOpen(ИмяФайла, FILE_CSV | FILE_WRITE, " "); // Указатель на файлdouble ZZ; // Значение индикатора ЗигЗаг или 0 при его отсутствииif(Файл == -1)
{
Alert("Ошибка при открытии файла ", ИмяФайла);
return;
}
FileWrite(Файл, " Время Open High Low Close ZigZag");
for(int shift = 0; shift <= Bars-1; shift++)
{
ZZ = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift);
if(!ZZ)continue;
FileWrite(Файл,
TimeToStr(Time[shift]),
dstr(Open[shift]),
dstr(High[shift]),
dstr(Low[shift]),
dstr(Close[shift]),
dstr(ZZ) );
if(!Все)break;
}
FileClose(Файл);
}
// Преобразование числа double в строку с запятой или точкой в соответствии с локализациейstring dstr(double Цена)
{
if(!RUS) returnDoubleToStr(Цена, Digits);
returnStringSetChar(DoubleToStr(Цена, Digits), StringFind(DoubleToStr(Цена, Digits), "."), ',');
}
А зачем рисовать советником, если можно индикатор бросить на график!
Можно, но каждый индикатор бросать который используется в советнике не весело. Так то он нафиг не нужен в прорисовке, чисто для удобства. При торговле портфелем есть ложные сигналы и хочется видеть всё что в тренде.
Возможно они. Я их сделаю доступными для вызова. А как в советнике с ними поступить чтобы рисовали?
Допустим:
Не, не так. В цикле надо перебирать, как вам выше писали, оба буфера и значение смещения=инкремент цикла. В ЗЗ не на каждом баре значение рабочее, чаще 0.0 будет.
Не, не так. В цикле надо перебирать, как вам выше писали, оба буфера и значение смещения=инкремент цикла. В ЗЗ не на каждом баре значение рабочее, чаще 0.0 будет.
Ага, с этим понятно.
Надеюсь разберусь.
Спасибо))
Обычный зигзаг рисуется по нулевому буферу.
Перебираем его, если содержимое ячейки больше нуля, значит это перелом зигзага. Это и есть бар и цена точки.
Нулевое значение ячейки пропускаем - нет точки зигзага.
...и так весь буфер
...последние две точки могут перерисовываться
...если у зигзага два буфера для точек, тогда нужно определять последовательность этих вершин, кто выше, кто ниже - чтобы правильно нарисовать перелом
...если у зигзага два буфера для точек, тогда нужно определять последовательность этих вершин, кто выше, кто ниже - чтобы правильно нарисовать перелом
Ничего особо не надо определять, в один буфер всегда пишутся вершины, а в другой, соответственно - всегда впадины. Достаточно их в нужном порядке чередовать.
Ничего особо не надо определять, в один буфер всегда пишутся вершины, а в другой, соответственно - всегда впадины.
Буфер типа DRAW_SECTION рисует ZZ одним буфером - проводит линии между ненулевыми точками. Это и есть самый обычный из всех обычных
Там же надо знать время 1 цена 1 и время 2 цена 2
Перебираете (вызываете индикатор) в цикле на глубину в сколько вам надо баров, если значение ненулевое и не EMPTY_VALUE - это экстремум. Само значение - цена, Time[номер бара] - время. В скрипте на 1й странице есть всё что вам нужно. Нашли 3 точки экстремумов - можете нарисовать 2 трендовые линии
Но вообше-то стоит заиметь функцию для расчёта ZZ и вставлять её в советники - это чтобы не вызывать внешний индикатор хрен знает сколько раз
Ничего особо не надо определять, в один буфер всегда пишутся вершины, а в другой, соответственно - всегда впадины. Достаточно их в нужном порядке чередовать.
если определять ничего не нужно, расскажите, что делать когда на одном баре два перелома?
как рисовать линию, сверху-вниз или снизу вверх? ;)
Прежде всего, где вы видели ЗЗ с одним буфером? Классический - с тремя, многие другие - минимум тоже с тремя.
В классическом, из поставки терминала - вершина в 2-м буфере, впадина в 3-м.
Ни дня без бреда, да?
Где угодно и сколько угодно зигзагов с одним буфером. Для рисования зигзага достаточно одного буфера.
Ничего особо не надо определять, в один буфер всегда пишутся вершины, а в другой, соответственно - всегда впадины. Достаточно их в нужном порядке чередовать.
А вы вообще зигзаг видели?
Зигзаг стандартный смотрим нулевой буфер. На барах, где перелом отсутствует, его значение = 0. Перебираем бары и находим отличное от нуля значение. Это цена вершины. Время определяем по номеру бара. Проводим из прошлой вершины в эту ТрендЛинию. Вот мой скрипт, выводящий зигзаг в файл. Где-то скачал и чуть подправил. А зачем рисовать советником, если можно индикатор бросить на график!
А зачем рисовать советником, если можно индикатор бросить на график!
Можно, но каждый индикатор бросать который используется в советнике не весело. Так то он нафиг не нужен в прорисовке, чисто для удобства.
При торговле портфелем есть ложные сигналы и хочется видеть всё что в тренде.

Трендовые линии прорисовываются советником.