Введение
В данной статье приведено тестирование свечной модели 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, набор бумаг и параметры тестирования приведены здесь:
Тестирование рабочей свечной модели на исторических данных
![Тестирование модели CandleMax в программе Wealth-Lab Тестирование модели CandleMax в программе Wealth-Lab](/uploads/images/05/27/43/2019/03/05/eda17d.jpg)
Рис. 2. Мой скрипт.
На Рис. 3 вы можете увидеть статистическую информацию по всем сделкам системы. В частности, следующая информация представляется мне интересной:
Средняя прибыль: 0.65%
Соотношение прибыльных сделок к убыточным: 615 к 408 или 60.12% к 39.88%
Среднее время удержания позиции: 3.25 дней
Рис. 3. Результаты стратегии на бэктесте.
На Рис. 4 приведена статистика по каждой бумаге. Здесь вы можете увидеть, сколько сделок прошло по каждой бумаге, каким был процент прибыльных сделок, сколько дней в среднем удерживались позиции по каждой бумаге и т.д.
![Тестирование модели CandleMax в программе Wealth-Lab Тестирование модели CandleMax в программе Wealth-Lab](/uploads/images/05/27/43/2019/03/05/798b53.jpg)
Рис. 4. Статистика по каждой бумаге.
На Рис. 5 вы можете увидеть эквити системы CandleMax с 22.09.1997 по 29.12.2018. Обратите внимание, что в 2008 году у системы не было сильной просадки. Правда, в кризис 1998 года просадка была.
![Тестирование модели CandleMax в программе Wealth-Lab Тестирование модели CandleMax в программе Wealth-Lab](/uploads/images/05/27/43/2019/03/05/8f0ac1.jpg)
Рис. 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. Согласитесь, что «тестировать» и «указать ссылку на статью о тестировании» — это разные вещи.
Просто читаю блог Юрия (в ЖЖ) и читаю ваш блог на смартлабе, прочитал в комментариях к вашей статье, что люди спрашивали результаты тестирования, а я как раз прочитал статью по этой теме, ну и привел в комментарии ссылку.
Мне чужие лавры не нужны.