Блог им. neophyte

Зачем тестировать торговые стратегии на истории?

Зачем тестировать торговые стратегии на истории?

Итак, в обсуждении одной из моих прошлых публикаций справедливо заметили, что «зарабатывать можно только в будущем, а в прошлом уже нельзя, оно уже прошло», поставив тем самым под сомнение полезность того, чем занимаюсь я, и тестированием торговых стратегий на истории в частности.
Мы уже обсудили вопрос, зачем нужно учиться. Теперь поговорим собственно о тестировании.

Пройдя какой-либо учебный курс начинающий трейдер научился применять элементарные приемы и существующие инструменты к анализу динамики рынка и делать из результатов этого анализа некие практические выводы.
Но кто сказал, что инструменты, которыми мы пользуемся, хороши и полностью соответствуют стоящим перед нами задачам. Даже если кто-то и сказал это, почему мы должны принимать на веру чужие слова, ставя на это собственные деньги?
Он что, мамой поклялся? Но даже если и поклялся, что с того?
Поэтому следует идти дальше, и проверить, насколько эффективны существующие стандартные инструменты анализа рынка в практике реального трейдинга в том виде. в котором мы собираемся их использовать, и как их можно и нужно модифицировать, чтобы повысить эффективность и прибыльность торговли.

Следует отметить, что в большинстве случаев такое исследование возможно при системной торговле на основе формализуемых алгоритмов проведения сделок покупки и продажи финансового инструмента, т.е. на основе так называемых механических торговых систем (МТС) или систем автоматической торговли — торговых роботов.

Что такое формализуемые алгоритмы? Это алгоритмы, которые могут быть записаны в виде некоторых математических выражений. В результате формализации получаем математическую модель торговой стратегии, в рамках которой полностью определен процесс принятия торговых решений и которая доступна объективному исследованию без всякой примеси субъективных факторов и предпочтений. Такая торговая стратегия может тестироваться совершенно объективным образом, без вмешательства человека, но она должна содержать точные правила для входов и для выходов из рынка:
— когда и по какой цене входить в рынок;
— когда и по какой цене выходить из рынка с убытком;
— когда и по какой цене выходить из рынка с прибылью.

Имея такие правила можно провести моделирование торговли на исторических данных, отражающих изменение динамики цен на некотором историческом периоде в рамках системной торговли.
Самое лучшее таких системах – возможность тестирования. При этом плохую систему можно отбросить или скорректировать, а хорошую – улучшить. Трейдер, получивший достоверную информацию о поведении торговой стратегии на базе прошлого материала, будет чувствовать себя более уверенно и сумеет успешно действовать и в будущем.

Но как все это сделать, каким образом? Очень просто — запрограммировать и посчитать. 

При слове «запрограммировать» у 90% аудитории делается кислое выражение лица. Я вхожу в эти 90%, поэтому долой программирование в традиционном понимании этого термина. Есть почти забытая программа Метасток, ориентированная на пользователей-непрограммистов и требующая минимума специальных навыков, не выходящих по сложности за выполнение элементарных расчетов с помощью EXEL, а если быть более точным, то еще проще. Ну или все-таки программировать в более сложных системах.

Можно рассматривать торговые стратегии как на основе классических методов технического анализа, так и оригинальные, созданные с помощью пользовательских индикаторов. которые в Метасток тоже делаются на раз-два. Главное. что можно исследовать торговые стратегии на любых индикаторах и их комплексах, главное, чтобы вы знали, как это индикатор устроен и могли записать для него формальное математическое выражение (или взять готовое).

Разработка надежных прибыльных торговых систем – сложная задача, которая если и поддается практическому решению, то с существенными ограничениями. Сколько бы мы ни экспериментировали с модификацией параметров систем и с развитием их торговых моделей, мы всегда будем находится рядом с ненадежными системами, ибо так устроен рынок.

Чем полезен тест?
Тест, отличие от субъективной интуитивной уверенности в правильности выбранной торговой стратегии дает объективный результат от ее использования. Пусть и на истории.
Вы сразу можете проверить, разработан у вас «священный грааль» торговых систем или все преимущества стратегии существуют только в воспаленном мозгу разработчика.
Хорошая система должна работать при всех типах трендов, поскольку заранее никогда не известно, когда рынок поменяет направление тренда. Ценами на рынке управляют человеческие ожидания, и нереально, чтобы механическая система последовательно прогнозировала изменения в этих ожиданиях.

И что делать с результатами.
Чаще всего результат бывает откровенно плох, несмотря на кажущиеся достоинства используемого метода.

Ведь как чаще всего появляется метод?
Трейдер смотрит на график, и в мозгу у него зажигается лампочка: а что если так? 
На графике он видит, что все должно быть отлично. И видит потому, что подсознательно выделяет только те моменты.где стратегия должна давать прибыль. И на уровне того же подсознания отбрасывает другие. те где прибыли не было бы.
Тест объективен. Он прошерстит правила на всем отрезке исследуемой истории и покажет истинную цену торговой стратегии.

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

Для примера рассмотрим, как это делается в простейшем случае в Метасток.

Откроем в Метасток график какого либо инструмента, для определенности EURUSD дневного масштаба, и настроим отображение элементов графика в виде японских свечей.
Зачем тестировать торговые стратегии на истории?

