Блог им. AlexChi

Тестирование модели CandleMax в программе Wealth-Lab

Введение


В данной статье приведено тестирование свечной модели 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. Скрипт простой и содержит всего несколько строк кода. Казалось бы, где тут можно ошибиться? Но я программист и знаю не понаслышке, что даже в одной строке кода можно сделать несколько ошибок ))))

Тестирование модели CandleMax в программе Wealth-Lab

                                               Рис. 1. Скрипт JC_TRADER.

В данном случае, ошибка всего одна. Плюс еще 4 замечания, которые нужно учесть, чтобы параметры тестирования были одинаковы.

Ошибка:

В строках 20 и 21 (см. Рис.1) вместо “bar+1” нужно написать просто “bar”. В противном случае, после покупки мы пропускаем следующий день и анализируем, начиная со второго дня. Таким образом, мы пропускаем самый “вкусный” день. Дело в том, что свечная модель CandleMax на дневном интервале дает импульс всего на 1-3 дня и именно в следующий после покупки день наиболее вероятно, что бумага будет продана по прибыли.

Замечания:

  1. Я проводил тестирование на 32 бумагах, а JC_TRADER взял список из 50 бумаг. Это не ошибка, конечно, но если использовать другой набор входных данных, то и результаты могут несколько отличаться.
  2. Мой интервал тестирования с 22.09.1997 по 29.12.2018. Соответственно, в строке 16 я написал “bar= 11” вместо “bar= 20”, чтобы не пропускать 9 дней торгов.
  3. Среднюю волатильность я считаю как обычное среднее арифметическое, т.е. использую SMA вместо ATR в строке 15. Это тоже не носит принципиальный характер, когда-то будет прибыльнее посчитать через SMA, когда-то через ATR, я не спорю и никому ничего не навязываю, но тестировал я так. Кстати, RSI я тоже считаю сам и без любых видов сглаживания, но это уже я оставил без изменения, все равно влияние этих факторов незначительно.
  4. Обратите внимание еще раз на строки 20 и 21 на Рис.1. Бывает ситуация, когда в один и тот же день по бумаге срабатывают сразу и стоп-лосс и тэйк-профит. Как же быть в таком случае? Если у вас есть только дневная свеча, то вы не можете определить, что было вначале. Грубо говоря, если поставить в скрипте Wealth-Lab на первое место стоп-лосс, то в таких случаях будет считаться, что у нас убыток, а если поставить на первое место тэйк-профит – то прибыль. JC_TRADER поставил на первое место стоп-лосс, что тоже несколько ухудшило общий результат. Я согласен, что ставить тэйк-профит на первое место тоже неправильно, т.к. иногда все-таки стоп-лосс срабатывает раньше, но, как показывает мой опыт тестирования, тэйк-профит все-таки срабатывает раньше примерно в 80% случаев. Разумеется, речь идет именно об этой модели. Т.е. сильный дневной импульс приводит к тому, что в ближайшее время рынок идет вверх и только потом разворачивается.

Результаты моего тестирования в Wealth-Lab


На Рис. 2. приведен мой скрипт для тестирования системы CandleMax в программе Wealth-Lab. Описание модели CandleMax, набор бумаг и параметры тестирования приведены здесь:

Тестирование рабочей свечной модели на исторических данных

Тестирование модели CandleMax в программе Wealth-Lab

                                               Рис. 2. Мой скрипт.

На Рис. 3 вы можете увидеть статистическую информацию по всем сделкам системы. В частности, следующая информация представляется мне интересной:

Средняя прибыль: 0.65%

Соотношение прибыльных сделок к убыточным: 615 к 408 или 60.12% к 39.88%

Среднее время удержания позиции: 3.25 дней

Тестирование модели CandleMax в программе Wealth-Lab

                             Рис. 3. Результаты стратегии на бэктесте.

На Рис. 4 приведена статистика по каждой бумаге. Здесь вы можете увидеть, сколько сделок прошло по каждой бумаге, каким был процент прибыльных сделок, сколько дней в среднем удерживались позиции по каждой бумаге и т.д.

Тестирование модели CandleMax в программе Wealth-Lab

                                Рис. 4. Статистика по каждой бумаге.

На Рис. 5 вы можете увидеть эквити системы CandleMax с 22.09.1997 по 29.12.2018. Обратите внимание, что в 2008 году у системы не было сильной просадки. Правда, в кризис 1998 года просадка была.

Тестирование модели CandleMax в программе Wealth-Lab

                                         Рис. 5. Эквити системы.

