Блог им. mirovan

О сложностях проектирования алгоритмов для торговых систем

Я долго думал, как озаглавить данную заметку, в итоге получилось заглавие о сложности алгоритмизации. В общих чертах данная статья посвящена опыту проектирования торговой системы на одном известном паттерне «двойное дно», сложности его формализации и результатах тестировании на разных инструментах и таймфреймах.
Всё началось с того, что я со знакомым обсуждал рабочие паттерны на ликвидных инструментах. Это были самые простые и эффективные (как мы думали) – «пробой уровня», «отскок от уровня», «ретест уровня» (тест уровня с обратной стороны), «двойное дно» и т.д. В настоящей заметке речь пойдет как раз о «двойном дне», поскольку, с моей точки зрения, это наиболее редко используемый и упоминаемый паттерн: и я ни разу не видел, чтобы кто-то давал статистическую оценку по нему. К тому же у многих негативное отношение к данному паттерну, особенно если вспоминать поговорки про «покупку дна».
Хорошо бы определить, что мы будем понимать под «дном». Само дно хорошо видно постфактум (Рис. 1). Т.е. «дно» — это свечная фигура, после которой начинается рост. Это определение именно «дна», а не «ложного дна». Однако если дно на одном таймфрейме будет выглядеть именно как чёткая формация, то на другом таймфрейме этот паттерн может и не являться самым низким дном и после отскока (коррекции наверх) падение может продолжиться с образованием нового дна. Опять же дно бывает разное – дно как формация тестирования одного и того же уровня или повышающееся дно (Рис. 2), т.е. зарождение тренда. Как раз на втором типе я бы хотел остановиться.

 О сложностях проектирования алгоритмов для торговых систем
Рис. 1. Паттерн «Двойное дно» на примере Роснефти от 8 и 9 августа 2013 г.
 
 О сложностях проектирования алгоритмов для торговых систем


Рис. 2. Паттерн «двойное повышающееся дно»
 
Вернемся к обсуждению системы для торговли, основанной на этом паттерне. Из наших со знакомым наблюдений, мы выяснили, что вход должен осуществляться классически, т.е. после пробоя предыдущей максимальной вершины, образованной между первым и вторым дном. Причем пробой должен быть реальным, а именно, пробойная свеча должна закрепиться выше предыдущего максимума.
 
Главный вопрос заключается в том, как определить – дно это или не дно? Конечно, по графику довольно просто сказать – есть двойное дно или нет, но как об этом сказать машине, ведь комбинация свечей на рисунке 3 по сути тоже двойное дно? Особенно хорошо это видно на более мелком таймфрейме. Можно конечно спорить о том, что изображено на Рис. 3 – боковик с выходом или двойное дно на большем таймфрейме, но в решении задачи алгоритмизации это вряд ли поможет.
 
 О сложностях проектирования алгоритмов для торговых систем
 
Рис. 3. «Двойное дно» на большем таймфрейме
 
Таким образом, для правильного определения формации «двойное повышающееся дно» введем параметр «период», который будет обозначать, какое количество свечей должно быть между опорными точками (экстремумами дна). Конечно, можно попытаться воспользоваться индикатором Зиг Заг, но скорее это не решит других проблем, как, например, факт пробоя и закрепления, частичное перекрытие свечей и обновление экстремумов и т.д. Несмотря на это, подход будет очень похожий. Как и в Зиг Заге, для правильно работы нужно  определение экстремумов – локальных максимальных и минимальных точек (свечей). Собственно говоря, для этого и был введен параметр – период.
 
Опять же для правильно определения экстремума нужно знать от какой конкретно свечи мы будем искать его. В данном контексте эта та свеча, которая является пробойной и на которой осуществляется вход в лонг. Поэтому для текущей свечи нужно определить как минимум три ближайших экстремума:
 
1) минимальную точку первого дна
2) минимальную точку второго дна
3) максимальную точку между первым и вторым дном

