Обсуждение статьи "Брутфорс-подход к поиску закономерностей (Часть VI): Циклическая оптимизация"

 

Опубликована статья Брутфорс-подход к поиску закономерностей (Часть VI): Циклическая оптимизация:

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

Самым главным элементом во всей идее является система взаимодействия между терминалом и моей программой. Фактически, она является циклическим оптимизатором с расширенными оптимизационными критериями, самому важному из которых я посветил весь предыдущий раздел. Для того, чтобы вся система функционировала, сперва необходим источник котировок, коим и выступает один из терминалов MetaTrader 5. Как я уже показывал в предыдущей статье, котировки записываются в файл с удобным мне форматом. Это делается с помощью советника, который функционирует довольно странно на первый взгляд:

концепция записи котировок советником

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

 

пример использования советника для записи котировок

Автор: Evgeniy Ilin

 

формулы 2

фактор линейности

Давайте разберемся, что внутри данной формулы:

  • N — количество полностью открытых и закрытых торговых позиций на протяжении всего бэктеста или участка торговли.
  • B(i) — значение линии баланса после соответствующей закрытой позиции "i".
  • L(i) — прямая, проведенная из нуля в самую последнюю точку баланса (финальный баланс).

Вроде, это почти Шарп:

//--- вычислим логарифмы приращений из массива эквити
   for(int i = 1; i < m_bars_counter; i++)
     {
      //--- добавляем только если эквити изменилось
      if(m_equities[i] != prev_equity)
        {
         log_return = MathLog(m_equities[i] / prev_equity); // логарифм приращения
         aver += log_return;            // средний логарифм приращений
         AddReturn(log_return);         // заполняем массив логарифмов от приращений
         counter++;                     // счетчик доходностей
        }
      prev_equity = m_equities[i];
     }
//--- если значений не хватает для расчета коэффициента Шарпа, вернем 0
   if(counter <= 1)
      return(0);
//--- среднее значение логарифма приращения
   aver /= counter;
//--- вычислим стандартное отклонение
   for(int i = 0; i < counter; i++)
      std += (m_returns[i] - aver) * (m_returns[i] - aver);
   std /= counter;
   std = MathSqrt(std);
//--- коэффициент Шарпа на текущем таймфрейме
   double sharpe = aver / std;
Математика в трейдинге: Коэффициенты Шарпа и Сортино
Математика в трейдинге: Коэффициенты Шарпа и Сортино
  • www.mql5.com
Доходность является самым очевидным показателем, который используют инвесторы и начинающие трейдеры для анализа эффективности торговли. Профессиональные трейдеры пользуются более надежными инструментами для анализа стратегии, среди них — коэффициенты Шарпа и Сортино.
 
fxsaber #:

Вроде, это почти Шарп:

Что-то схожее есть но только на первый взгляд. Все упускают модель роста баланса. Если наклон роста баланса постоянно падает (вторая производная кривой баланса отрицательная) то такая модель не предпочтительная так как в скором времени она может вообще уйти в минуса. Весь смысл в том чтобы отбирать те кривые которые и графически выглядят наиболее перспективно.

 
Evgeniy Ilin #:

Что-то схожее есть но только на первый взгляд. Все упускают модель роста баланса. Если наклон роста баланса постоянно падает (вторая производная кривой баланса отрицательная) то такая модель не предпочтительная так как в скором времени она может вообще уйти в минуса. Весь смысл в том чтобы отбирать те кривые которые и графически выглядят наиболее перспективно.

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


Примеры из своего опыта.

  • критерий "красивая кривая" - не проходит OOS.
  • критерий "некрасивая кривая" - проходит OOS, при этом кривая сама по себе получилась красивой.
  • Нулевая комиссия - не проходит OOS.
  • Задана комиссия - проходит OOS.

Т.е. получается, что когда оптимизация идет на красоту, то подгоночная составляющая высока. Когда же что-то стОящее находится, то оно выглядит красиво.

Поэтому сам красоту не ищу критериями. Больше упираю на количество сделок и алгоритм ядра ТС. Цель - получить красоту без критерия красоты. Как правило, такой вариант проходит OOS.


ЗЫ Вариант с комиссией интереснее (но, как правило, наоборот: меньше комиссия - больше вероятность нахождения закономерности). В нем фактически идет уменьшение количества сделок (стат. значимости), но увеличение вероятности удачного поиска.

 
fxsaber #:

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


Примеры из своего опыта.

  • критерий "красивая кривая" - не проходит OOS.
  • критерий "некрасивая кривая" - проходит OOS, при этом кривая сама по себе получилась красивой.
  • Нулевая комиссия - не проходит OOS.
  • Задана комиссия - проходит OOS.

Т.е. получается, что когда оптимизация идет на красоту, то подгоночная составляющая высока. Когда же что-то стОящее находится, то оно выглядит красиво.

Поэтому сам красоту не ищу критериями. Больше упираю на количество сделок и алгоритм ядра ТС. Цель - получить красоту без критерия красоты. Как правило, такой вариант проходит OOS.