Заключение


Итак, по результатам проведенного тестирования мы видим, что модель CandleMax чаще давала верный  сигнал для покупки (615 правильных сигналов против 408 ошибочных), что составляет 60.12% против 39.88%.

Торговую систему можно считать прибыльной и брать ее на вооружение, если она дает при тестировании на истории соотношение прибыльных сделок к убыточным не менее чем 60% к 40%. Ведь не стоит забывать, что при каждой покупке/продаже вы платите комиссию брокеру и биржевую комиссию, к тому же при покупке/продаже возможны гэпы и проскальзывания, которые также “съедают” часть прибыли.

Какие же выводы отсюда можно сделать? Выводов на самом деле несколько. Итак:

  1. Результаты тестирования модели CandleMax в Excel и в программе Wealth-Lab практически совпали. Напомню, при отношении стоп-лосса к тэйк-профиту как 1:1 отношение прибыльных сделок к убыточным составило в Excel: 60.3% к 39.7%, а в Wealth-Lab: 60.12% к 39.88%. Незначительное отличие в результатах можно объяснить, на мой взгляд, тем, что я рассчитываю RSI без различных видов сглаживания.
  2. Оптимальный размер стоп-лосса и тэйк-профита для системы CandleMax составляет одну среднедневную волатильность по бумаге за 10 торговых дней (2 торговые недели). При увеличении размера стоп-заявок прибыль растет, но важно понимать, что происходит это за счет того, что мы просто дольше удерживаем бумагу, ведь за время тестирования индекс МосБиржи вырос от 100 до 2500, т.е. в 25 раз. Импульс, который дает дневная свеча, действует всего 1-3 дня, а если поставить стопы на уровне, например 30% от цены покупки, то это уже будет просто подгонка под известный результат (рост индекса за 20 лет в 25 раз).
  3. Оптимальное отношение размера стоп-лосса к тэйк-профиту составляет для системы CandleMax 1:1. Изменение отношения стоп-лосса к тэйк-профиту на большие значения, например 1:3 просто приводит к тому, что стоп-лосс начинает срабатывать в 3 раза чаще тэйк-профита.
  4. Среднее время удержания позиции по системе CandleMax составляет всего 3 дня. Это короткая по времени спекулятивная стратегия, при использовании которой, ваши деньги в 90% случаев будут свободны для других торговых идей.
  5. Тестирование проводилось с учетом цены закрытия, на практике же мой торговый робот покупает за две минуты до закрытия. При этом в 90-95% случаев свечная модель не изменяется. В реальной торговле по этой системе соотношение прибыльных сделок к убыточным на сегодняшний день составляет у меня 136 прибыльных к 91 убыточной, что примерно соответствует полученным при тестировании результатам.
  6. Я настоятельно не рекомендую использовать при торговле заемные средства. Сам я выделяю под эту систему только часть своего депозита. К сожалению, движение цен на фондовом рынке не подчиняется распределению Бернулли. Имея выигрышную торговую систему и 136 прибыльных сделок против 91 убыточной, я на практике получил один раз 8 (!!!) подряд убыточных сделок.
  7. Во всех моих торговых системах, так или иначе, используется одна и та же идея: лучшие бумаги остаются лучшими. Так же и здесь. В данном случае я подтвердил гипотезу о том, что если бумага растет на повышенных объемах и закрывается на максимуме дня, то вероятность того, что она продолжит расти (останется лучшей) выше вероятности того, что она упадет.

 

Берегите свои деньги! Торгуйте грамотно!

★39
73 комментария
Замечательно, если некие системы, софты, коды выдают на выходе полезный результат.
Однако, какое ж море «шумных» процессов в башке запускает восприятие подобного материала
avatar
Дмитрий Ш, 
какое ж море «шумных» процессов в башке запускает восприятие подобного материала

Фенибут пробовали от этой проблемы?
avatar
AlexGood, Да какой там фенибут… Аминазин разве что… Но эт путь тупиковый
avatar
Дмитрий Ш, ну это слишком радикальное средство!
avatar
AlexGood, Знаю. Тут-то я спец, однако
Сейчас пытаюсь как раз более прогрессивные методики продвинуть… Пока на уровне «НИОКР»(да, в кавычках, конечно). Но если на уровень практики удастся вывести, прикольно
avatar
Грааль индахаус!
avatar
Точнее было бы протестировать портфельным бэк-тестом, как у JC, например, держать не более пяти позиций одновременно, по 20% на каждую позицию. А то в какой-то день сигналов будет много, а денег на все позиции не хватит. 
То есть, по сути может так оказаться что большинство прибыльных сделок на бэк-тестах было сделано в какой-то один-два ударных дня.
Дядя Ваня СпекулянтЪ, тестировать можно по-разному и на всех не угодишь. Что касается ситуации, когда сразу несколько бумаг предлагается для покупки этим роботом, то это признак усиления сигнала. Т.е. это хорошо. В таком случае можно увеличить сумму покупки. И да, большинство прибыльных сделок было сделано, когда сразу по нескольку бумаг предлагалось для покупки, а не только одна.
avatar
AlexChi, а чем вызвано такое расхождение количества сделок между тестом в Экселе и WL?