Подробное описание алгоритм определения экстремумов.
 
Итак, с алгоритмом определения экстремумов и точкой входа мы определились. Теперь нужно понять, в каком месте мы будем закрывать позицию.  Для систем я обычно использую следующие способы выхода из позиции:
1)      По тейк-профиту
2)      По концу временного периода (конец торгового дня, конец торговой недели)
3)      По стоп-лоссу (т.е. ограничение рисков)
Стоп-лосс мы определили как уровень второго дна. Чтобы защитить сделку от ложных пробоев второго дна, установим стоп-лосс немного ниже уровня второго дна, на значение определяемое формулой:
StopLoss = SecondBottom * (1000-percent)/1000
где StopLoss – уровень стоп-лоса,
SecondBottom – уровень второго дна,
percent – процент отклонения от второго дна.
Например, если акция Сбербанка стоит 85 рублей, а предыдущее второе дно равнялось 80 рублям, то уровень стоп-лосса будет равен 79,92. Соответственно в случае срабатывания стоп-лосса мы потеряем (85-79,92)=5,08 руб.
Вернемся к точке выхода. Вначале я хотел бы привести результаты тестирования на различных инструментах при закрытии сделки по тейк-профиту. По умолчанию, установим соотношение стоп-лосса к тейк-профиту в значении 1 к 3. Всё тестирование будем проводить на 5-минутном таймфрейме. Все сделки осуществляются для простоты только в лонг. Временной интервал для тестирования с 1 января 2009 года до 1 марта 2014 года. Комиссии и проскальзывания учтены.
Для наглядности я буду приводить самые лучшие показатели, полученные путем оптимизации двух параметров – количество просмотров свечей для определения экстремума и соотношение стоп-лосс и тейк-профит.
Фьючерс на индекс РТС
лучший результат при  параметрах:
количество свечей для поиска экстремума = 17
тейк-профит множитель = 8
 О сложностях проектирования алгоритмов для торговых систем
Рис. 5. Кривая доходности для фьючерса на индекс РТС
 О сложностях проектирования алгоритмов для торговых систем
Рис. 6. Результат тестирования для фьючерса на индекс РТС
Фьючерс на доллар-рубль
лучший результат при  параметрах:
количество свечей для поиска экстремума = 7
тейк-профит множитель = 5
 О сложностях проектирования алгоритмов для торговых систем
Рис. 7. Кривая доходности для фьючерса доллар-рубль
 О сложностях проектирования алгоритмов для торговых систем
Рис. 8. Результат тестирования для фьючерса доллар-рубль


Результаты тестирования для акций — Газпром, Сбербанк, Роснефть
 
 
Рассмотрим другой вариант торговой системы, в котором мы будем закрывать позицию в конце торговой недели. Для фьючерсов – в пятницу в 23,30, для акций в 18,30. В данном случае параметр в системе только один – количество  просматриваемых свечей.
Фьючерс на индекс РТС
лучший результат при  параметрах:
количество свечей для поиска экстремума = 18
О сложностях проектирования алгоритмов для торговых систем
Рис. 15. Кривая доходности для фьючерса на индекс РТС
 О сложностях проектирования алгоритмов для торговых систем
Рис. 16. Результат тестирования для фьючерса на индекс РТС



Как видно из проведенных тестов, система с закрытием по времени работает еще хуже. Поэтому в таком виде её использовать, также как и первую систему нельзя.
Что в итоге у нас получилось в итоге? Хотя у нас не получилось хорошей прибыльной системы, мы смогли протестировать систему, основанную на двойном дне на разных ликвидных инструментах. Ни в одном случае система не показала свою стабильную работу.
Если говорить о сложности проектирования подобного алгоритма, то я хотел бы подчеркнуть, что только для тестирования данной системы у меня ушло около 6 часов. На выработку идеи формальное описание алгоритма около 2 часов, в том числе и обсуждение. На программную реализацию торговой системы около 20 часов. Таким образом, при проектировании торговых систем, нужно учитывать человеческие трудозатраты. Если система не сложная, то её можно реализовать примерно в течение рабочей недели, как в моём случае. Если система требует особого подхода, особенно в алгоритмизации и тестировании, то на реализацию может уйти довольно большой временной срок. Хуже всего если за это время рынок измениться и система не будет давать ожидаемых результатов в будущем.
В любом случае проектирование систем, проверка гипотез дают огромное преимущество для генерации новых идей и создания прибыльных торговых систем.

 
Скачать код торговой системы 

