Проблемы, обнаруженные при обратном тестировании, и невозможность найти первопричину! - страница 3

 

Возвращает ли iHighest() бар с периодом слева или справа от 'i'?

 MaxH = High[iHighest(NULL,0,MODE_HIGH,period,i)];

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

 

Уважаемый JollyDragon,

Рад, что Вы видите, что индикатор пересчитывается.

Код Фишера всегда один и тот же, его легко определить.

Код просто повторно вводит данные, как это делают многие индикаторы, (они хранят прошлое значение от данных на баре 1 2 3), этот индикатор не делает этого, поэтому он пересчитывает:

 for(i=limit-1; i>=0; i--)
     {
      MaxH = High[iHighest(NULL,0,MODE_HIGH,Solar_period,i)];
      MinL = Low[iLowest(NULL,0,MODE_LOW,Solar_period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;
      Value=MathMin(MathMax(Value,-0.999),0.999);
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
     
      if(ExtBuffer0[i]>0) ExtBuffer1[i]=Solar_limit;
      else ExtBuffer1[i]=-Solar_limit;
     }
 
jollydragon:

Возвращает ли iHighest() бар с периодом слева или справа от 'i'?


Слева
 

ffoorr,GumRai, спасибо.

Хотя код сохраняет данные бара1, видно, что он не пересчитывает бары слева от бара0.

Поэтому я все еще не понимаю, что вызвало перерисовку, так как нет кода для пересчета баров перед bar0.

for(i=limit-1; i>=0; i--)
     {
      MaxH = High[iHighest(NULL,0,MODE_HIGH,period,i)];
      MinL = Low[iLowest(NULL,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;
      Value=MathMin(MathMax(Value,-0.999),0.999);
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
      if(ExtBuffer0[i]>0) ExtBuffer1[i]=10;
      else ExtBuffer1[i]=-10;
     }
 

Мы не знаем, какое значение присваивается лимиту.

Я настоятельно рекомендую вам щелкнуть правой кнопкой мыши на этом индикаторе и переместить его в корзину!

      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];

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

Fish1 получает значение, основанное на данных Bar[0], когда i==0.

Затем, когда бар[1] пересчитывается, значение для Fish1, созданное на баре[0], используется для создания значения для бара[1].

Я не знаю, что должен делать индикатор, но любой индикатор, который использует данные, относящиеся к i бару, а затем использует их в более раннем баре, является плохим индикатором.

 
GumRai:

Мы не знаем, какое значение придается пределу.

Пожалуйста, обратитесь к посту 20, где был прикреплен весь файл индикатора. Ниже вставлено еще раз.

Прикрепленные файлы:
solarjoy.mq4(6.11 KB) удалить
GumRai:

Затем, когда бар[1] пересчитывается, значение для Fish1, созданное на баре[0], используется для создания значения для бара[1].

Я не знаю, что должен делать индикатор, но любой индикатор, который использует данные, относящиеся к i бару, а затем использует их в более раннем баре, является плохим индикатором.

Вы можете видеть, как 'i' изменяется от 'limit-1' до '0', то есть слева направо для расчета Bars.

Таким образом, значение Fish1, рассчитанное в баре[1], используется для создания значения для бара[0]. Почему вы думаете об этом наоборот?

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

В любом случае, я наконец-то наблюдал перерисовку, и она подтверждает, что это именно такой плохой индикатор.

Однако мне нужно знать, как исправить код, чтобы предотвратить перерисовку как самосовершенствование.

for(i=limit-1; i>=0; i--)
     { 
       ...
      }
 

Этот фишер не перекрашивается, выглядит хорошо, сравните с solar_joy, сигнал запаздывает на один бар, но это один и тот же индикатор.

https://www.forex-tsd.com/metatrader-4/474-fisher-14.html#post214965

Проблема не в индикаторах, они совершенны, а в рынке, который всегда меняется, он никогда не бывает одинаковым.

Индикатор, который дает идеальный сигнал на каком-то трендовом рынке, будет давать ложный сигнал на другом рынке.

Всегда нужно фильтровать сигналы от хорошего осцилятора, либо использовать StopLoss и TakeProfit,

Независимо от того, используется ли трендовый индикатор.


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

https://www.forex-tsd.com/ideas-suggestions/25934-bulletproof-11.html#post351354

 
jollydragon:

Таким образом, значение Fish1, рассчитанное на баре[1], используется для создания значения на баре[0]. Почему вы думаете об этом наоборот?

Хорошо, справедливо, но ваш код, на который я ссылался, не включал никаких расчетов для лимита, и я не собирался просматривать 3 страницы назад, чтобы увидеть, было ли это включено где-нибудь еще.

Так что этот индикатор не пересчитывает для bar[1] на каждом тике.

Но все же

 ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
 Fish1=ExtBuffer0[i];

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

На первом тике нового бара он будет делать следующее.

ExtBuffer0[0]=0.5*MathLog((1+Value)/(1-Value))+0.5*ExtBuffer0[1];

На последующих тиках того же бара он будет вычислять

ExtBuffer0[0]=0.5*MathLog((1+Value)/(1-Value))+0.5*ExtBuffer0[0];

Что является своего рода компаундированием

 

Это можно торговать, solar_joy/fischer дает сигнал на один бар раньше, по сравнению с непересчитанным фишером,

Затем возьмите сигнал на баре 1 и 2 и посмотрите, остался ли сигнал на баре 2 и 3.

Если сигнал угас, то закройте ордер.

  if(Joy2 <= EA_Limit && Joy1 >= EA_Limit)  open_order( OP_BUY); 
 if( (Joy3 <= EA_Limit && Joy2 >= EA_Limit)== false ) close_order( OP_BUY); 
 
ffoorr:

Этот фишер не перекрашивается, выглядит хорошо, сравните с solar_joy, сигнал запаздывает на один бар, но это один и тот же индикатор.

https://www.forex-tsd.com/metatrader-4/474-fisher-14.html#post214965

Я думаю, что индикатор fisher действительно работает, он просто на один бар позже, он пересчитывает, он не перерисовывает, этот перерисовывает, поместите его в советник в тестере, и вы увидите:

https://www.forex-tsd.com/ideas-suggestions/25934-bulletproof-11.html#post351354


Уважаемый ffoorr, я не могу открыть страницы и не могу зайти на сайт, www.forex-tsd.com. Возможно, у меня проблемы с настройками интернета.

Пожалуйста, давайте сосредоточимся на моем коде. Это всего лишь около 10 строк кода для основного содержания.

Однако нам все еще так трудно найти первопричину перерисовки исторических баров.