Индикаторы: Fractal_TL

 

Fractal_TL:

Индикатор для автоматического рисования трендовых линий по фракталам на заданном таймфрейме.

Входные параметры

Пример отображения линий

Автор: Almat Kaldybay

 

Здравствуйте. 

Заинтересовал Ваш индикатор. Но мне нужно чтобы линии "TL_Support" и "TL_Resistance" строились не по двум последним фракталам, а по последнему и по следующему более высокому/низкому .

Я внес изменеия в код. В онлайне работает замечательно, а вот в тестере отказывается. Делает первое построение и отмораживается. Подскажите плиз, как сделать чтобы индикатор с изменениями заработал в тестере МТ5.

Код процитирую ниже, внесённые изменения выделю жёлтым.

//+------------------------------------------------------------------+
//| Search for fractal values                                        |
//+------------------------------------------------------------------+
// --- Search for the first upper fractal
   for(n=0; n<Bars(Symbol(),base_tf); n++)
     {
      // --- if a non-empty value, terminate the loop
      if(FractalUp_base[n]!=EMPTY_VALUE)
         break;
     }
   UpFractal_1_base=FractalUp_base[n];// --- write the price value of the first fractal in the variable
   UpperFractal_1_base=n;// --- write the index of the first fractal in the variable
                         // ---   
// --- Search for the second upper fractal
   for(n=UpperFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- if a non-empty value, terminate the loop
      if(
         FractalUp_base[n]!=EMPTY_VALUE
         &&
         FractalUp_base[n]>UpFractal_1_base
         )
          break;
     }
   UpFractal_2_base=FractalUp_base[n]; // --- write the price value of the second fractal in the variable
   UpperFractal_2_base=n;// --- write the index of the second fractal in the variable
                         // ---
// --- Search for the first lower fractal
   for(n=0; n<Bars(Symbol(),base_tf); n++)
     {
      // --- if a non-empty value, terminate the loop
      if(FractalDown_base[n]!=EMPTY_VALUE)
         break;
     }
   LowFractal_1_base=FractalDown_base[n];// --- write the price value of the first fractal in the variable
   LowerFractal_1_base=n;// --- write the index of the first fractal in the variable
                         // ---   
// --- Search for the second lower fractal
   for(n=LowerFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- if a non-empty value, terminate the loop
      if(
         FractalDown_base[n]!=EMPTY_VALUE
         && 
         FractalDown_base[n]<LowFractal_1_base
         )
          break;
     }
   LowFractal_2_base=FractalDown_base[n];// --- write the price value of the second fractal in the variable
   LowerFractal_2_base=n;// --- write the index of the second fractal in the variable
//--- 
 

Сам не проверял, но попробуйте лучше добавить условие на черчение самих линий, там где создаются объекты. Например для линии поддержки:

//--- Create support line
if (LowFractal_1_base<LowFractal_2_base)//если цена первого найденного фрактала ниже цены второго найденного фрактала, тогда чертим линию
{
   ObjectCreate(0,"TL_Support",OBJ_TREND,0,LowFractalTime_2_base[0],LowFractal_2_base,LowFractalTime_1_base[0],LowFractal_1_base);
   ObjectSetInteger(0,"TL_Support",OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(0,"TL_Support",OBJPROP_COLOR,Support_Color);
   ObjectSetInteger(0,"TL_Support",OBJPROP_STYLE,Support_Style);
   ObjectSetInteger(0,"TL_Support",OBJPROP_WIDTH,Support_Width);
}
 
Almat Kaldybay:

Сам не проверял, но попробуйте лучше добавить условие на черчение самих линий, там где создаются объекты. Например для линии поддержки:

Добрый день, спасибо за комментарий. Идея хорошая, правда для линий поддержки условие должно быть (по логике, которую я пытаюсь воплотить) обратным, лоу второго найденного фрактала должно быть ниже первого, все кандидаты на должность второго фрактала, лоу которых выше первого, должны быть проигнорированы

И еще, если пойти по этому пути, придется переделывать блок рисования, собственно и все остальное следом тоже. Красивый, ИМХО код потеряет свою изящность. 

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

Файл подредактированного кода прилагаю, буду крайне благодарен, если более грамотные товарищи укажут на причину такого поведения тестера. 

Файлы:
Fractal_TL.mq5  21 kb
 
Sergey Voytsekhovsky:

Добрый день, спасибо за комментарий. Идея хорошая, правда для линий поддержки условие должно быть (по логике, которую я пытаюсь воплотить) обратным, лоу второго найденного фрактала должно быть ниже первого, все кандидаты на должность второго фрактала, лоу которых выше первого, должны быть проигнорированы

И еще, если пойти по этому пути, придется переделывать блок рисования, собственно и все остальное следом тоже. Красивый, ИМХО код потеряет свою изящность. 

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

Файл подредактированного кода прилагаю, буду крайне благодарен, если более грамотные товарищи укажут на причину такого поведения тестера. 

По всей видимости возникает конфликт с массивом FractalDown_base[]. Странно, что он не возникает для верхних фракталов. В общем, я немного изменил ваше сравнение:

   for(n=LowerFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- if a non-empty value, terminate the loop
      if(FractalDown_base[n]!=EMPTY_VALUE 
      && FractalDown_base[n]<Low_base_tf[LowerFractal_1_base]
      )
      break;
     }

То есть я добавил определение High и Low и сравниваю уже с ними. Так все работает в тестере нормально. Измененный файл прилагаю.

Файлы:
 
Almat Kaldybay:

По всей видимости возникает конфликт с массивом FractalDown_base[]. Странно, что он не возникает для верхних фракталов. В общем, я немного изменил ваше сравнение:

То есть я добавил определение High и Low и сравниваю уже с ними. Так все работает в тестере нормально. Измененный файл прилагаю.

Добрый день, спасибо за уделенное время и внимание. Загрузил приложенный Вами файл. К сожалению тестер по прежнему работает неверно, Индикатор делает первое построение и больше не перестраивает линии сопративления и поддержки, не отображает фракталы. Для проверки вывел в комент High_base_tf[UpperFractal_1_base] и Low_base_tf[LowerFractal_1_base]. Считается верно, с логикой тоесть все в порядке. Видимо сбой притаился где-то в рисовании.

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

***

Там-же видно строчки Low_base_tf[LowerFractal_1_base] и их значения, которые можно сравнить со значениями LowFractal_1_base (для лоу значений, для Хай аналогично). Все считается верно, но новых построений НЕТ.

 
Sergey Voytsekhovsky:


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

***


К сожалению ссылку удалили.

 
Sergey Voytsekhovsky:

К сожалению ссылку удалили.

Ссылки на сторонние сайты запрещены. 

 
Vladimir Karputov:

Ссылки на сторонние сайты запрещены. 

Как мне разместить скан экрана тестера? Вытащить его получается только в PDF, а этот формат на форуме я так понял, не принимается.

 
Sergey Voytsekhovsky:

Как мне разместить скан экрана тестера? Вытащить его получается только в PDF, а этот формат на форуме я так понял, не принимается.

Скриншот - это рисунок. Причём здесь pdf? Сохранит скриншот в формате рисунка png и вставьте рисунок в сообщение.

 
Vladimir Karputov:

Ссылки на сторонние сайты запрещены. 

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

Причина обращения: