Собственный Коэффициент OnTester

 

Прочитал вот эту статью https://www.mql5.com/ru/articles/286

Установил себе коэффициент безопасности торговой системы с 9п. статьи, но особых результатов с ним не увидел.

Подскажите, какими формулами пользуетесь Вы, какие коэффициенты прописываете в пустующее место OnTester?
Спасибо

Создание собственных критериев оптимизации параметров эксперта
Создание собственных критериев оптимизации параметров эксперта
  • 2011.06.24
  • Dmitriy Skub
  • www.mql5.com
Терминал МetaTrader 5 дает новые возможности для оптимизации параметров создаваемых экспертов. Кроме уже имеющихся в тестере критериев оптимизации, разработчики получили инструмент для создания собственных критериев. Это открывает поистине безграничные возможности в тестировании и оптимизации экспертов. В статье рассматриваются практические способы построения таких критериев - как простых, так и достаточно сложных.
 
Roman Starostin:

Подскажите, какими формулами пользуетесь Вы, какие коэффициенты прописываете в пустующее место OnTester?

Зависит от торговой стратегии.

В OnTester() задаётся фитнес функция для генетического алгоритма. А посему нужно подставлять то, что нужно максимизировать с помощью ГА. Для разных стратегий разные подходы. Но чтобы не пытаться искать то, сам не знаю что, лучше ориентироваться на соответствие фитнес функции результатам форвадных тестов.

 
Yury Reshetov:

Зависит от торговой стратегии.

В OnTester() задаётся фитнес функция для генетического алгоритма. А посему нужно подставлять то, что нужно максимизировать с помощью ГА. Для разных стратегий разные подходы. Но чтобы не пытаться искать то, сам не знаю что, лучше ориентироваться на соответствие фитнес функции результатам форвадных тестов.

Можно поподробнее раскрыть этот вопрос? Или дать ссылки, примеры. Может быть пример кода из ваших советников
 
Roman Starostin:
Можно поподробнее раскрыть этот вопрос? Или дать ссылки, примеры. Может быть пример кода из ваших советников

На пальцах вкратце не разъяснишь. А так, чтобы было понятно о чём идёт речь, необходимо писать целую статью.

Но суть прежняя. Т.е. подбирать адекватную фитнес функцию нужно экспериментальным путём для каждой ТС отдельно. Предположительно, что универсальная функция, подходящая для всех ТС без исключения, вряд ли может существовать.

Если вкратце, то возьмём к примеру функцию оптимизирующую по максимуму профит-фактор. Если в ТС ГА настраивает фильтры для входов и выходов в рынок, то он закрутит гайки таким макаром, чтобы получить минимальное количество сделок. А если сделок мало, то вероятность подгонки под историю чрезмерно высокая. Значит, по профит-фактору настройку систем фильтрации входов-выходов проводить неадекватно. И в таком случае больше подойдёт ТС, которая всё время находится в рынке (например, разворачиваясь по сигналам двойной встречной).

 
Yury Reshetov:

На пальцах вкратце не разъяснишь. А так, чтобы было понятно о чём идёт речь, необходимо писать целую статью.

Но суть прежняя. Т.е. подбирать адекватную фитнес функцию нужно экспериментальным путём для каждой ТС отдельно. Предположительно, что универсальная функция, подходящая для всех ТС без исключения, вряд ли может существовать.

Если вкратце, то возьмём к примеру функцию оптимизирующую по максимуму профит-фактор. Если в ТС ГА настраивает фильтры для входов и выходов в рынок, то он закрутит гайки таким макаром, чтобы получить минимальное количество сделок. А если сделок мало, то вероятность подгонки под историю чрезмерно высокая. Значит, по профит-фактору настройку систем фильтрации входов-выходов проводить неадекватно. И в таком случае больше подойдёт ТС, которая всё время находится в рынке (например, разворачиваясь по сигналам двойной встречной).

А возможно и стоит написать статью. Она останется в базе на долго и народ только спасибо скажет )

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

Не знаю про МТ5, но в МТ4 нету функции выбора генетического Алгоритма. Значение же "Оптимизируемый параметр" нужен только для наглядности и влияет только на построение графика оптимизации. Где то даже об этом была статья и сравнение тестов с разными значениями этого параметра. 

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

 

Всегда для ГА использую исключительно свою функцию OnTester().

В основе лежит Recovery Factor, который я считаю наиболее адекватным показателем работы системы.

Вторым по важности показателем считаю наиболее длинную очередь СЛ.  Плюс, совершенно верно сказано, что сделки не должны быть слишком редкими.

В итоге, на мой взгляд, хороша функция типа (поскольку функция должна возвращать double, все значения сразу перевожу к этой форме) :

if(dNumOfTrades < MIN_TRADES)
      return(dNumOfTrades-1000);

if(dLongestSLQueue>MAX_SL_QUEUE)
      return(-dLongestSLQueue+dRecoveryFactor/10);

return(dRecoveryFactor*100 - dLongestSLQueue);

Все проходы сразу же делятся на группы.

Те, результат которых близок к -1000 - это результаты со слишком малым числом сделок.

Результаты, близкие к нулю - это результаты с очень длинными очередями СЛ.

Условно приемлемые результаты имеют показатель более 100.

При этом у ГА всегда есть "за что зацепиться" в результатах прохода. Для первой группы наиболее быстро будет оптимизироваться число сделок, дла второй - длина очереди СЛ, для третьей - Recovery.

 

George Merts Очень интересный метод, как я понимаю "Оптимизируемый параметр" нужно ставить Custom?  Или это не играет роли?
Значение MIN_TRADES, MAX_SL_QUEUE вы берете сами для каждой системы свои и делаете их внешними? Или есть какое то постоянное значение?

 dRecoveryFactor = TesterStatistics(STAT_PROFIT)/TesterStatistics(STAT_BALANCE_DD) ?

 
Roman Starostin:

George Merts Очень интересный метод, как я понимаю "Оптимизируемый параметр" нужно ставить Custom?  Или это не играет роли?
Значение MIN_TRADES, MAX_SL_QUEUE вы берете сами для каждой системы свои и делаете их внешними? Или есть какое то постоянное значение?

 dRecoveryFactor = TesterStatistics(STAT_PROFIT)/TesterStatistics(STAT_BALANCE_DD) ?

Да, оптимизируемый параметр Custom.

Значения минимального числа сделок и максимальный допустимый размер очереди СЛ - для каждой ТС свои. Скажем, в системах с высоким отношением TP/SL допустимая длина очереди, как правило, больше.

Форумал рековери - все верно, но там есть готовая величина dRecoveryFactor = TesterStatistics(STAT_RECOVERY_FACTOR)

 
STAT_CONLOSSMAX_TRADES на МТ4 у меня не работает. А по поводу убыточных сделок подряд какой вы используете параметр: STAT_CONLOSSMAX_TRADES или STAT_MAX_CONLOSS_TRADES? Запутался немного )
 

STAT_MAX_CONLOSS_TRADES

Насчет МТ4 - у меня весь код переносим, компилируется как под МТ4 так и под МТ5, поэтому испытываю я на МТ5.

 
Я хотел сказать, что STAT_RECOVERY_FACTOR не работает на МТ4 )
Спасибо за идею, действительно интересно, уже вписываю )