Например,
Сбербанк 50 против 36
Лукойл 40 — 28
Мосбиржа 15 — 7
Татнефть 51- 36
и другие.

Один только ВТБ совпадает. 17 — 17 )
Спасибо. Алекс, а Вы не могли бы приложить изображение (пример лучше из реального графика) этой CandleMax?
avatar
Chelovekspasibo, посмотрите дневную свечу в МосЭнерго от 05.03.2019. Это она, только объемы в 1.5 раза больше средних, а не в 2 раза.
avatar
AlexChi, Обьёмы сделок за день?
avatar
Chelovekspasibo, да
avatar
«Бывает ситуация, когда в один и тот же день по бумаге срабатывают сразу и стоп-лосс и тэйк-профит. Как же быть в таком случае? Если у вас есть только дневная свеча, то вы не можете определить, что было вначале.»

Представьте себе белую свечу с параметрами OHLC.
Цена могла совершить маршрут O-L-H-C или O-H-L-C. 
50/50?
Найдите несколько способов улучшить соотношение 50/50.
Аналогично и для черной свечи.

Моего отрицательного отношения к тестированию на истории это улучшение не меняет.
avatar
Khan Tengri, а на чем тестировать тогда?:) на интуиции или лет 5 в боевом режиме отливать?) 
avatar
Khan Tengri, а можно поподробнее по поводу данного утверждения?:
Моего отрицательного отношения к тестированию на истории это улучшение не меняет

Вы имели в виду тестирование стратегий на истории в целом или что-то смущает в конкретно этом случае?
avatar
Владислав К, не умеет и лень учиться, вот и отрицает
avatar
Oleg Only Algo, думаю, это не тот случай.
avatar
Владислав К, если бы ТС не сказал категорично, что «вы не можете определить, что было вначале», я бы просто прошел мимо.

Если найти несколько способов «улучшить соотношение 50/50», включая те, что вижу я, то должны появиться основания поменять свое отношение к тестированию на истории, от некоторых усилений до радикального пересмотра. Там просто прямая аналогия есть.

Если мое предложение по свечке не вызывает отторжения, то почему смущает мое отношение к тестированию на истории, почему не попытаться от частного перейти к общему?

Я мог бы убрать последнее предложение в том моем непонятом комментарии, но моего отрицательного отношения к тестированию на истории это не поменяет:)

По этому поводу я отметился в одном хорошем посте.

smart-lab.ru/blog/524765.php#comment9481693

И еще — с такого рода тестированиями я завязал лет 10 назад.
Примут ли мои слова к сведению или проигнорируют — дело не мое, у нас у каждого свой путь в  трейдинге. 
avatar
Khan Tengri, хмм… возможно, тут загвоздка в том, какой смысл каждый вкладывает в понятие «тестирование на истории». Из этого и непонимание участниками обсуждения друг друга или (в граничном виде) — холивары (примерно, как у некоторых вызывает ярость берсерка упоминание словосочетания «использую индикаторы»).

