Обсуждение статьи "Применение метода Монте-Карло для оптимизации торговых стратегий"

 

Опубликована статья Применение метода Монте-Карло для оптимизации торговых стратегий:

Перед запуском робота на торговом счете мы обычно тестируем и оптимизируем его на истории котировок. И тут возникает резонный вопрос: как прошлые результаты на истории могут помочь нам в будущем? В статье показано применение метода Монте-Карло для построения собственных критериев оптимизации торговых стратегий. Кроме того, рассмотрены критерии устойчивости советника.

Поясним вышесказанное рисунком. На нём изображено несколько кривых капитала, каждая из которых определяется сгенерированной последовательностью сделок. Для удобства восприятия я обозначил их разными цветами. В действительности их число намного больше — несколько десятков тысяч. Для каждой из них мы вычисляем необходимые характеристики и делаем статистические выводы на основе их совокупности. Очевидно, самая важная из таких характеристик — это конечная прибыль.

Сгенерированные кривые капитала

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

Автор: Aleksey Nikolayev

 

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

bool setks(double &k[])
  {
   if(!HistorySelect(0,TimeCurrent())) return false;
   uint nhd=HistoryDealsTotal();
   int nk=0;
   ulong hdticket;
   double capital=TesterStatistics(STAT_INITIAL_DEPOSIT);
   long hdtype;
   double hdcommission,hdswap,hdprofit,hdprofit_full;
   for(uint n=0;n<nhd;++n)
     {
      hdticket=HistoryDealGetTicket(n);
      if(hdticket==0) continue;

      if(!HistoryDealGetInteger(hdticket,DEAL_TYPE,hdtype)) return false;
      if(hdtype!=DEAL_TYPE_BUY && hdtype!=DEAL_TYPE_SELL) continue;

      hdcommission=HistoryDealGetDouble(hdticket,DEAL_COMMISSION);
      hdswap=HistoryDealGetDouble(hdticket,DEAL_SWAP);
      hdprofit=HistoryDealGetDouble(hdticket,DEAL_PROFIT);
      if(hdcommission==0.0 && hdswap==0.0 && hdprofit==0.0) continue;

      ++nk;
      ArrayResize(k,nk,NADD);
      hdprofit_full=hdcommission+hdswap+hdprofit;
      k[nk-1]=1.0+hdprofit_full/capital;
      capital+=hdprofit_full;
     }
   return true;
  }

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

Попробуйте DEAL_ENTRY.


Разве своп и комиссия при анализе сделок по Монте-Карло нужно вычислять? Они же не носят системного значения.

Рекомендовал бы в качестве прибыли использовать отношение цен открытия и закрытия. Здесь можно подискутировать на тему "а нужно ли учитывать лоты?".

 

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

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


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

Получается, что монте-карлим неслучайную величину. Или я чего-то не понимаю?

 
fxsaber:

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

Попробуйте DEAL_ENTRY.

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

 
fxsaber:

Разве своп и комиссия при анализе сделок по Монте-Карло нужно вычислять? Они же не носят системного значения.

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

 

fxsaber:

Рекомендовал бы в качестве прибыли использовать отношение цен открытия и закрытия. Здесь можно подискутировать на тему "а нужно ли учитывать лоты?".

То о чем вы говорите похоже на то, что я называл доходностью в статье про риск. В той статье мы как бы изучаем устройство советника изнутри, а здесь мы воспринимаем его как данность - "чёрный ящик" и управление размером сделки неотъемлемая его часть. Это означает, что вид распределения прибылей может очень сильно отличаться от вида распределения доходностей. Значит, если мы будем опираться только на доходности, то будем оптимизировать совсем другой советник.

 
fxsaber:

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

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


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

Получается, что монте-карлим неслучайную величину. Или я чего-то не понимаю?

Конечно, независимость сделок - это идеализация. Если две сделки не сильно пересекаются по времени, то мы можем считать их независимыми, поскольку цены в первом приближении могут считаться случайным процессом с независимыми приращениями. То есть независимость и случайность определяется ценой выхода из сделки. Для определенности, сделка здесь это то, что в MT4 называется позицией. Я в статье пытался уже привести некоторые соображения на тему независимости сделок.
 
Aleksey Nikolayev:
Конечно, независимость сделок - это идеализация. Если две сделки не сильно пересекаются по времени, то мы можем считать их независимыми, поскольку цены в первом приближении могут считаться случайным процессом с независимыми приращениями. То есть независимость и случайность определяется ценой выхода из сделки. Для определенности, сделка здесь это то, что в MT4 называется позицией. Я в статье пытался уже привести некоторые соображения на тему независимости сделок.

Но другие сделки, что не открылись по той причине, что уже была открыта - они как же? А те сделки, что открылись, по сигналам той же торовой логики, но которым просто повезло, что на момент торгового сигнала их открытия не было открыто других сделок - они какие-то особенные?

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

 
fxsaber:

Но другие сделки, что не открылись по той причине, что уже была открыта - они как же? А те сделки, что открылись, по сигналам той же торовой логики, но которым просто повезло, что на момент торгового сигнала их открытия не было открыто других сделок - они какие-то особенные?

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

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

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

а так есть над чем подумать

 
Maxim Dmitrievsky:

не увидел тестов на форварде, т.к. основная цель была - это повышение устойчивости ТС на новой выборке путем введения новых критериев оптимизации

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