Прошу помощь зала. - страница 6

 

Забыл написать. Индикатор ZigZag, идущий в поставке с метатрейдером, уже примерно 20 лет имеет ошибку. 

Там есть параметр Deviation. Он ни на что не влияет. Задайте любое значение этого параметра. Отрсовка зигзага останется без изменений.

Это аппендикс. Этот параметр пожирает компьютерный ресурс своим присутствием. А, значит, это ошибка.

 
Eugeni Neumoin #:

Забыл написать. Индикатор ZigZag, идущий в поставке с метатрейдером, уже примерно 20 лет имеет ошибку. 

Там есть параметр Deviation. Он ни на что не влияет. Задайте любое значение этого параметра. Отрсовка зигзага останется без изменений.

Это аппендикс. Этот параметр пожирает компьютерный ресурс своим присутствием. А, значит, это ошибка.

ZigZag "из поставки" является чисто демонстрационным, в нём есть и другие ошибки. Его нельзя использовать в советниках, по крайней мере в своих.  Просто так исторически сложилось

он поэтому и лежит в Examples.

 
Maxim Kuznetsov #:

ZigZag "из поставки" является чисто демонстрационным, в нём есть и другие ошибки. Его нельзя использовать в советниках, по крайней мере в своих.  Просто так исторически сложилось

он поэтому и лежит в Examples.

1. Если зайти в Маркет, то можно там найти большое количество программ, в которых применяется зигзаг из поставки Метатрейдера.

2. Пропуск ошибок ведет к утрате передовых позиций. Посмотрите, как развивается трейдингвью...

3. Мне довелось 27 лет работать в одной компании, связанной с информационными технологиями. Эта компания является лидером отрасли в своей рыночной нише.

Приведу примеры, как эта компания добивалась лидерства.

Сначала ее сотрудники разработали первую версию программы. Это было примерно в 1989-90 году. Программа приносила по тем временам сумасшедшие прибыли. 

Но в руководстве увидели недостаток бизнес модели. И примерно через год-полтора отдали свою разработку отделившимся от компании сотрудникам.

Стали разрабатывать новую версию программы. Считай, старая версия программы давала огромную фору.

Но через некоторое время компания с новой разработкой стала лиделом на рынке.

Методы работы. Как только кто-то из клиентов находил ошибку или на что-то жаловался, ситуация незамедлительно исправлялась. Сотрудники из штата программистов напрямую связывались с клиентом.

Если кто-то в филиалах допускал нарушения - читай - ошибался, следовало строгое наказание.

Два примера. В 2008 году в одном филиале допустили ошибки. Филиал приносил 5% прибыли. У него числилось 15 000 клиентов.

С этим филиалом был расторгнут договор. С клиентами этого филиала заключили договора другие филиалы...

Примерно в то же время. У нас в городе другой филиал при продаже бизнеса от старого владельца новому один из филиалов переманил к себе одного! клиента из пула сделки.

На филиал, который переманил клиента, были наложены санкции. Санкции в совокупности были эквивалентны 5 000 000 рублей. Это более 15 лет назад было.

Ошибки - равноценны убыткам. А убытки надо резать мгновенно. Это первое правило трейдера.

Компания продолжает быть лидером рынка в своей нише.


Чему можно научиться на примерах с ошибками? Как можно работать, если документация написана так, что невозможно понять. То есть невозможно решить некоторые задачи.

 
Eugeni Neumoin #:


Чему можно научиться на примерах с ошибками? Как можно работать, если документация написана так, что невозможно понять. То есть невозможно решить некоторые задачи.

ZigZag это "притча во языцах" .  Это на самом деле "зигзагоподобная ломанная" : у него линии могут быть строго вертикальными (high,low на одном и том-же баре) и вершины могут пропускаться (два high подряд вполне легко)

На мой взгляд: и пример как код писать не надо :-) 

собственно поэтому ошибка в нём и остаётся. Словами алгоритм нигде не описан и ссылок на него нет. Коментарии исключительно в стиле "подчеркнём очевидное" ("//--- return value of prev_calculated for next call" непосредственно перед return(prev_calculated) )

Чтобы ошибки локализовать, придётся отчасти заниматься реверсом - выявлять "что-же имел в виду автор" по его коду. Чтобы исправить и результат соответсвовал начальному замыслу 

 
Maxim Kuznetsov #:

ZigZag это "притча во языцах" .  Это на самом деле "зигзагоподобная ломанная" : у него линии могут быть строго вертикальными (high,low на одном и том-же баре) и вершины могут пропускаться (два high подряд вполне легко)

На мой взгляд: и пример как код писать не надо :-) 

собственно поэтому ошибка в нём и остаётся. Словами алгоритм нигде не описан и ссылок на него нет. Коментарии исключительно в стиле "подчеркнём очевидное" ("//--- return value of prev_calculated for next call" непосредственно перед return(prev_calculated) )

Чтобы ошибки локализовать, придётся отчасти заниматься реверсом - выявлять "что-же имел в виду автор" по его коду. Чтобы исправить и результат соответсвовал начальному замыслу 

За что я не люблю форумы? Почти мгновенно тема уходит в сторону. И проблема не решается.

Повторю первоначальную просьбу:

Есть проблема с переводом индикатора с MQL4 на MQL5.


В свое время в 2009 - 2015 годах насоздавал много индикаторов для терминала МТ4. Все они  распространялись в свободном доступе.

Индикаторы, скажем так, не самые простые. В последние годы обращаются с просьбами перевести некоторые индикаторы.

В частности, есть такой индикатор - MZZ9 - выводит зигзаги со старших таймфреймов на текущий таймфрейм. Где-то в 2019 году пытался перевести его на MQL5. Тогда не получилось.

Сейчас опять возобновил попытки. Проверяю. Рачеты делаются - в буферы данные поступают. Но на график зигзаги не выводятся.

Смотрел и документацию, и тексты индикаторов из поставки метатрейдера 5. Перепробовал разные варианты задания параметров зигзагов... и через #property, и динамическое задание.

Не вовыдится. 

Буду благодарен, если кто поможет понять, где я ошибаюсь.

Выкладываю два варианта. Один вариант - версия под МТ4 - одна из последних версий.

И версия под МТ5 - переделана из какой-то более раннней версии идикатора под МТ4. 

Файлы:
MZZ9.mq4  88 kb
MZZ9.mq5  87 kb
text - Schema.org Property
  • schema.org
Schema.org Property: text - The textual content of this CreativeWork.
 
Eugeni Neumoin #:

За что я не люблю форумы? Почти мгновенно тема уходит в сторону. И проблема не решается.

Повторю первоначальную просьбу:

Есть проблема с переводом индикатора с MQL4 на MQL5.


В свое время в 2009 - 2015 годах насоздавал много индикаторов для терминала МТ4. Все они  распространялись в свободном доступе.

Индикаторы, скажем так, не самые простые. В последние годы обращаются с просьбами перевести некоторые индикаторы.

В частности, есть такой индикатор - MZZ9 - выводит зигзаги со старших таймфреймов на текущий таймфрейм. Где-то в 2019 году пытался перевести его на MQL5. Тогда не получилось.

Сейчас опять возобновил попытки. Проверяю. Рачеты делаются - в буферы данные поступают. Но на график зигзаги не выводятся.

Смотрел и документацию, и тексты индикаторов из поставки метатрейдера 5. Перепробовал разные варианты задания параметров зигзагов... и через #property, и динамическое задание.

Не вовыдится. 

Буду благодарен, если кто поможет понять, где я ошибаюсь.

Выкладываю два варианта. Один вариант - версия под МТ4 - одна из последних версий.

И версия под МТ5 - переделана из какой-то более раннней версии идикатора под МТ4. 

Файлы:
MZZ9.mq4  88 kb
MZZ9.mq5  87 kb

у PLOT_ZIGZAG - 2 буфера, но PLOT 1

то есть 

// По два индикаторных буффера использовано для вывода на график каждого зигзага
   SetIndexBuffer(0,LowestBuffer1,INDICATOR_DATA);   // Plot = 0
   SetIndexBuffer(1,HighestBuffer1,INDICATOR_DATA);
   SetIndexBuffer(2,LowestBuffer2,INDICATOR_DATA);   // Plot = 1
   SetIndexBuffer(3,HighestBuffer2,INDICATOR_DATA);
   SetIndexBuffer(4,LowestBuffer3,INDICATOR_DATA);   // Plot = 2
   SetIndexBuffer(5,HighestBuffer3,INDICATOR_DATA);
   SetIndexBuffer(6,LowestBuffer4,INDICATOR_DATA);   // Plot = 3
   SetIndexBuffer(7,HighestBuffer4,INDICATOR_DATA);