Лично для меня «тестирование на истории» прежде всего означает проверку идеи на предмет, стоит ли смотреть дальше или сразу отбросить. Ведь если признаков работоспособности идеи не наблюдалось в прошлом, то с какой стати она будет работать теперь? Т.е. первична идея, обоснование, а уже затем проверка на данных. Тестирование свечных комбинаций, да и других подходов из разряда «а что если посмотреть вот такую комбинацию, использующую цену, объем или открытый интерес» отношу скорее к датамайнингу, что, согласитесь, тоже имеет право на жизнь, правда, с оговорками («почему это работает — непонятно, и как долго еще будет работать — тоже неизвестно»)
avatar
Владислав К, как раз тот случай, закончил уже он лет 10 назад, т.к. не по силам оказалось. Лично я сливал постоянно руками по интуиции, а как стал по истории торговать, то чето перестал сливать. Правда алгоритмы, тоже на 90 процентов сливные, тут нужно ещё и выйти на нужные и выкинуть сотни бестолковых и обманчивых, а это требует коллосальное время
avatar
Владислав К, я разделяю Вашу позицию.
Разумное начало должно превалировать над рутинной комбинаторикой, очень экономит время. 
avatar
покупает по цене открытия? :)поставьте проскальзывание и пропуск первой секунды( минуты торгов) 
avatar
Oleg Only Algo, пишет же покупка за 2 мин до закрытия торгов.
avatar
Mark_Diskin, где в коде это?
avatar
Oleg Only Algo, самая последняя строчка «БайЭтКлоуз». Пишет, что тестировал как бы по цене закрытия, но якобы если брать за 2 мин до конца закрытия результат не изменит.
avatar
Mark_Diskin, в процентах просадку не видно, да и такие боковики в реальности психологически нереально торговать на практике- иопнешься;)
avatar
Mark_Diskin, уж если тестить, то надо точно всё… а может за 3 лучше или за 5… можт не обязательно обьем в 2 раза или стопы равные или рсиай больше 30 и т.д., как идея на проработку только годится… но 1 слелка в год по активу как то... 
avatar
судя по результатам сделок по каждой бумаге за период с 1997 года было всего около 20-30? Т.е. грубо по 1 сделке в год или я неправильно понял?
avatar
Mark_Diskin, 1,5 сделки в год :-)  
avatar
Oleg Only Algo, сути дела не меняет
avatar
 Ну прям в таком виде торговать конечно нельзя:) но для кучи бумаг в лонг вроде можно поковырять этот грааль, тем более что по смыслу вроде логично. Но скорее всего после проскальзывания и вход не на первой секунде результаты испарятся
avatar
Oleg Only Algo, 
Ну прям в таком виде торговать конечно нельзя

почему?
Но скорее всего после проскальзывания и вход не на первой секунде результаты испарятся

там же по условиям ТС наоборот на закрытии дня входить, то есть около 18:45!
avatar
AlexGood, боковики долговаты, 1,5 сдеолки с актива в год не годится… да и нужно ее ещё проверять и доделывать долго до рабочей оптимизировать и тд. Не факт что она рабочая
avatar
Oleg Only Algo,  
1,5 сдеолки с актива в год не годится

там же много активов, вот на один так мало и получается!)
а что скажете об этом: smart-lab.ru/blog/508639.php может данная система более уместна для использования?
avatar
AlexGood, бегло глянул. мне сложно сказать, я никогда не торговал по одному простому принципу большое кол- во бумаг. Я сторонник торговать лишь несколько активов, но с гораздо сложной логикой. У каждого актива своё дыхание и к нему нужен свой ключик. Эти ключики похожи внешне, по одному принципу работают, но для каждого свой все же
avatar
bar+1 это не ошибка. там стоп-лимитные и лимитные ордера.  как раз просто bar это некорректно и может быть использовано только на ценах закрытия. Это инструкции BuyAtClose и SellAtClose
avatar
wrmngr, Согласен. конструкция (bar+1) — это правильно. А (bar) -  это так называемая граальная ловушка.
Дмитрий Власов, BarAtClose(bar) практически тождественно BarAtMarket(bar+1), так что никакой граальной ловушки тут нет.
Дядя Ваня СпекулянтЪ, Я спорить не буду, просто точно знаю, что нужно конструкцию использовать (bar+1). Пользуюсь лицензионным Wealth-Lab уже много лет. Но Ваше право прислушаться или нет.
Дмитрий Власов, тогда вам ничего не стоит проверить на примере и убедиться в альтернативном подходе)
Дмитрий Власов, кстати, даже стало интересно, если признаете исключительно bar+1, как же вы с напарником тестировали системы любимого Коннорса у которого все сделки по закрытию сессии?))
Дядя Ваня СпекулянтЪ, так тестирование автора системы (bar) верное и показатели ТС соответствуют действительности (профит-фактор 1,5 и т.д.)?
avatar
AlexGood, думаю что для списка акций которые использует автор, верное.
Дмитрий Власов, 
(bar) -  это так называемая граальная ловушка.