ЗЫ Вариант с комиссией интереснее (но, как правило, наоборот: меньше комиссия - больше вероятность нахождения закономерности). В нем фактически идет уменьшение количества сделок (стат. значимости), но увеличение вероятности удачного поиска.

Ну понятно что там еще есть ограничители. Я например так действую:

  • Выставляю минимально требуемое мат ожидание в пунктах (как раз с учетом спреда, туда же комиссию пихаю и своп, примерно)
  • Выставляю минимально требуемое количество трейдов, которое мне нужно с учетом длины рассматриваемого участка
  • Настраиваю фактор соответствия кривым
Внутри спреда вообще нет смысла что-то искать ). Трейдов совсем мало будет это факт, с ним ничего не сделаешь. Подгонка везде есть, вопрос как ее минимизировать не обращая внимания на сам алгоритм. Способы есть. Просто без оценки кривой мы можем рассчитывать только на то что алгоритм изначально граальный, коих я думаю по пальцам пересчитать.  Есть у меня методы, как и без этого обходиться, но боюсь такое сюда писать ))).
 
Evgeniy Ilin #:

Ну понятно что там еще есть ограничители. Я например так действую:

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

Не делаю так. Рыночные закономерности не зависят от торговых условий брокера. Склоняюсь к такому.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Машинное обучение в трейдинге: теория, модели, практика и алготорговля

fxsaber, 2023.08.19 11:10

Брокера для исторических данных выбирать по наибольшей потенциальной прибыли. Например, потенциалка у EURUSD_Broker1 выше, чем у EURUSD_Broker2. Тогда берете EURUSD_Broker1.

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

Т.е. искать логично там, где выше концентрация "золота в породе".


  • Выставляю минимально требуемое количество трейдов, которое мне нужно с учетом длины рассматриваемого участка
Да, это своего рода помощь для генетики не ходить в тупиковые ветви.
  • Настраиваю фактор соответствия кривым
Вот именно это специально не делаю. Например, можно обучить ТС, чтобы выдавал PF>2.5. При должном количестве сделок это почти автоматом выдаст красивую кривую. Мало стал практиковать. Но для исследований всегда интересно посмотреть, конечно.
Внутри спреда вообще нет смысла что-то искать ). Трейдов совсем мало будет это факт, с ним ничего не сделаешь. Подгонка везде есть, вопрос как ее минимизировать не обращая внимания на сам алгоритм. Способы есть. Просто без оценки кривой мы можем рассчитывать только на то что алгоритм изначально граальный, коих я думаю по пальцам пересчитать.  Есть у меня методы, как и без этого обходиться, но боюсь такое сюда писать ))).

Привязку ТС к спреду не понимаю.

 
@fxsaber

  • Например, можно обучить ТС, чтобы выдавал PF>2.5. При должном количестве сделок это почти автоматом выдаст красивую кривую
Красивая то она может и красивая но форма разная, от формы зависит возможный форвард. По крайней мере повысит вероятность найти рабочую настройку. Профит фактор в 2.5 это очень жирно, я бы сказал 1.5 то это довольно много )) такие числа при подгонке обычно бывают. Это как бы способ за счет отброса большего количества настроек повысить вес оставшихся настроек (я про свои критерии). Я вообще пришел к интересной парадигме роботостроения, где основную работу выполняют надстройки над алгоритмами, а от алгоритма мало что зависит. Здесь любой критерий, который повышает значимость той или иной настройки ценен. Ведь в совокупности они работают каждый на своем уровне.

С остальным я согласен.

  • Привязку ТС к спреду не понимаю
Если скальпинг то да, тут по биду ведем и все, как правило аск плавает от спреда. Но тики разные у многих, а от этого много что зависит то ). Просто смысл в том чтобы спред был как можно меньше чем средний размер одной сделки в пунктах, как бы пренебрегаем спредом чтобы он не влиял на сигнал при смене брокера например, ну это так уже мои заморочки ). 
 
Evgeniy Ilin #:
Красивая то она может и красивая но форма разная, от формы зависит возможный форвард.

Пример кривой, найденной по критерию MaxBalance (не по красивости).

 
fxsaber #:

Пример кривой, найденной по критерию MaxBalance (не по красивости).

Интересно было бы увидеть множество кривых, отобранных таким способом (критерий MaxBalance "не по красивости").

 
Anatoli Kazharski #:

Интересно было бы увидеть множество кривых, отобранных таким способом (критерий MaxBalance "не по красивости").

Это был шестой результат в соответствующем opt-файле. Первые пять выглядят хуже.

Делаю малое количество проходов ГА, чтобы наборы входных параметров не были близки между собой.

 

У меня сложилось впечатление, что есть некие подходы к построению ТС, когда критерий MaxBalance с ограничением по количеству сделок снизу всегда на Sample дает красивую кривую. При этом такую ТС можно считать, как что-то рациональное, даже если на OOS полный слив. Но вот специально искать красоту по Шарпу, R^2 или критерием в данной статье видится сомнительным. Возможно, не прав.