Оригинал статьи на сайте robostroy.ru


 
★32
38 комментариев
К сожелению ваши выкладки построены на ложных предпосылках.
Вы взяли неправильное понятие двойного два, их вариантов больше, вы привели всего один.
Кроме того понятия основанные на свечных формациях ошибочны, в частности приведенная на рис.3 формация нерабочая.
Вы взяли Роснефть за 8-9 июля.
Там вариант двйного дна под названием «особое двойное дно»
Первая работа по двойным днам и вершинам я напечатал в журнале Д-штрих в 2010 году.
Подробно все варианты двойных вершин рассмотрены в моей новой книге «Маржинальность рынка».
Image Hosted by PiXS.ru
Инвесторам и трейдерам, умоляю, купите у Гусева весь тираж его книг, ведь на измор возьмет рекламой.
avatar
Stanislav-A, Я готов купить грузовик его книг по цене дров с доставкой. Условие: тираж должен быть из бумаги, не содержащей пластик и свинец))))
Николай Лазарев, к сожалению не могу выступить его агентом, т.к. в ЧС:)
avatar
Stanislav-A, почему его не банят за рекламу?
avatar
Идущий по воде, да это безобидная реклама. даже полезная, но достала порядком
avatar
Stanislav-A, Зря Вы так, мне кажется Владимир сильно изменился, по крайней мере лично мне стало очень интересно его читать.
Машковский Евгений, так и я его постоянно читаю, только он всех в сад отправляет, кто сказал что то не так.
avatar
Stanislav-A, Ну это да, но репрессии заметно уменьшились, я раньше бы мигом в черном списке оказался, а сейчас нет, еще жив.))))
Машковский Евгений, Да он стирает все, что не согласуется с генеральной линией партии. Имхо, это вполне определенный тип человека и маловероятно, что он сможет написать что-то дельное.
avatar
Машковский Евгений, а может это ты сильно изменился, настолько, что тебе стало интересно его читать? ))
avatar
Зов KTULHU, Да всё может быть!
Имхо, надо танцевать не от графиков, а от того, что за ними стоит. Это на порядок сложнее, чем просто играться с широко известными подходами, но зато на выходе получаются торговые системы, а не нечто, дающее хорошую эквити на истории.
avatar
anatolyutkin, с графиками тоже нормально, только надо не паттерны обрабатывать, «двойное дно», «голова-плечи», «руки-ноги» и т.п., а хотя бы Байесом историю обрабатывать, про out-of-sample я уж не говорю, это следующий уровень.

А с паттернами можно поиграть, хуже не будет, главное сильно на них не надеяться, впрочем там и по тестам видно будет, что надеяться не на что.
avatar
Swan, Ну мы же с вами все это обсудили :)

Тут на самом деле вопрос методологии. Я физик, и не люблю непонятно откуда берущиеся вещи. Стандартом в науке является такой подход: эксперимент--построение теории для объяснения--предсказание на базе теории. Опыт показывает, что это наиболее продуктивный путь.

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

Но естественно, что успешно торговать можно и так и так, для успеха не обязательно детально изучать повадки биржевых зверьков, как это делаю я. Такое изучение лишь повышает устойчивость трейдера.
avatar
anatolyutkin, с одной стороны, не могу не согласиться =)))
а с другой — я просто обратил внимание, что если задача уже поставлена именно вот так — тупо график через паттерны, то для решения нужно нечто позатейливее, чем «головы-плечи»
avatar
Swan, Не знаю, имхо нормальная матчасть у автора используется. Конечно, можно и что-то поизощренней во втором десятилетии двадцать первого века юзать, но не обязательно. Это как трендовость--можно херсты и прочие фрактальные размерности изучать, а можно не вникать и просто пересечение МА прогнать.