// Установка значений индикатора, которые не будут видимы на графике
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);  
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);  // ДОЛЖНО БЫТЬ 1
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0.0);  // ДОЛЖНО БЫТЬ 2
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,0.0);  // ДОЛЖНО БЫТЬ 3

и в property конечно - indictor_plots тоже 4 

(indicator_buffers как было)

 
Maxim Kuznetsov #:

у PLOT_ZIGZAG - 2 буфера, но PLOT 1

то есть 

и в property конечно - indictor_plots тоже 4 

(indicator_buffers как было)

Этот вариант ранее пробовал. Не работает.

Выводится вот так:

 




А должно быть вот так:


Это вариант в МТ4. А в МТ5 - на первой картинке с такими настройками:


// По два индикаторных буффера использовано для вывода на график каждого зигзага
   SetIndexBuffer(0,LowestBuffer1,INDICATOR_DATA);   // Plot = 0
   SetIndexBuffer(1,HighestBuffer1,INDICATOR_DATA);
   SetIndexBuffer(2,LowestBuffer2,INDICATOR_DATA);   // Plot = 1
   SetIndexBuffer(3,HighestBuffer2,INDICATOR_DATA);
   SetIndexBuffer(4,LowestBuffer3,INDICATOR_DATA);   // Plot = 2
   SetIndexBuffer(5,HighestBuffer3,INDICATOR_DATA);
   SetIndexBuffer(6,LowestBuffer4,INDICATOR_DATA);   // Plot = 3
   SetIndexBuffer(7,HighestBuffer4,INDICATOR_DATA);

// Установка значений индикатора, которые не будут видимы на графике
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);  
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);  // ДОЛЖНО БЫТЬ 1
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0.0);  // ДОЛЖНО БЫТЬ 2
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,0.0);  // ДОЛЖНО БЫТЬ 3
 
Eugeni Neumoin #:

Этот вариант ранее пробовал. Не работает.

Выводится вот так:




А должно быть вот так:


Это вариант в МТ4. А в МТ5 - на первой картинке с такими настройками:


2 4 6 исправить на 1 2 3 - это правильно

у вас 4 штуки PLOT_ZIGZAG - PlotIndex от 0 до 3

а буферов 8, по 2 на каждый PlotIndex

---

если не рисуется - знать накосячино ещё где-то

в окне данных (Ctrl-D) появятся строчки - их внимательно смотрите, есть ли там данные вообще на разных барах

 
Складывается такое впечатление, что вывод нескольких зигзагов одним индикатором невозможно осуществить . Это не допускает МТ5...
 
Maxim Kuznetsov #:....  если не рисуется - знать накосячино ещё где-то



Перед тем как выложить здесь проблему, проверил есть ли данные в индикаторных буферах. И в версии для МТ4, и в версии для МТ5  данные в индикаторные буферы записываются. ПРичем данные примерно одинаковые с учетом того, что  для МТ4 идут данные от форекс клуба, а для МТ5 от метаквотес.

Участок отладочного кода перед выкладыванием здесь удалил. Но могу и с этим участком выложить.

А раз данные в индикаторные буферы поступают, значит проблема с выводом на график. То есть как раз где-то здесь:

// По два индикаторных буффера использовано для вывода на график каждого зигзага
   SetIndexBuffer(0,LowestBuffer1,INDICATOR_DATA);   // Plot = 0
   SetIndexBuffer(1,HighestBuffer1,INDICATOR_DATA);
   SetIndexBuffer(2,LowestBuffer2,INDICATOR_DATA);   // Plot = 1
   SetIndexBuffer(3,HighestBuffer2,INDICATOR_DATA);
   SetIndexBuffer(4,LowestBuffer3,INDICATOR_DATA);   // Plot = 2
   SetIndexBuffer(5,HighestBuffer3,INDICATOR_DATA);
   SetIndexBuffer(6,LowestBuffer4,INDICATOR_DATA);   // Plot = 3
   SetIndexBuffer(7,HighestBuffer4,INDICATOR_DATA);

// Установка значений индикатора, которые не будут видимы на графике
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);  
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);  // ДОЛЖНО БЫТЬ 1
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0.0);  // ДОЛЖНО БЫТЬ 2
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,0.0);  // ДОЛЖНО БЫТЬ 3
Причина обращения: