Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1171

 
Igor Zakharov:

история при этом подкачивается? 

Скорее всего да. Но на 100% не уверен. Как это проверить, Принтами изменение количества баров?

Igor Zakharov:

у вас не предусмотрен пересчёт для этого случая 

Спасибо, похоже на то.

Igor Zakharov:

и появившиеся новые элементы индикаторных буферов заполняются мусором.

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

 
Alexey Viktorov:

Накосячил в том, что вставил это дополнение отдельно. Стрелки надо ставить только в момент смены буфера. При этом не забывать во всех остальных случаях в буфер ставить пустое значение.

Даже лучше так: сразу ставим пустое значение, а при смене тренда заполнять один из буферов стрелкой.

Спасибо за ответ.

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

 
Уже который раз такое - задал вопрос, а в ответ тишина. Какая-то избирательная помощь новичкам.
 
novichok2018:
Уже который раз такое - задал вопрос, а в ответ тишина. Какая-то избирательная помощь новичкам.

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

нельзя выполнять несколько раз ObjectCreate() с одним и тем же именем - будет работать только первый раз, потом будет ошибка, можно этот обьект в дальнейшем перемещать используя ObjectMove()


есть еще проблема с определением фракталов, Вы онлайн пытаетесь по открытию бара найти фрактал на баре №2, обычно делают цикл по барам с вызовом индикатора фрактал и прерывают цикл при нахождении первого фрактала , и получают номер бара на котором был фрактал

 
Igor Makanu:

есть еще проблема с определением фракталов, Вы онлайн пытаетесь по открытию бара найти фрактал на баре №2, обычно делают цикл по барам с вызовом индикатора фрактал и прерывают цикл при нахождении первого фрактала , и получают номер бара на котором был фрактал

Спасибо!

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

Вызванный индикатор фрактал строит фракталы на всей доступной истории. Я пытаюсь решить задачу построения трендовой линии по фракталам, попадающим в указанный период дня, с учетом фракталов предыдущего дня и автоматического перепостроения линии по последнему фракталу. И не хватает знаний.

 
novichok2018:

Спасибо!

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

Вызванный индикатор фрактал строит фракталы на всей доступной истории. Я пытаюсь решить задачу построения трендовой линии по фракталам, попадающим в указанный период дня, с учетом фракталов предыдущего дня и автоматического перепостроения линии по последнему фракталу. И не хватает знаний.

Уверены, что ловить нужно на ВТОРОМ баре?

Вот тесты: 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

MQL5: Примеры.

Vladimir Karputov, 2018.03.19 05:54

  • 2.3. iFractals (Fractals). Два важных фактора, которые нужно учитывать

При работе с фракталами нужно учитывать два фактора:

Фактор первый

фрактал на барах от "rates_total-5" до "rates_total-3" уже не может перерисоваться - это вытекает из конструкции индикатора "Fractals.mq5" (открытый код индикатора расположен в [data folder]\MQL5\Indicators\Examples\Fractals.mq5) - так как бары в промежутке от "rates_total-5" до "rates_total-3"  уже сформировавшиеся

//---
   if(prev_calculated<7)
     {
      limit=2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit=rates_total-5;

   for(i=limit;i<rates_total-3 && !IsStopped();i++)
     {
      //---- Upper Fractal
      if(high[i]>high[i+1] && high[i]>high[i+2] && high[i]>=high[i-1] && high[i]>=high[i-2])
         ExtUpperBuffer[i]=high[i];
      else ExtUpperBuffer[i]=EMPTY_VALUE;

      //---- Lower Fractal
      if(low[i]<low[i+1] && low[i]<low[i+2] && low[i]<=low[i-1] && low[i]<=low[i-2])
         ExtLowerBuffer[i]=low[i];
      else ExtLowerBuffer[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

Fractals

Рис. 1. Так работает индикатор "Fractals". Нумерация файлов с позиции индикатора "Fractals.mq5"

Это означает, что когда в советнике получаем данные с индикатора iFractals, на барах "rates_total-5", "rates_total-4" (нумерация баров с позиции индикатора "Fractals.mq5") будет фрактал, который уже гарантированно не перерисуется. 


А вот момент когда фрактал формируется на баре "rates_total-5" - в момент когда появляется новый бар справа 2016 года 2 января 03:00 (нумерация файлов с позиции индикатора "Fractals.mq5") :

Fractals, 5 bar

Рис. 2. Момент когда фрактал формируется на на баре "rates_total-5"

Фактор второй

Индикатор фрактал в качестве пустого значения использует не "0.0", а EMPTY_VALUE. Исключение - первая инициализация, когда индикаторные буфера инициализируются нулём (это делает не индикатор "Fractals.mq5", а MQL5 при создании массива и связявании его с индикаторным буфером).


 
novichok2018:

 По Вашей рекомендации это тоже не понятно как сделать.

вот выкладывал функцию для поиска фрактала, как раз для советника делал, у меня все работало

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

 
Vladimir Karputov:

Уверены, что ловить нужно на ВТОРОМ баре?

Вот тесты: 


Да,спасибо. Без перерисовки на третьем. Только это не меняет сути проблемы.

 
Igor Makanu:

вот выкладывал функцию для поиска фрактала, как раз для советника делал, у меня все работало

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

Спасибо, работает.

Не понимаю только, как отразить в коде появление нового фрактала. Ведь barfrup_1 всегда меньше barfrup_2, поэтому скачок в нумерации barfrup_1 при появлении нового фрактала ничего не дает, т.к. остается меньше barfrup_2.

И ещё: не понимаю, как извлечь значения хай для barfrup_1 и barfrup_2.

 
novichok2018:

И ещё: не понимаю, как извлечь значения хай для barfrup_1 и barfrup_2.

бросьте на чарт индикатор фрактал и тестовый советник с этой функцией

и распринтуйте найденные значения  передавая в мою функцию MODE_UPPER и   MODE_LOWER 

novichok2018:

Спасибо, работает.

Не понимаю только, как отразить в коде появление нового фрактала.

Вам нужно запоминать время бара, пи появлении нового бара нумерация будет изменяться, а время открытия бара всегда постоянное

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