MQL5 & ZUP

Тема в разделе "Зиг-Заг. Системы с использованием ZigZag.", создана пользователем nen, 25 авг 2009.

  1. Rosh

    Rosh Новичок

    Евгений, эту ошибку исправили еще в январе. И нашел ее AlexStal.
     
  2. nen

    nen Профи форума

    Рашид, это хорошо. А как переустановить индикаторы. Необходимо полностью сносить их и очередной апгрэйд установит новые? Или терминал надо переустанавливать?

    И еще. Надеюсь, критика, пойдет на пользу общему делу. У меня нет задачи сделать компании метаквотес плохо. Есть задача, чтобы все работало хорошо.
    Действительно, в МТ5 заложен очень мощный потенциал. Можно делать чудеса.
     
  3. Rosh

    Rosh Новичок

    Все поставляемые с терминалом примеры на MQL5(эксперты, индикаторы, скрипты и классы Стандартной библиотеки) обновляются автоматически через систему LiveUpdate.
     
  4. Rosh

    Rosh Новичок

    Может Вы это и называете критикой, но для меня это выглядит как необоснованный слив негатива без знания материала.
    Хороших слов от Вас я не жду, но для объективности картины сообщил о том, что ошибку с ZigZag'ом (только в одном из двух была) исправили уже как месяц назад.
     
  5. nen

    nen Профи форума

    Через систему LiveUpdate не обновляется. У меня последний билд выдал такие ошибки.
     
  6. nen

    nen Профи форума

    Иногда необходимо буквально сплясать на голове, чтобы Ваша компания услышала. Как говорится, что посеешь, то и пожнешь.
    Почему в конце 2005 года многие ушли с форума Альпари? Где Вы, Рашид, были одним из модераторов...
    Примерно такая же причина. Глухота модераторов. И сейчас на Вашем форуме - мкл4 - некоторые модераторы, когда стали модераторами, проблемы из пальца высасывают. Модераторы общественные, я имею в виду, а не от компании.
    Ну да ладно. У Вас нельзя высказаться. Здесь и на Пауке можно. Только лучше для Вас, если все-таки высказывания будут на Вашем форуме. Цунами меньшего размера будут. Я там не хочу появляться. И создавать еще ник там не буду.

    Чтобы не было такого негатива, Вашей компании необходимо более ответственно относиться к внешним контактам, более ответственно выпускать новшества, более понятно делать описания Ваших программ. Можете воспринимать все здесь сказанное как угодно. Но это правила ведения бизнеса. К сожалению, многие правила грамотного ведения бизнеса для Вашей компании не известны. Поэтому у Вашей компании часто выходят напряженные отношения почему-то с теми, кто что-то делает, а не поддакивает Вам. Среди забаненных на Вашем форуме есть достаточное количество людей, кто действительно что-то делает.
     
  7. nen

    nen Профи форума

    И правильно делаете, что хороших слов не ждете.
    Я не поленился, скачал на чистый компьютер текущую версию - 420 билд - метатрейдера.
    Поставил для начала ZigZag на график с параметрами
    Не поленюсь четко расписать параметры

    ExtDepth=12;
    ExtDeviation=5;
    ExtBackstep=13;

    Зигзаг на график не выводится. Во вкладке эксперты видим%

    2011.03.18 22:54:39 ZigZag (EURUSD,H1) Array out of range in 'ZigZag.mq5' (209,20)

    Тоже самое и с индикатором ZigzagColor

    2011.03.18 23:01:01 ZigzagColor (EURUSD,H1) Array out of range in 'ZigzagColor.mq5' (189,20)

    Рашид, какую Вы говорите исправили ошибку в январе по подсказке AlexStal ????

    =================

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

    Несколько дней назад я здесь разместил сообщение об ошибке. ВМЕСТО ТОГО ЧТОБЫ ПРОВЕРИТЬ, Рашид... все видят, что он ответил.

    И так всегда. Примерно такое же было и у них на форуме. Напсал им про ошибки с картинками. На это Рашид сказал, что я не удосужился привести аргументы...
    Что тут скажешь. Плохо, когда в компании ленивые люди трудятся. Приходится за них делать работу сторонним наблюдателям, вроде меня и других - бесполезных людей с точки зрения компании метаквотес.

    Надеюсь, что это сообщение Рашид проигнорирует. Все таки неприятно на такие сообщения отвечать...
     
  8. nen

    nen Профи форума

    Стало понятно, почему в МТ5 зигзаг часто на новых тиках пропадает. Похоже, в МТ5 также происходит переинициализация индикаторных буферов.
    Мдя.
    Придется индикаторные буферы не использовать, а рисовть зигзаги с помощью отрезков трендовых линий, чтобы не было мелькания индикатора. От этого мелькания через некоторое время становится дурно.
     
  9. nen

    nen Профи форума

    Даже не только зигзаг пропадает на новых тиках, но и уровни фибо. То есть любые графические построения. Это уже перебор.
     
  10. Rosh

    Rosh Новичок

    Да, я невнимательно посмотрел Ваш пост, я думал речь шла об ошибке в одном из зигзагов, в котором при малом количестве баров в истории (например, на месяцовках) вылетала ошибка
    Код:
    Array out of range
    Вы же привели типичную историю с японской бензопилой и сибирскими мужиками. Зачем в параметры зигзага засовывать ExtDepth<ExtBackstep? Если человек не понимает как устроен зигзаг, то не стоит и жаловаться, что он пропадает, и тем более фибы на его основе. Вы как разработчик ZUP'а должны знать эти тонкости и при необходимости защищаться от таких ситуаций.
    Я не думаю, что мы должны ставить такую защиту в наш пользовательский зигзаг, это бессмысленно.

    Для тех кто не знает назначение параметров ExtDepth и ExtBackstep, отсылаю к первому своему описанию - http://forum.viac.ru/viewtopic.php?t=2141&highlight=zigzag
     
  11. nen

    nen Профи форума

    Насчет смысла ExtDepth<ExtBackstep надо проверить, как будет прорисовываться при таких параметрах зигзаг.
    С таким соотношением параметров много людей работает. Я не проверял, насколько это оправдано. По правде сказать, у меня вызывало вопрос такое применение параметров. Но руки не доходили до проверки оправданности... Попробую на днях сделать проверку. Результаты, если будут, выложу здесь.
    Это важно.

    В ZUP и мультизигзагах с таким соотношением параметров все работает.

    А вот это совсем другое. Я здесь говорю про МТ5. Зигзаг поставил с нормальными параметрами. То есть он прорисовывается. Но по мере поступления котировок происходит мерцание зигзага. То есть он периодически пропадает. Появляется или сам через некоторое время, или после сдвигания графика.
    Фибы я просто накинул на график параллельно с зигзагом. ТО есть фибы от зигзага в данном случае нисколько не зависели. И фибы также мерцали. То есть и зигзаг, и фибы синхронно пропадали. И про это мерцание зигзага еще примерно год назад на Вашем форуме кто-то говорил.
    Я тогда в сервисдеске (или как там тогда это называлось), кажется, тоже говорил, когда зигзаг обсуждали. Но эта тема зависла... Как-то неактуально тогда было.

    Далее также при повторном обнаружении этого мерцания подробно здесь опишу. В рабочем порядке.
     
  12. nen

    nen Профи форума

    Дальнейшее развитие ZUP возможно в бОльшей степени только под МТ5. В МТ4 или очень сложно, или невозможно некоторые задачи реализовать. К тому же, ZUP необходимо кардинально почистить.

    Есть следующие темы для реализации.
    1) Супермультизигзаг - на его основе ZUP
    2) Паттерны Песавенто
    3) Бабочки Гартли.
    ...
    4) Полный комплект вил Эндрюса, который в ZUP под МТ4 реализован, с добавлением того, что нельзя реализовать в МТ4.

    Семинар, проведенный в минувшие выходные (19-20 марта) Putnik-ом, позволил лучше увидеть возможности применения вил Эндрюса.
    Получалось ранее сапожник без сапог. Создал комплект вил Эндрюса в ZUP, а сам его не применяю. А возможности заложены в этот инструмент, как оказывается, просто фантастические...

    5) Некоторые другие инструменты для графического анализа.

    Это пока все больше пожелания самому себе. Сделать было бы интересно... Но не будем загадывать.
     
  13. nen

    nen Профи форума

    Это не бессмыслено.
    Возьму кусок кода из мультизигзага, использующего алгоритм стандартного зигзага. Я имею в виду под стандартным зигзаг, включенный поставку метатрейдера.

    Код:
       // Начало первого большого цикла
       for(bar=limit1; bar>=0; bar--)
         {
          //--- low
          if (bar<bar_l)
            {
             j=iLowest(NULL,GrossPeriod_[x],MODE_LOW,ExtDepth_[x],bar);
             val=iLow(NULL,GrossPeriod_[x],j);
    
             if(val==lastlow) val=0.0;
             else 
               { 
                lastlow=val; 
                if((iLow(NULL,GrossPeriod_[x],bar)-val)>deviation) val=0.0;
                else
                  {
                   for(back=1; back<=ExtBackstep_[x]; back++)
                     {
                      if(val<LB[j+back])LB[j+back]=0.0; 
                     }
                  }
               } 
    
             if (j==bar) LB[j]=val;
            }
    
          //--- high
          if (bar<bar_h)
            {
             j=iHighest(NULL,GrossPeriod_[x],MODE_HIGH,ExtDepth_[x],bar);
             val=iHigh(NULL,GrossPeriod_[x],j);
    
             if(val==lasthigh) val=0.0;
             else 
               {
                lasthigh=val;
                if((val-iHigh(NULL,GrossPeriod_[x],bar))>deviation) val=0.0;
                else
                  {
                   for(back=1; back<=ExtBackstep_[x]; back++)
                     {
                      if(val>HB[j+back])HB[j+back]=0.0; 
                     } 
                  }
               }
    
             if (j==bar) HB[j]=val;
            }
         }
       // Конец первого большого цикла
    
    
    Берем участок для поиска минимумов:
     
  14. nen

    nen Профи форума

    Код:
          if (bar<bar_l)
            {
             j=iLowest(NULL,GrossPeriod_[x],MODE_LOW,ExtDepth_[x],bar);
             val=iLow(NULL,GrossPeriod_[x],j);
    
             if(val==lastlow) val=0.0;
             else 
               { 
                lastlow=val; 
                if((iLow(NULL,GrossPeriod_[x],bar)-val)>deviation) val=0.0;
                else
                  {
                   for(back=1; back<=ExtBackstep_[x]; back++)
                     {
                      if(val<LB[j+back])LB[j+back]=0.0; 
                     }
                  }
               } 
    
             if (j==bar) LB[j]=val;
            }
    
    Минимум может быть найден и на самом последнем баре - Bars-1
    функцией j=iLowest(NULL,GrossPeriod_[x],MODE_LOW,ExtDepth_[x],bar);
     
  15. nen

    nen Профи форума

    Далее следует цикл:

    Код:
                   for(back=1; back<=ExtBackstep_[x]; back++)
                     {
                      if(val<LB[j+back])LB[j+back]=0.0; 
                     }
    
    И если нет в коде ограничения на выход за пределы массива, то получаем вышеприведенную ошибку.

    Вывод: смысл в защите есть!!!

    У меня это делается с помощью задания ограничения :

    Код:
             
             limit=iBars(NULL,GrossPeriod_[i])- (ExtBackstep_[i]+ExtDepth_[i]);
    
     
  16. nen

    nen Профи форума

    Еще раз проанализировал логику зигзага и вынужден не согласиться с выделенным красным цветом.

    Берем участок для поиска минимумов:

    Код:
          if (bar<bar_l) 
            { 
             j=iLowest(NULL,GrossPeriod_[x],MODE_LOW,ExtDepth_[x],bar); 
             val=iLow(NULL,GrossPeriod_[x],j); 
     
             if(val==lastlow) val=0.0; 
             else  
               {  
                lastlow=val;  
                if((iLow(NULL,GrossPeriod_[x],bar)-val)>deviation) val=0.0; 
                else 
                  { 
                   for(back=1; back<=ExtBackstep_[x]; back++) 
                     { 
                      if(val<LB[j+back])LB[j+back]=0.0;  
                     } 
                  } 
               }  
     
             if (j==bar) LB[j]=val; 
            }
    
    
    Первоначальный поиск экстремумов на истории проводим в окне ExtDepth_[x].
    Фильтрация экстремумов производится фактически в окне ExtBackstep_[x]+ExtDepth_[x]. Это следует из предыдущих постов.
    Увеличение значения ExtBackstep_[x] просто увеличает окно, в котором применяется фильтр, заданный параметром deviation.

    Первоначальный отбор экстремумов производится по одному алгоритму:

    грубо говоря функцией j=iLowest(NULL,GrossPeriod_[x],MODE_LOW,ExtDepth_[x],bar);

    Фильтрация уже найденных на первом отборе эксремумов производится по другому алгоритму:

    Код:
                   for(back=1; back<=ExtBackstep_[x]; back++) 
                     { 
                      if(val<LB[j+back])LB[j+back]=0.0;  
                     }
    
    ВременнЫе окна для первого и второго алгоритмов могут быть разными.

    Получается, что соотношение ExtBackstep>ExtDepth имеет право на существование.
     
  17. nen

    nen Профи форума

    Из всего вышесказанного следует:
    1) защиту в пользовательский зигзаг ставить надо;
    2) значение параметра ExtBackstep может быть каким угодно, в том числе и больше значения параметра ExtDepth.

    Просто Рашид не разобрался с логикой зигзага до конца.

    Ну и подтверждаю, что зигзаги, включенные в поставку МТ5, можно использовать только в учебных целях. То есть только для того, чтобы изучать язык программирования MQL5, но ни в коем случае нельзя их использовать для работы на рынке. Они сработаны с грубыми ошибками.
     
  18. nen

    nen Профи форума

    ===========================
    ===========================
    ===========================
    ===========================
     
  19. nen

    nen Профи форума

    Вывод следующий. В МТ5 заложены просто фантастические возможности. И идет развитие. Альтернативы не просматриваются.
    Но всегда необходимо помнить, что все созданное на основе продуктов компании метаквотес с любым очередным билдом может прекратить нормально работать.
    Постоянно не только ошибки исправляются, но и меняются свойства программ. Изменение свойств ЧАСТО влечет прекращение или изменение работы некоторых функций. К тому же есть ошибки в реализации программ (языка, терминала... неоднозначное описание языка в справочнике), которые могут быть замечены через какое-то время. При этом разработчики вольны исправлять или не исправлять замеченные ошибки. Что они ярко продемонстрировали на примере 387 билда МТ4. Сделали то, что можно было и не делать. По крайней мере, можно было сделать не так грубо и необдуманно. Функция IndicatorCounted() по большому счету вообще не нужна.... Но сейчас сделано так, что ее не объедешь. И бог с ней.

    Это все необходимо помнить. Родовые пятна остаются надолго, если не на всю жизнь.

    ---------------------------------------------------------------------------------

    Ближе к теме.

    Первый серьезный вопрос. В какой оболочке делать ZUP5? В виде эксперта или в виде индикатора?

    Читаем Справочник.

    Организация доступа к данным


    Доступность данных

    Наличие данных в формате HCC или даже в готовом для использования формате HC не всегда означает безусловную доступность этих данных для отображения на графике или для использования в mql5-программах.

    При доступе к ценовым данным или к значениям индикаторов из mql5-программ следует помнить, что не гарантируется их доступность в определенный момент времени, либо с определенного момента времени. Это связано с тем, что в целях экономии ресурсов в MetaTrader 5 не хранится полная копия требуемых данных для mql5-программы, а дается прямой доступ к базе данных терминала.

    Ценовая история по всем таймфреймам строится из общих данных формата HCC и любое обновление данных с сервера приводит к обновлению данных по всем таймфреймам и пересчету индикаторов. Вследствие этого, в доступе к данным может быть отказано даже в том случае, если эти данные были доступны мгновение назад.

    Синхронизация данных терминала и данных сервера

    Поскольку mql5-программа может обратиться к данным по любому символу и таймфрейму, то есть вероятность, что данные требуемой таймсерии еще не сформированы в терминале или требуемые ценовые данные не синхронизированы с торговым сервером. В этом случае время ожидания готовности данных сложно прогнозировать.
    ...

    Доступ к таймсериям и данным индикаторов

    ...
    Доступ к данным индикаторов и таймсерий (странная формулировка, nen) осуществляется независимо от факта готовности запрашиваемых данных (так называемый асинхронный доступ). Это критически важно для расчета пользовательских индикаторов, поэтому при отсутствии запрашиваемых данных функции типа Copy...() сразу же возвращают ошибку. Однако при доступе из экспертов и скриптов производится несколько попыток получения данных с небольшой паузой, призванной обеспечить время, необходимое для загрузки недостающих таймсерий либо для расчета значений индикаторов.
    -----
    Отказ в доступе при работе индикатора неприятная особенность. К тому же есть особенности подкачки истории по периоду, на котором работает индикатор. В Справочнике все сильно разбросано в разных местах. У экспертов же отказа в доступе не не получаем, но если за время расчета пришел новый тик, то он будет проигнорирован и расчет на нем произведен не будет. Для зигзагов не страшен пропуск тиков. Графические построения на основе зигзагов привязываются к точкам (экстремумам), находящимся далеко в прошлом. И сиюминутные дергания рынка для графических построений не имеют, можно сказать, никакого значения.

    Для экспертов есть ограничения - на график можно прикрепить только один эксперт. А количество индикаторов на графике не ограничено.

    ZUP5 планируется на основе мультизигзага. То есть нет необходимости вывода множества индикаторов на график, чтобы сделать графические построения по даннм множества таймфреймов.

    То есть можно сделать все, что ранее удавалось сделать с помощью нескольких ZUP, в одном.

    Так как планируется делать на основе мультизагзага, то каким образом вводить параметры?
    Ввод параметров в виде строки, как это сделано в мультизигзагах неприемлем.
    А если вводить параметры раздель, не в виде строки, то количество параметров не поддается подсчету.
    Могут быть тысячи параметров. Это неприемлемо.

    Склоняюсь к тому, что параметры как таковые вообще почти не делать. То есть изменять свойства программы с помощью вызова табло, похожего на хэнд менеджер (создатель Хэнд менеджера, по моим данным, также был забанен на форуме mql4). С помощью табло создаются необходимые объекты, задаются свойства объектов. Далее эти объекты живут своей жизнью на графике. При необходимости изменения свойств объектов вызывается соответствующее табло и задаются новые свойства объектов. Также необходимо предусмотреть возможность перетаскивания точек привязки объектов с помощью мыши.

    Отсутствие входных параметров вызывает вопрсы. Каким образом созданная структура может быть перенесена с помощью профиля или шаблона на другой график? Точнее, насколько корректно будут работать профили и шаблоны с такой структурой?

    Непонятно стоит ли использовать индикаторные буферы. Склоняюсь больше к тому, что строить зигзаги - несколько последних (сколько - задавать отдельно) лучей - с помощью отрезков прямых линий или с помощью меток. То есть графическими объектами. Это сильно съэкономит память и отпадет необходимость резервирования памяти под непонятное количество индикаторных буферов. Плюс отсутствие индикаторных буферов устранит потенциальную непонятку с принудительной переинициализацией индикаторных буферов, как это сделано в МТ4 билд 387 и далее.

    Количество буферов, которые могут быть использованы в процессе работы, заранее определить не представляется возможном. А резервировать память под 10-20-30 буферов расточительство.
     
  20. wellx

    wellx Активный пользователь

    А если все считывать через ini-файл?

    Или через хмл? Ну, считаем параметры, да и не зависит по реализации ни от кого... и количество бесконечно...
     

Поделиться этой страницей