LevNNN
LevNNN личный блог
11 февраля 2021, 20:06

Пример разбора трех вариантов тестирования алгоритма на исторических данных OHLC

Всем добрый вечер!

В последнее время на форуме было опубликовано несколько статей по поводу тестирования алгоритмических стратегий, приблизительно следующего содержания — «На тестах все хорошо и алгоритм дает прибыль +100%, в реальной жизни все плохо — и алгоритм дает убытки -100%».В этом посте я попытаюсь вставить свои «пять копеек», почему так случается. С торговлей на бирже знаком с 1994 года. Не скажу, что весь этот опыт был удачный, скорее совсем наоборот и поэтому с 2016 года занимаюсь разработкой алгоритмических стратегий, ну или по простому — пишу торговый собственный робот. В реальных торгах участвую, но только с помощью собственного робота. Разработка роботов — это не бизнес, а скорее хобби, пишу для себя. Торгую на ММВБ через Quik. Робот написан на C#, для тестирования использовал данные с сайтов finam и pitrading (покупал).
Так как я сам разработчик кода, то мне легко внести небольшие коррекции в свой же алгоритм и провести небольшой эксперимент. Я взял исторические минутные данные (OHLC) по трем инструментам — Apple, AUD/USD и XAUG/ USD за последние 4 года и рассмотрел три варианта заключения сделок при тестировании:

Вариант Average. Мы заключаем сделки ( продажа или покупка) по средней цене — (Open + High + Low + Close) / 4;

Вариант Best. Мы покупаем всегда по Low, а продаем по High.

Вариант Worst. Мы покупаем всегда по High, а продаем по Low.

Интуитивно понятно, что вариант Best должен дать самую хорошую доходность, а вариант Worst — худшую. Так и получилось. Результаты тестирования я свел в таблицу и получилось следующее :

Apple      Average  Best      Worst     Market
2017       28.03     38.7      16.62     46.32
2018       5.79       43.29    -33.52   -7.26
2019       61.32     97.87    23.63     85.87
2020       84.07     174.05   -7.23     70.68


AUD/USD Average Best      Worst     Market
2017       3.5         8.65      -2.08     7.98
2018       3.2         5.61      -3.68     -9.68
2019       12.84     16.24    10.69    -0.37
2020       29.34     47.56    8.71       9.86

XUG/USD Average Best      Worst     Market
2017        4.07      30.22    -10.2     6.36
2018        0.87      8.63      -8.2       -5.31
2019        8.64      27.5      -7.94     15.18
2020        85.25    252.56   -99.21   48.28

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

Результаты в принципе получились ожидаемые. Алгоритм Best всегда лучше Average, и соответственно Worst хуже всех. Понятно, что в реальной жизни Вам никогда не удастся заключать сделки по алгоритму Best. Но я думаю, что Вы не настолько неудачны, чтобы заключать сделки по худшей цене, как в алгоритме Worst. При алгоритме Worst лучше всего ведет себя австралийский доллар — в целом алгоритм остается прибыльным даже при самом худшем сценарии, на серебре при алгоритме Worst Вы разоритесь, а на Best озолотитесь.

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

Всем удачи в торгах!

13 Комментариев
  • u-gyn
    11 февраля 2021, 20:33
    Правильное тестирование только вариант worst.
    я все тестирую только так, если при самом худшем раскладе ТС плюсует, значит плюс будет по любому, т.к. даже хронический неудачник не способен всегда покупать по максимальной цене и продавать по минимальной.
  • ves2010
    11 февраля 2021, 21:55
    про pitrading не знал
    что есть такое

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

    т.е ты как бы подглядываешь в будущее
    • ves2010
      11 февраля 2021, 22:06
      ves2010, поэтому делай так
      заявки тестишь по цене опен
      а затем считаешь к=количество свечей без теней/общее количество свечей

      число проблемных сделок= всего сделок*k
      ухудшение результата тестов= число проблемных сделок* средний размер свечи

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

      но это тоже сложно… обычно уже торгуешь ботом хотяб пол года и видишь что как исполняется просто сравнивая расчетную и реальную эквити и просто считаешь проскальзывание
    • VladMih
      11 февраля 2021, 23:17
      LevNNN, да уж, подробностей для серьезного обсуждения маловато.
      Впечатление, что это ни о чём — по той причине, что способов применения средней цены миллионы, а вы базируетесь на каком-то одном собственном представлении этой темы.
      И впечатление, что о других способах вы даже не подозреваете.

      В этом ваша главная беда, вам бы поучиться трейдингу…
      с вашим огромным опытом (на год больше моего).
      Хотя бы Элдера почитайте, «киношки» его посмотрите.
        • VladMih
          12 февраля 2021, 01:10
          LevNNN, правильно, 15 лет назад я тоже не сильно впечатлился Элдером, хотя признал уже тогда, что «в этом что-то есть». Сейчас уважаю его больше, чем 15 лет назад, а вы остались на том же уровне развития.

          Еще и инфантильный страх конструктивной критики — это говорит о том, что вам здесь писать разве что ради того, чтобы кто-то посоветовал что-нибудь по коду. В других смыслах вам посты здесь на пользу не пойдут. По крайней мере от меня вы критики больше не увидите. Читайте тех «невби», которые будут вас хвалить.

          «Ставлю задачу создать робота» — красиво сказано, но забыто, что для этого желательно сначала понять что такое трейдинг.
          Вы уж извините, но у вас этого понятия еще нет.
          Вы не трейдингом 15 лет занимались, вы просто с ним знакомы 15 лет — это две большие и принципиальные разницы.

          Пишу не в обиду, а как доктор.
          На доктора ведь не обижаются за диагноз? Впрочем… всяко бывает.
            • Alexey199
              12 февраля 2021, 05:45
              LevNNN, VladMih, а давайте подумаем — почему крупные конторы, вроде инвестиционных фондов с их обширными ресурсами и возможностью привлекать самых талантливых специалистов, до сих пор не создали таких вот роботов, стабильно торгующих в плюс? В чем ваше преимущество перед ними?
            • SergeyJu
              12 февраля 2021, 12:32
              LevNNN, не читайте элдеров, они не умеют торговать, они просто околорыночники.
  • SergeyJu
    12 февраля 2021, 12:36
     При моделировании обычной трендовой торговли обычно закладывают два вида транзакционных издержек. Суммарную комиссию брокера и биржи, а также проскальзывание. Проскальзывание для 1 лота можно взять в 1 средний спред между бид и офер. Чем больше объем, тем больше проскальзывание.
    Сделки считают по цене принятия решения. 
    Ваши усреднения опасны, могут вводить в заблуждение. А уж тем более — расчет по самой благоприятной цене.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн