Введение
В данной статье приведено тестирование свечной модели CandleMax в программе Wealth-Lab. Я уже приводил описание и тестирование этой свечной модели на исторических данных по 32 наиболее ликвидным акциям МосБиржи с 22.09.1997 (начало торгов на ММВБ) и по 29.12.2018.
Вот эта статья:
Тестирование рабочей свечной модели на исторических данных
То тестирование было выполнено в Excel и вызвало ряд дополнительных вопросов, в частности некоторые читатели хотели увидеть эквити системы, а также получить больше статистической информации.
Скорее всего, эти пожелания так и остались бы без ответа, так как систему я не продаю, а для себя все давно уже решил и оттестировал, если бы не один комментарий к той моей статье. Этот комментарий был написан блогером JC_TRADER и содержал ссылку на тестирование моей системы в программе Wealth-Lab. Вот эта ссылка: https://jc-trader.livejournal.com/1628589.html
Пройдя по этой ссылке, я был просто обескуражен. По итогам проведенного JC_TRADER тестирования, система CandleMax позорно показала отношение прибыльных сделок к убыточным как 50.92% к 49.08% при отношении стоп-лосса к тэйк-профиту как 1:1. Соответственно, не могло быть и речи о том, чтобы использовать такую убогую систему, о чем и написали читатели блога JC_TRADER.
Разумеется, я не мог оставить без внимания результаты такого исследования. Тем более что я закодировал данную систему еще в 2015 году и, торгуя по ней, мой робот получил 136 прибыльных сделок против 91 убыточной. Значит, что-то было не так или в программе Wealth-Lab (что маловероятно) или в особенности тестирования. Разбор значительно облегчило то, что JC_TRADER привел пример своего скрипта для Wealth-Lab.
В данной статье я объясню, почему у JC_TRADER получились такие результаты, а также приведу результаты своего тестирования модели CandleMax в программе Wealth-Lab.
Анализ чужого кода
Программы Wealth-Lab у меня не было, так что мне для начала пришлось ее установить, настроить и разобраться в том, как же она работает. Это заняло некоторое время, т.к. я работаю по стандартному офисному графику и к тому же человек семейный, так что тестировать приходилось урывками в течение нескольких дней. Но это все лирика, давайте перейдем к конкретике.
На Рис. 1 приведен скрипт, который использовал JC_TRADER для тестирования в Wealth-Lab. Скрипт простой и содержит всего несколько строк кода. Казалось бы, где тут можно ошибиться? Но я программист и знаю не понаслышке, что даже в одной строке кода можно сделать несколько ошибок ))))
Рис. 1. Скрипт JC_TRADER.
В данном случае, ошибка всего одна. Плюс еще 4 замечания, которые нужно учесть, чтобы параметры тестирования были одинаковы.
Ошибка:
В строках 20 и 21 (см. Рис.1) вместо “bar+1” нужно написать просто “bar”. В противном случае, после покупки мы пропускаем следующий день и анализируем, начиная со второго дня. Таким образом, мы пропускаем самый “вкусный” день. Дело в том, что свечная модель CandleMax на дневном интервале дает импульс всего на 1-3 дня и именно в следующий после покупки день наиболее вероятно, что бумага будет продана по прибыли.
Замечания:
- Я проводил тестирование на 32 бумагах, а JC_TRADER взял список из 50 бумаг. Это не ошибка, конечно, но если использовать другой набор входных данных, то и результаты могут несколько отличаться.
- Мой интервал тестирования с 22.09.1997 по 29.12.2018. Соответственно, в строке 16 я написал “bar= 11” вместо “bar= 20”, чтобы не пропускать 9 дней торгов.
- Среднюю волатильность я считаю как обычное среднее арифметическое, т.е. использую SMA вместо ATR в строке 15. Это тоже не носит принципиальный характер, когда-то будет прибыльнее посчитать через SMA, когда-то через ATR, я не спорю и никому ничего не навязываю, но тестировал я так. Кстати, RSI я тоже считаю сам и без любых видов сглаживания, но это уже я оставил без изменения, все равно влияние этих факторов незначительно.
- Обратите внимание еще раз на строки 20 и 21 на Рис.1. Бывает ситуация, когда в один и тот же день по бумаге срабатывают сразу и стоп-лосс и тэйк-профит. Как же быть в таком случае? Если у вас есть только дневная свеча, то вы не можете определить, что было вначале. Грубо говоря, если поставить в скрипте Wealth-Lab на первое место стоп-лосс, то в таких случаях будет считаться, что у нас убыток, а если поставить на первое место тэйк-профит – то прибыль. JC_TRADER поставил на первое место стоп-лосс, что тоже несколько ухудшило общий результат. Я согласен, что ставить тэйк-профит на первое место тоже неправильно, т.к. иногда все-таки стоп-лосс срабатывает раньше, но, как показывает мой опыт тестирования, тэйк-профит все-таки срабатывает раньше примерно в 80% случаев. Разумеется, речь идет именно об этой модели. Т.е. сильный дневной импульс приводит к тому, что в ближайшее время рынок идет вверх и только потом разворачивается.
Результаты моего тестирования в Wealth-Lab
На Рис. 2. приведен мой скрипт для тестирования системы CandleMax в программе Wealth-Lab. Описание модели CandleMax, набор бумаг и параметры тестирования приведены здесь:
Тестирование рабочей свечной модели на исторических данных
Рис. 2. Мой скрипт.
На Рис. 3 вы можете увидеть статистическую информацию по всем сделкам системы. В частности, следующая информация представляется мне интересной:
Средняя прибыль: 0.65%
Соотношение прибыльных сделок к убыточным: 615 к 408 или 60.12% к 39.88%
Среднее время удержания позиции: 3.25 дней
Рис. 3. Результаты стратегии на бэктесте.
На Рис. 4 приведена статистика по каждой бумаге. Здесь вы можете увидеть, сколько сделок прошло по каждой бумаге, каким был процент прибыльных сделок, сколько дней в среднем удерживались позиции по каждой бумаге и т.д.
Рис. 4. Статистика по каждой бумаге.
На Рис. 5 вы можете увидеть эквити системы CandleMax с 22.09.1997 по 29.12.2018. Обратите внимание, что в 2008 году у системы не было сильной просадки. Правда, в кризис 1998 года просадка была.
Рис. 5. Эквити системы.
Заключение
Итак, по результатам проведенного тестирования мы видим, что модель CandleMax чаще давала верный сигнал для покупки (615 правильных сигналов против 408 ошибочных), что составляет 60.12% против 39.88%.
Торговую систему можно считать прибыльной и брать ее на вооружение, если она дает при тестировании на истории соотношение прибыльных сделок к убыточным не менее чем 60% к 40%. Ведь не стоит забывать, что при каждой покупке/продаже вы платите комиссию брокеру и биржевую комиссию, к тому же при покупке/продаже возможны гэпы и проскальзывания, которые также “съедают” часть прибыли.
Какие же выводы отсюда можно сделать? Выводов на самом деле несколько. Итак:
- Результаты тестирования модели CandleMax в Excel и в программе Wealth-Lab практически совпали. Напомню, при отношении стоп-лосса к тэйк-профиту как 1:1 отношение прибыльных сделок к убыточным составило в Excel: 60.3% к 39.7%, а в Wealth-Lab: 60.12% к 39.88%. Незначительное отличие в результатах можно объяснить, на мой взгляд, тем, что я рассчитываю RSI без различных видов сглаживания.
- Оптимальный размер стоп-лосса и тэйк-профита для системы CandleMax составляет одну среднедневную волатильность по бумаге за 10 торговых дней (2 торговые недели). При увеличении размера стоп-заявок прибыль растет, но важно понимать, что происходит это за счет того, что мы просто дольше удерживаем бумагу, ведь за время тестирования индекс МосБиржи вырос от 100 до 2500, т.е. в 25 раз. Импульс, который дает дневная свеча, действует всего 1-3 дня, а если поставить стопы на уровне, например 30% от цены покупки, то это уже будет просто подгонка под известный результат (рост индекса за 20 лет в 25 раз).
- Оптимальное отношение размера стоп-лосса к тэйк-профиту составляет для системы CandleMax 1:1. Изменение отношения стоп-лосса к тэйк-профиту на большие значения, например 1:3 просто приводит к тому, что стоп-лосс начинает срабатывать в 3 раза чаще тэйк-профита.
- Среднее время удержания позиции по системе CandleMax составляет всего 3 дня. Это короткая по времени спекулятивная стратегия, при использовании которой, ваши деньги в 90% случаев будут свободны для других торговых идей.
- Тестирование проводилось с учетом цены закрытия, на практике же мой торговый робот покупает за две минуты до закрытия. При этом в 90-95% случаев свечная модель не изменяется. В реальной торговле по этой системе соотношение прибыльных сделок к убыточным на сегодняшний день составляет у меня 136 прибыльных к 91 убыточной, что примерно соответствует полученным при тестировании результатам.
- Я настоятельно не рекомендую использовать при торговле заемные средства. Сам я выделяю под эту систему только часть своего депозита. К сожалению, движение цен на фондовом рынке не подчиняется распределению Бернулли. Имея выигрышную торговую систему и 136 прибыльных сделок против 91 убыточной, я на практике получил один раз 8 (!!!) подряд убыточных сделок.
- Во всех моих торговых системах, так или иначе, используется одна и та же идея: лучшие бумаги остаются лучшими. Так же и здесь. В данном случае я подтвердил гипотезу о том, что если бумага растет на повышенных объемах и закрывается на максимуме дня, то вероятность того, что она продолжит расти (останется лучшей) выше вероятности того, что она упадет.
Берегите свои деньги! Торгуйте грамотно!
Однако, какое ж море «шумных» процессов в башке запускает восприятие подобного материала
Фенибут пробовали от этой проблемы?
Сейчас пытаюсь как раз более прогрессивные методики продвинуть… Пока на уровне «НИОКР»(да, в кавычках, конечно). Но если на уровень практики удастся вывести, прикольно
То есть, по сути может так оказаться что большинство прибыльных сделок на бэк-тестах было сделано в какой-то один-два ударных дня.
Например,
Сбербанк 50 против 36
Лукойл 40 — 28
Мосбиржа 15 — 7
Татнефть 51- 36
и другие.
Один только ВТБ совпадает. 17 — 17 )
Представьте себе белую свечу с параметрами OHLC.
Цена могла совершить маршрут O-L-H-C или O-H-L-C.
50/50?
Найдите несколько способов улучшить соотношение 50/50.
Аналогично и для черной свечи.
Моего отрицательного отношения к тестированию на истории это улучшение не меняет.
Вы имели в виду тестирование стратегий на истории в целом или что-то смущает в конкретно этом случае?
Если найти несколько способов «улучшить соотношение 50/50», включая те, что вижу я, то должны появиться основания поменять свое отношение к тестированию на истории, от некоторых усилений до радикального пересмотра. Там просто прямая аналогия есть.
Если мое предложение по свечке не вызывает отторжения, то почему смущает мое отношение к тестированию на истории, почему не попытаться от частного перейти к общему?
Я мог бы убрать последнее предложение в том моем непонятом комментарии, но моего отрицательного отношения к тестированию на истории это не поменяет:)
По этому поводу я отметился в одном хорошем посте.
smart-lab.ru/blog/524765.php#comment9481693
И еще — с такого рода тестированиями я завязал лет 10 назад.
Примут ли мои слова к сведению или проигнорируют — дело не мое, у нас у каждого свой путь в трейдинге.
Лично для меня «тестирование на истории» прежде всего означает проверку идеи на предмет, стоит ли смотреть дальше или сразу отбросить. Ведь если признаков работоспособности идеи не наблюдалось в прошлом, то с какой стати она будет работать теперь? Т.е. первична идея, обоснование, а уже затем проверка на данных. Тестирование свечных комбинаций, да и других подходов из разряда «а что если посмотреть вот такую комбинацию, использующую цену, объем или открытый интерес» отношу скорее к датамайнингу, что, согласитесь, тоже имеет право на жизнь, правда, с оговорками («почему это работает — непонятно, и как долго еще будет работать — тоже неизвестно»)
Разумное начало должно превалировать над рутинной комбинаторикой, очень экономит время.
почему?
там же по условиям ТС наоборот на закрытии дня входить, то есть около 18:45!
там же много активов, вот на один так мало и получается!)
а что скажете об этом: smart-lab.ru/blog/508639.php может данная система более уместна для использования?
то есть эта ТС нерабочая? Или по крайней мере профит-фактор будет хуже?
Если бы открывалась по BuyAtMarket(bar+1), тогда конечно, надо было бы закрывать по (bar+1).
(Чтобы самому не писать код, можете скопировать его у JC по ссылке в посте)
чем именно опасны?
то есть автор системы искусственно улучшил результаты бектеста?
вы в одном месте пишете что
в другом:
как же может bar и bar+1 тождественными если во втором случае в отличие от первого пропускается бар следующий за баром открытия позы?
то есть профит-фактор этой ТС будет ниже или вообще стратегия не будет зарабатывать?
Уважаемый автор, вы что-то перепутали, я не тестировал вашу стратегию, а привел ссылку на тестирование, я не jc-trader. Согласитесь, что «тестировать» и «указать ссылку на статью о тестировании» — это разные вещи.
Просто читаю блог Юрия (в ЖЖ) и читаю ваш блог на смартлабе, прочитал в комментариях к вашей статье, что люди спрашивали результаты тестирования, а я как раз прочитал статью по этой теме, ну и привел в комментарии ссылку.
Мне чужие лавры не нужны.