Как задушить генетический тестер через OnTester с нулевыми результатами - страница 2

 

Проверка показала, что ошибки нет.

В указанном Вами случае широкий набор параметров был бесполезным/незначащим и генетический тестер смог закончить тесты раньше.

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

Ваш код такой:

double OnTester()
  {
   ....
   if(c==0.0)
   {
      Alert("Error in linear regression!");
      return(0);
   }
   ....
   if(Deals < 300) Result = 0;
   ...
   return(Result);
  }

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

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


Это стандартные грабли "зажать кастомные результаты на генетеке".

 
Renat:


Это стандартные грабли "зажать кастомные результаты на генетеке".

Я знаю что зажимал его. деал это осознанно, чтоб избежать результатов с малым количеством трейдов. Однако причина всёже не в моём советнике. Смотрите сами - советник один - наборов сета два для разных стратегий. Однако тестируемый Кустом - ОДИН! Встаёт вопрос. Почему при на одном сете советник тестирует как раньше все 10000 проходов, а на другом сете для другой стратегии он вдруг начинает глючить и спотыкатся об нулевые результаты. Я всёже думаю что проблема не только в моих ограничениях по коду, но также и в новом билде. Ведь в предыдущей версии билда таких проблем небыло, верно? Небыло. А сейчас они появились. Так что считаю что вопрос не решён - проблема так и осталась на плову.
 
lordlev:
Я знаю что зажимал его. деал это осознанно, чтоб избежать результатов с малым количеством трейдов. Однако причина всёже не в моём советнике. Смотрите сами - советник один - наборов сета два для разных стратегий. Однако тестируемый Кустом - ОДИН! Встаёт вопрос. Почему при на одном сете советник тестирует как раньше все 10000 проходов, а на другом сете для другой стратегии он вдруг начинает глючить и спотыкатся об нулевые результаты. Я всёже думаю что проблема не только в моих ограничениях по коду, но также и в новом билде. Ведь в предыдущей версии билда таких проблем небыло, верно? Небыло. А сейчас они появились. Так что считаю что вопрос не решён - проблема так и осталась на плову.
И ещё важная деталь! Включите тестирование например по Balance и вы увидите что проблема осталась! Он всё равно начинает прогонять 1280 результатов вместо положенных 10000.
 
lordlev:
Я знаю что зажимал его. деал это осознанно, чтоб избежать результатов с малым количеством трейдов. Однако причина всёже не в моём советнике. Смотрите сами - советник один - наборов сета два для разных стратегий. Однако тестируемый Кустом - ОДИН! Встаёт вопрос. Почему при на одном сете советник тестирует как раньше все 10000 проходов, а на другом сете для другой стратегии он вдруг начинает глючить и спотыкатся об нулевые результаты. Я всёже думаю что проблема не только в моих ограничениях по коду, но также и в новом билде. Ведь в предыдущей версии билда таких проблем небыло, верно? Небыло. А сейчас они появились. Так что считаю что вопрос не решён - проблема так и осталась на плову.

Почему?

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

Я специально рассказал об причинах, самостоятельно перепроверив Вашего эксперта в разных режимах.

 
lordlev:
И ещё важная деталь! Включите тестирование например по Balance и вы увидите что проблема осталась! Он всё равно начинает прогонять 1280 результатов вместо положенных 10000.

И так тоже включал.

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

Никаких "положенных 10 000" нет. Это лишь исходная оценка "если автор выбрал достаточно хороший и важный сет параметров, то чаще всего результат будет достигнут на переборах около 10 000". Генетика строится на генерации поколений скрещиваемых особей и если в течение нескольких поколений не происходит улучшения породы, то расчет считается оконченным.

 
Renat:

Почему?

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

Я специально рассказал об причинах, самостоятельно перепроверив Вашего эксперта в разных режимах.

Может подскажите как обойти результаты с малым количеством сделок не задушив при этом новый тестер? А чем вам старый тестер не угодил? Теперь у простых смертных лишняя головная боль. 
Документация по MQL5: Торговые функции / HistoryDealsTotal
Документация по MQL5: Торговые функции / HistoryDealsTotal
  • www.mql5.com
Торговые функции / HistoryDealsTotal - Документация по MQL5
 
Без головной боли эволюция остановится. Смиренно терпим и развиваемся. )))
 
lordlev:
Может подскажите как обойти результаты с малым количеством сделок не задушив при этом новый тестер? А чем вам старый тестер не угодил? Теперь у простых смертных лишняя головная боль. 

Выбором значащих входных параметров.

После проверки слабых параметров на переборах 10 в 17 степени и получении ответа от тестера "тут значимых результатов нет",  надо переходить к другим параметрам.

 
lordlev:
Может подскажите как обойти результаты с малым количеством сделок не задушив при этом новый тестер? А чем вам старый тестер не угодил? Теперь у простых смертных лишняя головная боль. 

Очень просто. Самый простой из простых способ - "ступенчатый":

if(Deals <= 10) Result *=0.01;
if(10<Deals && Deals <=50) Result *=0.01;
if(50<Deals && Deals <=150) Result *=0.05;
if(150<Deals && Deals <=300) Result *=0.1;
if(300<Deals && Deals <=450) Result *=0.8;
if(Deals>450) Result *=1.0;

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

Надеюсь, понятно донёс мысль.

PS. Это один из приёмов отсева незначащих (для юзверя) вариантов оптимизируемых параметров, не убивающий при этом эволюцию на стадии "бульёна" (ни нового тестера, ни старого, как впрочем - любого).

PPS. Пространство поиска расширили, хорошо. Теперь будем просить многокритериальную оптимизацию. :)

 

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

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

По причине,что часто фактор высокий на малом количестве сделок - криво работает ТС,выборка мала.И уже год,как использую следующую схему(просто делюсь):

double OnTester()
  {
   double bal=AccountInfoDouble(ACCOUNT_BALANCE);
   double factor=TesterStatistics(STAT_RECOVERY_FACTOR);
   double trades=TesterStatistics(STAT_TRADES);
   double dea=TesterStatistics(STAT_DEALS);
   double res=(bal*factor*MathPow(trades,0.3));
   
   return(res);
  }
Документация по MQL5: Торговые функции / HistoryDealsTotal
Документация по MQL5: Торговые функции / HistoryDealsTotal
  • www.mql5.com
Торговые функции / HistoryDealsTotal - Документация по MQL5