Конечно, знание это сила, и обилие методик еще никому не вредило--но и без громобойной математики можно работать :)
avatar
1 идея гуд…
2 можно как алерт использовать…
3 многкратно говорил о том, что выход важнее входа
4 зря не тестил на обе стороны, т.к 3 года идет боковик
avatar
siva, распознавать образы «паттерн-реакция» байесовским методом, причём очевидно, что паттернов тут может быть сотни, если не тысячи
avatar
"… Собственно говоря, для этого и был введен параметр – период...."
На мой взгляд, вот с этого момента получилась обычная машка и потерялся смысл дальнейших исследований.
А не пробовали посмотреть, что-то типа синтетических баров или ренко или т.п.?
avatar
Найти «дно» на графике не сложно. Можно использовать параметры свечей, но лучше типовую цену (разница между открытием и закрытием). Самый сложный вопрос, на мой взгляд, это определить глубину дна. Т.е. глубину просадки и возврата цены. Ещё важно за какой период искать это «дно», ведь оно может быть образовано не просто разворотом, а долгой проторговкой. В результате поимеем систему с двумя переменными (оптимизируемыми) параметрами, что совсем не айс и чревато подгонкой этих параметров под историю.


На картинке положительный результат получен путём подгонки двух параметров: «к» глубина дна и «кр» ширина искомого дна
Николай Лазарев, Чем чревата попытка торговать подогнанной (оптимизированной) системой знает любой системщик)))
siva, если ответить кратко, то «нет». байес никак не связан ни с оптимизацией ни с прочими фокусами…
avatar
Вот ради таких постов я и читаю смартЛаб. И неважно, соглашаюсь ли я с логикой/методами/техникой.
Супер, Максим, пиши ещё.
avatar
GSV_pusher, Согласен, именно эти посты а также коменты к ним и есть самое ценное «золото» смарт лаба. Ради таких постов и стоит перелопачивать весь хлам на этом ресурсе.
avatar
Пусь пишут и по больше таких стратегий и продают и кто-то покупает и применяет… кому хорошо? — нам но не им, кто же будет сливить бабос под наши стратегии )))
avatar
дочитал до перечисления трех экстремумов… Нет никакой необходимости искать максимум между впадинами… указанный уровень удобен для ваших глаз но не для позиции. В частности на рисунке 2 этот уровень должен быть на максимуме свечи следующей за той где он отмечен и лимитка после пробоя размещается на нем же либо над нижним кластером пробойной свечки если такой был образован.
avatar
системы надо тестировать так: берёшь три равных куска на истории инструмента, радикально разных по характеру, и прогоняешь ручками по разработанному правилу, оцениваешь. Хорошо — тогда торгуешь. Руками, конечно. А все эти переводы для роботов — всё это от лукавого. Хренова туча времени и сил потрачена на хрень — вот какой вывод из этого топика.
avatar
siva, я никогда не видел в инете материалов по байесовской классификации паттернов. Хотя по самому байесу встречаются, например довольно много материалов по разпознаванию спама байесом. Так что, к сожалению, ничем не помогу… Если интересно — начать можно с википедии, по слову байесовский алгоритм…
avatar
вы осознаете что вот всем этим тестированием вы ищете на исторических данных типовой алгоритм, который на заранее известном графике (!!!) сработал бы в плюс? найдется ли такой алгоритм? уан хандред персент! будет ли он завтра работать? фифти/фифти. это все равно что смотреть на график и говорить, вот здесь надо было купить, а вот здесь продать. только на эту наивность навесили немножко расчетов.
avatar

теги блога Максим Милованов

....все тэги



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