Блог им. LevNNN

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

    • 11 февраля 2021, 20:06
    • |
    • LevNNN
  • Еще

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

В последнее время на форуме было опубликовано несколько статей по поводу тестирования алгоритмических стратегий, приблизительно следующего содержания — «На тестах все хорошо и алгоритм дает прибыль +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 лет без какой либо подгонки параметров.

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

★2
13 комментариев
Правильное тестирование только вариант worst.
я все тестирую только так, если при самом худшем раскладе ТС плюсует, значит плюс будет по любому, т.к. даже хронический неудачник не способен всегда покупать по максимальной цене и продавать по минимальной.
avatar
про pitrading не знал
что есть такое

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

т.е ты как бы подглядываешь в будущее
avatar
ves2010, поэтому делай так
заявки тестишь по цене опен
а затем считаешь к=количество свечей без теней/общее количество свечей

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

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

но это тоже сложно… обычно уже торгуешь ботом хотяб пол года и видишь что как исполняется просто сравнивая расчетную и реальную эквити и просто считаешь проскальзывание
avatar
Наверное мне следовало более  подробно рассказать про алгоритм, чтобы убедить, что никакого заглядывания в будущее нет.  Пока очень кратко  про алгоритм -  я предварительно  строю  таблицу сделок,   а потом проверяю -  попадает эта цена в интервал или нет. Т.е.   есть какой то инструмент, который сейчас торгуется по 100 руб.  И я говорю алгоритму, что  буду покупать по 90, а продавать по 110.
При тестирование на истории я проверяю -  попадет моя цена в интервал OHLC  или нет. А если попадает, то я  должен выбрать по какой цене я совершаю сделку. Как то так, если очень кратко.  
И в этом посте я просто показал, как будет зависеть результативность алгоритма  от выбора цены внутри свечи OHLC.
avatar
LevNNN, да уж, подробностей для серьезного обсуждения маловато.
Впечатление, что это ни о чём — по той причине, что способов применения средней цены миллионы, а вы базируетесь на каком-то одном собственном представлении этой темы.
И впечатление, что о других способах вы даже не подозреваете.

В этом ваша главная беда, вам бы поучиться трейдингу…
с вашим огромным опытом (на год больше моего).
Хотя бы Элдера почитайте, «киношки» его посмотрите.
avatar
VladMih, Это моя первая проба пера, так что уж сильно не критикуйте!)  Я пишу робота — мне это интересно, это скорее «хобби».  Буду дальше продолжать делиться результатами. Это еще далеко не все, что я хотел сказать.  Книжки Элдера наверное хороший совет для новичков. Но мне это не зачем,  у меня свой взгляд на  всю биржевую торговлю!) Хотя признаюсь, что лет 15 назад что -то у Элдера читал, но не впечатлило.
Я ставлю своей задачей — создать торгового робота,  который будет давать  стабильный плюс и ищу закономерности на этом рынке. 
avatar
LevNNN, правильно, 15 лет назад я тоже не сильно впечатлился Элдером, хотя признал уже тогда, что «в этом что-то есть». Сейчас уважаю его больше, чем 15 лет назад, а вы остались на том же уровне развития.

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

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

Пишу не в обиду, а как доктор.
На доктора ведь не обижаются за диагноз? Впрочем… всяко бывает.
avatar
VladMih, Я не обижаюсь, на Вас ,  я просто пытаюсь понять, что я донес не так до читателей. Я рассказываю про своего робота — Вы мне советуете почитать Элдера. Зачем! Мне это не интересно. Мне интересно разработать что-то свое.  И хочу просто рассказать читателям о том, чем я занимаюсь.  Если Вы хотите сказать, что всем чем я занимаюсь — это «полная фигня», я с Вами спорить не буду — это Ваше право, но звучит это бездоказательно. 

Наверное было бы интересно и продуктивно,  подумать о том, как создать что — то принципиально новое и это пообсуждать?!
 
P.S. Да Вы, правы я не торгую руками, можете не называть меня трей
дером. За меня торгует робот, который я сам разработал.

Сегодня был удачный день  и оба инструмента, которыми я торговал сегодня -  сработали в плюс 145 тыс. р. на дневной и 57 тыс р. на вечерней. Могу привести доказательства!)

avatar
LevNNN, VladMih, а давайте подумаем — почему крупные конторы, вроде инвестиционных фондов с их обширными ресурсами и возможностью привлекать самых талантливых специалистов, до сих пор не создали таких вот роботов, стабильно торгующих в плюс? В чем ваше преимущество перед ними?
avatar
LevNNN, не читайте элдеров, они не умеют торговать, они просто околорыночники.
avatar
Да, кстати,  если кто — хочет узнать  больше подробностей про робот — пишите в личку, расскажу более подробно.  Я открыт для обсуждений.
avatar
 При моделировании обычной трендовой торговли обычно закладывают два вида транзакционных издержек. Суммарную комиссию брокера и биржи, а также проскальзывание. Проскальзывание для 1 лота можно взять в 1 средний спред между бид и офер. Чем больше объем, тем больше проскальзывание.
Сделки считают по цене принятия решения. 
Ваши усреднения опасны, могут вводить в заблуждение. А уж тем более — расчет по самой благоприятной цене.
avatar
SergeyJu,  Про проскальзывание — это отдельная большая тема, скорее всего я расскажу про   то как я пытаюсь решить эту проблему в отдельном  посте.  
Никого не хотел вводить в заблуждение. поэтому сразу скажу, что рассчитывать надо на самый худший вариант — Worst.  Если он дает стабильный минус,  то вступать в  «бой» не надо. У меня есть алгоритмы, которые дает  стабильный плюс даже  при  алгоритме Worst, но об этом я расскажу чуть позже.

avatar

теги блога LevNNN

....все тэги



UPDONW
Новый дизайн