Как создать стратегию, с примером.

Если вы хотите создать надежную стратегию, алгоритм может быть следующим:

I. Основные правила

1) Настройка параметров. Не настраивайте одновременно 2 или более параметров. Оптимизируйте только один параметр за раз. В противном случае вы не сможете получить хороший результат, потому что каждый параметр имеет собственный смысл, логику и особенности.

2) Используйте принцип бритвы Оккама на каждом этапе: «Проще, как правило, лучше». «Не следует привлекать новые сущности без крайней на то необходимости».

Чем проще ваша стратегия, тем вероятнее, что она будет успешной.

II. Подготовительный этап

1) Постарайтесь сформулировать свою идею и выбрать торговую модель. Кроме того, вы можете использовать любую из моих стратегий в качестве шаблона.

2) Отключите все фильтры (временные, волатильности, тренда), установите их значения в 0. Фильтры являются необязательными элементами стратегии, которые не имеют отношения к основной идее. Их следует рассматривать/добавлять отдельно, на последних этапах. После отключения фильтров производительность (PF, средний трейд) стратегии значительно падает, при этом количество сделок увеличивается. Поэтому->

3) -> вам необходимо отключить спред (установить его на минимально возможное значение), комиссионные и любые торговые расходы! Потому что на этом этапе они могут помешать вам увидеть реальную картину — работает ли ваша основная идея или нет. Если вы этого не сделаете, вы можете выбросить отличную стратегию или идею на самом начальном этапе разработки.

4) Отключите сложные правила выхода, такие как трейлинг-стоп и т. п. Оставьте только SL, TP и тайм-стоп (см. Параметр «StopBar»). Начальное значение тайм-стопа устанавливается равным макс. периоду, используемому в вашей торговой модели. Начальные значения SL и TP должны быть установлены в соответствии с типом стратегии. Значения SL/TP не должны быть слишком маленькими или слишком большими; значения должны соответствовать рабочему таймфрейму и ​​торговой логике вашей основной идеи. Если вы хотите создать MR стратегию, то значение SL должно быть в несколько раз больше значения TP. Для импульсной или пробойной стратегии значение SL должно быть равно или в несколько раз меньше значения TP.
Например, для моментум стратегии установите начальное значение TP равным 1.0 (ATR), SL — 0.5 (ATR).

5) Вторичные параметры, такие как период ATR (используемый для нормализации волатильности) или параметры смещения (PCh_OffsetPip, HL/2_OffsetPip) для модели PCh, анализируются и оптимизируются на последнем этапе. На данный момент, установите период ATR равным 5, установите смещения в 0.

6) Не используйте программное обеспечение TDS2 или любые другие медленные и точные методы тестирования на первых этапах разработки. Достаточно использовать быстрый метод «Open prices only». Это правило сэкономит вам много времени.

Пример. Я попытаюсь создать моментум стратегию.
Основная идея: После значительного движения цены в одном направлении,
рынок будет продолжать двигаться в том же направлении
Значительное движение цены выражается как последний закрытый бар,
размер которого превышает X от дневного ATR. TF - M30.
Я планирую входить в сделку рыночным ордером. Поэтому, я выключаю все. 
Я устанавливаю DailyATR_Period = 5, Тип модели = PriceAction, ExecutionType = MarketOrder,
PA_InitialHour = -1 (я не использую привязку ко времени, я использую каждый
последний закрытый бар), PA_Bars = 0 (я использую только последний бар),
PA_Size% ATR = 30 (это начальное значение, = 0.3 дневного ATR), StopLoss = 0,5, TakeProfit = 1,
TimeStop = 1 (потому что для генерации сигнала в моей идее я использую только 1 последний бар)

Итак, на этом этапе моя стратегия выглядит так (много сделок, низкая производительность):

PF=1.39, Avg.trade=2.8pips, Number of trades=2061, Total profit=587,
spread=0.2pips, no slippage, 'open prices only' method, from 2005 to 2018

Belkaglazer, How to create a trading strategy

Belkaglazer, How to create a trading strategy

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

III. Анализ параметров модели

Теперь пришло время проанализировать параметры модели. Попытайтесь их оптимизировать и проанализировать один за другим.

Устойчивый параметр модели может вести себя тремя способами:

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

Belkaglazer

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

Filter parameter

3) Он может работать следующим образом:

Model parameter

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

В моей модели у меня есть только два параметра: «PA_Bars» и «PA_Size% ATR».
Нет смысла оптимизировать первый, потому что я хочу использовать только последний закрытый бар.
Поэтому для оптимизации у меня есть только один параметр - PA_Size% ATR.
Давайте проанализируем его с 1 по 60 шаг 1:

Belkaglazer, How to create a trading strategy

Belkaglazer, How to create a trading strategy

Belkaglazer, How to create a trading strategy

Таким образом, параметр PA_Size% ATR ведет себя как фильтр 
(см. п. 2 III Анализ параметров модели).
Это хорошая новость, есть высокая вероятность, что это надежный параметр.

