Оптимизация с заглядыванием на свечу вперед

 

Прошу помочь в решении простого уравнения с одним неизвестным. Мне необходимо выполнить простую оптимизацию (без НС) в МТ при следующих условиях.

Выход известен - это

double Exit =iOpen(sym, PERIOD_D1,i-1)- iOpen(sym, PERIOD_D1,i);

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

Тактика: На первом тике новой дневной свечи по известному сигналу открываем рыночный ордер и держим его до первого тика сдедущей новой дневной свечи и закрываем его. На этом же тике по новому сигналу вновь устанавливаем рыночный ордер. Для чистоты эксперимента тейк-профит и стоп-лосс в ордерах == 0!!!

Необходимо при оптимизации подобрать параметры (MA1=?;MA2=? и т.д. ) разности МА.

Прилагаю код.

//------- Внешние параметры советника ------------------------------------------
 
extern int    MA1=?;
extern int    S1=0;
extern int    MODE1=0;
 
extern int    MA2=?;
extern int    S2=0;
extern int    MODE2=0;
 
//---------------------------------------------------------------------------------
 
 
int GetTradeSignal(string sym="", int tf=1440) {
  int bs=0;
  if (sym=="") sym=Symbol();
  
  for(int i=0; i<=Bars; i++) {
      // ВЫХОД 
    double Exit =iOpen(sym, PERIOD_D1,i-1)- iOpen(sym, PERIOD_D1,i);
     //ВХОД
    double MA=iMA(sym, tf,MA1,S1,MODE1,PRICE_OPEN,i) - iMA(sym, tf,MA2,S2,MODE2,PRICE_OPEN,i); 
    
    if (NormalizeDouble(Exit , 4)>= 0.0) {
      if (NormalizeDouble(MA , 4)>= 0.0)   bs= 1;
    }
    if (NormalizeDouble(Exit , 4)< 0.0) {
      if (NormalizeDouble(MA , 4)< 0.0)    bs=-1;
    }
  }
  
  return(bs);
}
 
//---------------------------------------------------------------------------------

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

Подскажите, где у меня ошибка?

С уважением, Вячеслав.

 
Интересно, а что возвращает iOpen() для бара № -1?
 
komposter:
Интересно, а что возвращает iOpen() для бара № -1?

Откровенно говоря я и сам бы хотел понять, можно ли при баре № -1, получить результаты оптимизации?
 
Vyacheslav:
Откровенно говоря я и сам бы хотел понять, можно ли при баре № -1, получить результаты оптимизации?
А что, везде кроме оптимизации работает? ;)
 
komposter:
Интересно, а что возвращает iOpen() для бара № -1?

И для бара № Bars, тоже интересно.
 
Интервалы для параметров оптимизации являются корректными? Проверьте это.
 

Заменил цену открытия на моментум, как вариант.

int GetTradeSignal(string sym="", int tf=1440) {
  int bs=0;
  if (sym=="") sym=Symbol();
  
  // Блок анализа с присвоением значения переменной bs
  for(int i=0; i<=Bars; i++) {
      // ВЫХОД
    double Mom =iMomentum(sym, tf,1,PRICE_OPEN,i-1);
     //ВХОД
    double MA=iMA(sym, tf,MA1,S1,MODE1,PRICE_OPEN,i) - iMA(sym, tf,MA2,S2,MODE2,PRICE_OPEN,i); 
    
    if (NormalizeDouble(Mom , 4)>= 0.0) {
      if (NormalizeDouble(MA , 4)>= 0.0)   bs= 1;
    }
    if (NormalizeDouble(Mom , 4)< 0.0) {
      if (NormalizeDouble(MA , 4)< 0.0)    bs=-1;
    }
  }
  
  return(bs);
}

Оптимизацию запускал на интервале для МА1 и 2 от 1 до 10 с шагом 1, для смещения машек S1 и 2 от 0 до 5 с шагом 1.

Вообще, хочу для себя понять оптимизация с участием бара №-1 может производиться?

 
Vyacheslav:

Вообще, хочу для себя понять оптимизация с участием бара №-1 может производиться?

При чем здесь оптимизация?
Как вообще можно использовать бар, КОТОРОГО НЕТ?
 
komposter:
Как вообще можно использовать бар, КОТОРОГО НЕТ?

Мы же запускаем оптимизацию на ИСТОРИИ, вот я и предположим, а что если зададим такие условия на один шаг вперед и проведем оптимизацию параметров. В этом и заключается весь вопрос, возможно такое сделать в МТ при оптимизации?

 
Vyacheslav:
komposter:
Как вообще можно использовать бар, КОТОРОГО НЕТ?

Мы же запускаем оптимизацию на ИСТОРИИ, вот я и предположим, а что если зададим такие условия на один шаг вперед и проведем оптимизацию параметров. В этом и заключается весь вопрос, возможно такое сделать в МТ при оптимизации?



Вопрос глупый на языке все вертится. Хочется узнать, а для каких целей цикл используется в функции. Получается, что функция (если не было ошибок) возвращает значение с бара под номером Bars. Все понять не могу. Прошу прощения, если что не так.
 
Vyacheslav:

Мы же запускаем оптимизацию на ИСТОРИИ, вот я и предположим, а что если зададим такие условия на один шаг вперед и проведем оптимизацию параметров. В этом и заключается весь вопрос, возможно такое сделать в МТ при оптимизации?

Тестер не подглядывает в будущее. И вам не советую.