Да что ж это творится то??? - страница 2

 

У меня другой прикол. Советник выставляет sell на открытии каждого часа. Для евро все работает правильно, а для кастомного символа непонятно как

В визуальном режиме часть свечей отсутствует


Файлы:
MySymbol.mq5  4 kb
Test.mq5  2 kb
 
Сергей Таболин:

Это в очередной раз о тестере/оптимизаторе...

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

Запустил одиночное тестирование...

Да как так? Откуда эта нелепица берётся то?

Было так же. Между проходами оптимизации переменные не всегда или не все инициализируются так, как перед одиночным проходом. Я стал инициализировать всё, и проблема ушла.

Ещё однажды была похожая проблема из-за iSAR, на минимальных шагах.

 

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

Алгоритм его советника в части открытия сделок был основан на считывании надписи с кнопки, которая менялась в зависимости от ситуации. А поскольку при оптимизации графические объекты не отрисовываются, этот запрос всегда давал отрицательный результат.

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

 
Сергей Таболин:


Это как? И там, и там одинаково. Как может быть разница? Тем более, что инициализация практически всех данных происходит в цикле. И если что-то там не инициализируется - выход с ошибкой.


Если можно - подробнее. Хотелось бы увидеть инициализацию в цикле. Внучке покажу. 

 
Чтобы никогда так не делала. 
 
Алексей Тарабанов:

Если можно - подробнее. Хотелось бы увидеть инициализацию в цикле. Внучке покажу. 

int sum = 0;

for ()

  sum = 0;

  for ()

    sum += ....

а лучше так, а то внучка не поймет смысла:

int sum;

for ()

  sum = 0;

  for ()

    sum += ....
 
Andrey Barinov:
Достаточно забыть проинициализировать что-нибудь в коде, и будет разница. Проверяйте код.

Проверил всё ещё раз - все переменные проинициализированы.

@Andrey Kaunov , спасибо, но совершенно никакие графические объекты не использую.

Алексей Тарабанов:

Если можно - подробнее. Хотелось бы увидеть инициализацию в цикле. Внучке покажу. 

Да ради Бога ))) Маленько перегнул, не все, конечно, а только хэндлы индикаторов )))

int      ind_handle[];

int OnInit()
{
...........
   if(!nc_getHandles()) return(INIT_FAILED);
...........
}
//+------------------------------------------------------------------+
bool  nc_getHandles(void)
{
   ind_nums = ArraySize(indicators);
   ArrayResize(ind_handle, ind_nums);

   for(int i = 0; i < ind_nums; i++)
   {
      ind_handle[i]  = iCustom(Symbol(), Period(), folder+indicators[i]);
      if(ind_handle[i] == INVALID_HANDLE)
      {
         Print("Ошибка получения хандла индикатора >>> "+indicators[i]);
         writeErrorFile(program_name,program_version,"Ошибка получения хандла индикатора >>> "+indicators[i]);
         return(false);
      }
   }
   Print("Получены хэндлы всех индикаторов >> ",ArraySize(indicators));
//-----------------------------------
   return(true);
}
 

Теперь по сути.

Полностью очистил все логи и кэши.

Запустил редактор, перекомпилировал советник.

Открыл терминал.

Запустил генетическую оптимизацию.

Ждём...


Запускаю одиночное тестирование.

Проверяю правильность переданных параметров - переданы правильно.

Открываю вкладку Бэктест.

Прибыль - 697 / 247

Трейдов - 44 / 56

Сейчас соберу логи и приложу.

Файлы:
mt5logs.zip  288 kb
 

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

Распринтуйте, выведите в файл самостоятельно.

Речь о логике внутри вашей программы. Которую кроме вас никто не видит и поэтому помощи не будет.

 
Renat Fatkhullin:

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

Распринтуйте, выведите в файл самостоятельно.

Речь о логике внутри вашей программы. Которую кроме вас никто не видит и поэтому помощи не будет.

Ренат, спасибо. Только вот объясните мне тёмному, какая разница между 2*2+2*3 в оптимизаторе и одиночном проходе? Ну хоть намекните где именно может быть нестыковка? 

Ну и, уж коли Вы об этом обмолвились, то заодно намекните где и в чём искать расхождения работы советника в тестере и на реальном счёте?

Я, видимо по собственной глупости, всегда свято верил, что написанный код (не важно, с ошибками он или нет, оптимизирован он или нет) в конце то концов он откомпилирован и значит должен работать одинаково что в оптимизаторе, что в тестере, что на реале...

Ну вот встаньте на позицию простого прогера - где, как и какими средствами нужно искать не понятно какую разницу исполнения одного (откомпилированного) кода в этих трёх состояниях?

Я, как пользователь, вижу только то, что один экзешник работает не одинаково в оптимизаторе и тестере, а значит на реале будет работать вообще хз знает как....


Закралась мысль, а что если тестируешь советник, а он ... ну никакой. А если его кинуть на реал? А вдруг это Грааль? ))))