Я установил PA_Size% ATR на 36

IV. Тайм-стоп, SL, TP

1) Математическое (статистическое) преимущество точек входа и сделок уменьшается со временем удержания позиции. Поэтому необходимо использовать тайм-стоп (см. параметры «StopBar» и «StopHour»). Тайм-стоп — это временной стоп-лосс, который автоматически закрывает сделки в определенное время или по прошествии определенного количества баров. Увеличение значения тайм-стопа повышает эффективность стратегии. После определенного момента производительность не меняется или падает незначительно, эта точка является наилучшим значением. Но не забывайте, чем дольше время удержания позиции, тем выше торговый риск.

Time-stop

2) Оптимизируйте SL/TP один за другим. Не выбирайте слишком маленькие или большие значения, руководствуйтесь здравым смыслом и учитывайте логику своей основной идеи. В хорошей стратегии значения SL/TP обычно мало влияют на производительность

Давайте оптимизируем «StopBar» от 1 до 100 шагов 1:

Belkaglazer, How to create a trading strategy

Таким образом, таймстоп работает,
и нет смысла удерживать сделки дольше, чем ~ 43 бара.
Я установил его на 40.

'StopLoss' от 0.05 до 1 шаг 0.05:

Belkaglazer, How to create a trading strategy

Значения 0.2 .... 0.4 хороши. Я установил его на 0.30

'TakeProfit' от 0.1 до 2 с шагом 0.1:
Belkaglazer, How to create a trading strategy

Я установил 'TakeProfit' на 1.5

Теперь стратегия выглядит лучше:

Belkaglazer, How to create a trading strategy

PF=1.49, Avg.trade=8.1pips, Number of trades=1112, Total profit=906, 
spread=0.2pips, no slippage, 'open prices only' method, Alpari data from 2005 to 2018

V. Добавление фильтров

1) Сперва добавьте фильтр времени. Только диапазон. Не удаляйте определенные часы, минуты, чтобы предотвратить курвафиттинг. Как правило, М стратегии торгуются в течение активных часов, MR стратегии используются в часы спокойного рынка.

2) Попробуйте добавить другие фильтры (тренда, волатильности). Робастный фильтр может вести себя следующим образом:

Filter parameter

Разница между параметром модели и параметром фильтра заключается в том, что если вы исключите из стратегии фильтр, то стратегия будет показывать меньшую производительность, но все равно будет работать. Если вы исключите параметр модели, стратегия перестанет работать, а кривая эквити станет похоже на случайное блуждание.
Не следует выбирать какое-то конкретное значение, основываясь на красоте графика доходности. Необходимо исходить из того, что средний трейд должен быть достаточным, чтобы покрывать все торговые расходы и приносить прибыль. Фильтр тренда может вести себя по-разному, он может работать в широком диапазоне или работать подобно фильтру. Но если его отключить, то стратегия не сломается, она будет продолжать работать, хоть и с меньшей производительностью (это разница между параметрами модели и фильтра).

3) На этом этапе вы можете попытаться оптимизировать и проанализировать период дневного ATR.

В моей стратегии я установил «OrderHourStart» = 1 и «OrderHourStop» = 23. 
Я собираюсь торговать моментум и я не хочу торговать им во время низкой ликвидности.

Настройка DayOfWeek:

Belkaglazer, How to create a trading strategy

Итак, лучшие дни для торговли - вторник, среда и четверг. 
Понедельник - день низкой волатильности, поэтому импульс не работает.
Пятница изобилует новостями, поэтому цена достигает моего короткого SL.
Я установил «OrderDayOfWeek» на 234

Попытка добавить фильтр тренда. Оптимизация «EMA_Period» с -32 до 32, шаг 2, TF = Daily

Belkaglazer, How to create a trading strategy
Фильтр работает правильно. Для моей импульсной стратегии торговля по тренду
более выгодна, чем торговля против тренда. Я установил «EMA_Period» на 10.

Теперь моя стратегия выглядит так:

Belkaglazer, How to create a trading strategy

PF=1.93, Avg.trade=14.5pips, Number of trades=518, Total profit=749, 
spread=0.2pips, no slippage, 'open prices only' method, Alpari data from 2005 to 2018

Осталось 518 сделок, больше фильтровать нечего)))

VI. Последние штрихи

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

2) Если это необходимо, добавьте сложные правила выхода.

3) Если вы используете модель PCh, попробуйте оптимизировать параметры «PCh_OffsetPip», «HL/2_OffsetPip».

TDS2 бэктест моей стратегии, переменные спреды, задержка 200-300ms, проскальзывания,
симуляция реального исполнения, комиссия: $7 на круг. 

Belkaglazer, How to create a trading strategy

PF=1.92, Avg.trade=14.4pips, Number of trades=520, Total profit=748, 
99.9% quality, Dukascopy data from 2005 to 2018