то есть эта ТС нерабочая? Или по крайней мере профит-фактор будет хуже?
avatar
AlexGood, Про систему ничего сказать не могу, может и рабочая. Но результаты тестирования с этой конструкцией будут недостоверными. В большинстве случаев будут необоснованно улучшать результаты. Но в любом случае на моё мнение полагаться не нужно. Лучше сами досконально разберитесь с вопросом.
wrmngr, нет, как раз в этом случае, когда позиция открывается BuyAtClose(bar), то закрытие позиции тоже надо SellAtStop(bar), иначе позиция не закроется на следующем баре после открытия позиции по клоузу, а только через один бар.
Если бы открывалась по BuyAtMarket(bar+1), тогда конечно, надо было бы закрывать по (bar+1).
Дядя Ваня СпекулянтЪ, вы не правы. читайте хелп велслаба
avatar
wrmngr, надо просто проверить на конкретном примере. Я тоже сразу не поверил, но оказалось так)
Дядя Ваня СпекулянтЪ, в свое время я написал десятки тысяч строк в велслабе. мне проверки ни к чему
avatar
wrmngr, поспорим на сто долларов?)))
Дядя Ваня СпекулянтЪ, в чем предмет спора?
avatar
wrmngr, в том что если в данном примере использовать на закрытие позиции SellAtStop(bar+1), то будет пропускаться один бар вслед за баром, на котором открылась позиция и поэтому, надо использовать SellAtStop(bar) и SellAtLimit(bar)
(Чтобы самому не писать код, можете скопировать его у JC по ссылке в посте)
Дядя Ваня СпекулянтЪ, возможно, разбирать код нет времени. Тем не менее конструкции типа SellAtStop(bar) опасны в ряде случаев. Их даже в хелпе не встретишь.
avatar
wrmngr, 
конструкции типа SellAtStop(bar) опасны в ряде случаев

чем именно опасны?
avatar
AlexGood, потому что по логике побарного бектестера в цикле в момент bar известны все параметры бара, что позволяет незаметно «подглядывать в будущее»
avatar
wrmngr, 
что позволяет незаметно «подглядывать в будущее»

то есть автор системы искусственно улучшил результаты бектеста?
avatar
AlexGood, не знаю. предлагаю вам реализовать эту несложную систему самому и все выяснить
avatar
Дядя Ваня СпекулянтЪ, 
вы в одном месте пишете что
BarAtClose(bar) практически тождественно BarAtMarket(bar+1)

в другом:
если в данном примере использовать на закрытие позиции SellAtStop(bar+1), то будет пропускаться один бар вслед за баром, на котором открылась позиция и поэтому, надо использовать SellAtStop(bar) и SellAtLimit(bar)

как же может bar и bar+1 тождественными если во втором случае в отличие от первого пропускается бар следующий за баром открытия позы?
avatar
AlexGood, так и закрывать надо на (bar), тогда не будет пропускаться.
wrmngr, 
как раз просто bar это некорректно и может быть использовано только на ценах закрытия.

то есть профит-фактор этой ТС будет ниже или вообще стратегия не будет зарабатывать?
avatar
AlexGood, вероятно будет плюсовой, но относительно рисков малоинтересна
avatar
wrmngr, но профит-фактор снизится? 
avatar
AlexGood, к чему вам профитфактор? Отдельный показатель мало о чем говорит.
avatar
wrmngr, один из ключевых же показателей, в целом не советуете торговать эту ТС?
avatar
AlexGood, я всегда советую не начинать торговать вообще. Особенно по чужим системам
avatar
wrmngr, вот эту его ТС smart-lab.ru/blog/508639.php более уместно торговать? 
avatar
AlexGood, идея лучше, результаты будут устойчивее. На этой основе можно развиваться
avatar
… По итогам проведенного nickson тестирования...


Уважаемый автор, вы что-то перепутали, я не тестировал вашу стратегию, а привел ссылку на тестирование, я не jc-trader. Согласитесь, что «тестировать» и «указать ссылку на статью о тестировании» — это разные вещи.

Просто читаю блог Юрия (в ЖЖ) и читаю ваш блог на смартлабе, прочитал в комментариях к вашей статье, что люди спрашивали результаты тестирования, а я как раз прочитал статью по этой теме, ну и привел в комментарии ссылку.

Мне чужие лавры не нужны.

avatar
nickson, прошу прощения! Поправил текст, убрал ссылки на ваш ник.
avatar
Когда-то делали разбор ТС Татарина (на СЛ), так вот там та же была ТС, еще года 3-4 назад.
avatar
DJ, а ссылку можно?
avatar
я правильно пониаю, что бай энд холд больше дает? тогда в чем плюс этой ТС, в то что в 2008 просадки нет и эквити по годам плавнее?
avatar

теги блога AlexChi

....все тэги



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