График EURUSD с отображением в виде японских свечей

С чего начинается построение торговой системы? Как мы помним, с торговой идеи, с того, что мы начинаем отвечать на вопрос: «А что если…?».
График у нас чист, никаких аналитических линий и индикаторов на нем нет, глазу не за что зацепиться, кроме самого графика. С графика и начнем.

И вот у нас появилась идея.
При восходящем тренде цена рынка в среднем растет, при нисходящем — падает.
В качестве признака роста примем следующее:
— если цена закрытия текущей свечи выше цены закрытия предыдущей, то это и будет признаком восходящего тренда;
— если цена закрытия текущей свечи ниже цены закрытия предыдущей, то это будет признаком нисходящего тренда.
Это и будет нашей торговой идеей.
И еще одно замечание.
Мы будем тестировать систему, которая торгует в двух направлениях, и на покупку и на продажу инструмента. И наша система будет всегда находиться в рынке, т.е. условие закрытия позиции на покупку инструмента будет одновременно являться условием для открытия позиции на продажу, и наоборот.
Записываем правила, запускаем тест.

Зачем тестировать торговые стратегии на истории?

Отображение результатов сделок — график эквити.

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

Наша цель – модифицировать эту простейшую торговую систему таким образом, чтобы:
— колебания и небольшие откаты не приводили к преждевременному выходу из сделки на тренде и не уменьшали совокупную прибыль;
— уменьшить количество сделок.

Какие факторы нам могут помочь в этом?
Первое, что приходит на ум, это тот факт, что при тренде цена в среднем, несмотря на откаты, возрастает. Поэтому, чтобы устранить влияние откатов, можно сравнивать текущую цену закрытия не с ценой закрытия предыдущего интервала, а с ценой, которая была N интервалов назад (фактически эту операцию выполняет классический индикатор Момент (momentum) ). В этом случае незначительные по уровню откаты не будут приводить к выходу из позиции.

Запускаем тест, и получаем результат, в котором данные упорядочены по размеру  задержки N — переменная opt1.

Зачем тестировать торговые стратегии на истории?

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

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

Зачем тестировать торговые стратегии на истории?

Результат явно лучше, чем у предыдущей системы.

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

Таким образом, в результате нескольких простых телодвижений мы отбросили гениальную и заведомо убыточную идею и создали потенциально работоспособную стратегию. Добавление к ней некоторых дополнительных условий дает вполне рабочий алгоритм, обеспечивающий в долгосрочной перспективе путь небольшую, но стабильную прибыль.
★2
11 комментариев
входим и выходим лимитками? по цене клоуза предыдущего бара, предполагая, что опен текущей свечи равен клоузу предыдущей? что для дневок скорее исключение 
avatar
Алексей, можете сделать как угодно. Все в ваших руках.
Это просто пример, а не предложение к использованию.
И чтобы там ни происходило, но результат отражает именно то, что мы запрограммировали.
Николай Скриган, «результат отражает именно то, что мы запрограммировали.» мы в ответе за тех кого приручили 
avatar
Алексей, кончайте флудить. Я вам рассказываю КАК нужно делать, а не ЧТО делать.
На примере.
Можно переписать цену закрытия на цену открытия следующего бара, смысл от этого не изменится. Результат за счет гэпов на разрывах торговой сессии. если они есть, будет другим.
Николай Скриган, спасибо
avatar

Зачем тестировать торговые стратегии на истории?


А это следует из аксиоматики тех. анализа «история повторяется».

Единственный технический трейдинг, где не нужен бэктест это арбитраж. Но в принципе и на нем хочется оценить потенциальную прибыльность в ретроспективе.
avatar
chizhan, вы неточно поняли основной посыл. Дело не в том, повторяется рынок или нет. Дело в том, что нужно проверить, бредовая у нас идея или в ней есть рациональное зерно. 
В приведенном примере изначальная идея бредовая. Но ее развитие имеет рациональное зерно.
Согласен с Вашим заявлением, что тест нужен для того что бы выбросить неработающие системы. 
К сожалению мы все часто скатываемся к тому, что тест стратегий становится главным инструментом поиска рабочих стратегий, начинаем подгонять параметры, что бы тесты были хороши и тд.
avatar
Denis, это тоже бывает. И такой слепой поиск иногда дает неплохие результаты, особенно с использованием специальных приемов ТРИЗ. На некоторых из этих приемов мы остановимся при тестировании стратегий SWT-метода.
А иногда ошибка в коде вдруг приводит к выбросу в прибыльности за счет случайного выбора режима. К которому здравый смысл и логика никогда бы не привели.
Тесты на истории нужны для того, чтобы отбрасывать неработающие подходы к построению систем. Это похоже на программирование — там тоже есть тесты, и мы пишем программу так, чтобы она их проходила, а не пишем кучу программ и выбираем ту, которая лучше всего их проходит. При корректном, обоснованном подходе тест на истории просто показывает что мы нигде крупно не накосячили, и ожидается что его результаты будут ок в 9x% случаев. Ну как в программировании.
avatar

теги блога Николай Скриган

....все тэги



UPDONW