Создание простой и прибыльной автоматизированной системы

Рейтинг:
  1. 5
  2. 4
  3. 3
  4. 2
  5. 1
(2 голоса, в среднем: 5 из 5)

Я занимаюсь алгоритмической торговлей около 6 месяцев и следую по двум отдельным подходам – одна из стратегий БрутФорсинг, которая работает достаточно хорошо, но требует много ресурсов ($), серверов, электричества и так далее. Тем не менее, она даёт мне некоторые действительно аккуратные, торгуемые стратегии. Другой подход заключается в ручной разработке стратегий, что очень интересно и привлекательно если смотреть с творческой стороны.

Сегодня я просто хочу показать вам одну из самых простых стратегий, которые я когда-либо создавал (2 строки кода). Это предвзятая стратегия, применяемая к контракту E-Mini S&Pм500 Future (ES), торгуемая на CME, на дневных графиках, и имеет (без применения каких-либо определяющих размеров и компаундирования позиций) примерно такую же производительность, как если бы вы просто купили и удерживали S&P в течении последних 20 лет, но без массовых просадок, которые произошли, например, в 2008 году.

Как бы выглядела предвзятая стратегия по ES? Ну, мы ТОРГУЕМ только длинные позиции. Сначала я хотел посмотреть, что будет, если мы будем покупать всякий раз, когда дневной бар закрывается выше BollingerBand (Length), и менять нашу позицию всякий раз, когда дневной бар закрывается ниже BollingerBand (Length20, StdDev -2). Производительность была похожа на это …

Если Закрытие > BollingerBand (Close, 20, 2), то Покупаем на следующем открытии рынка;
Если Закрытие < BollingerBand (Close, 20, -2), то Продаем на следующем открытии рынка;

Ничего особенного, как и следовало ожидать. Мне нравится начинать с простых идей, а затем их развивать. Обычно я разрабатываю и совершенствую стратегию на небольшом фрагменте данных, и когда она будет работать на этом куске, я начинаю прогонять ее в форвард тестировании, которое подражает «живой» торговле. Однако, при стратегиях предвзятости, все по-другому – поскольку мы пытаемся использовать определенную характеристику рынка, в процессе разработки нам уже нужно видеть, существует ли эта характеристика и насколько она стабильна. Например, долгосрочная стратегия ES, проверенная в течение 2008 года, либо даст нам 0 сделок из-за фильтров, либо будет иметь ужасную производительность.

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

Тем не менее, давайте вернемся к нашей предвзятости. Просто быстро проверяйте, делает ли стратегия то, что она должна делать.

Похоже на это. Она покупает, когда цена закрывается выше ВВ и закрывает сделку, когда она закрывается ниже ВВ. Интересно, что в течение 2008 года и 2000 года эта стратегия принесла большой профит, но в последние годы стратегия застопорилась. Так как, а особенно в США, фондовые индексы в долгосрочной перспективе всегда должны расти (или капитализм пойдет на спад, и затем нам больше не нужно беспокоиться о торговле), давайте представим нашу предвзятость.

Мы покупаем, когда цена закрывается выше BB, и выходим из торговли, когда она закрывается внутри BB – это должно позволить нам фиксировать большие движения вверх, в то время как мы терпеливо ждем медвежьих рынков. Вот производительность.

Если Закрытие > BollingerBand (Close, 20, 2), то Покупаем на следующем открытии рынка;
Если Закрытие < BollingerBand (Close, 20, 2), то Продаем на следующем открытии рынка;

По-прежнему не о чем волноваться, но, по крайней мере, мы в настоящее время позитивны и поймали хороший пробег в конце во время выборов Трампа. Тем не менее, похоже, что S&P500 является устойчивым, но не делает огромных, неустойчивых ходов, по крайней мере, не вверх, поэтому наша стратегия прорыва не имеет большого смысла. Что будет иметь смысл для инструмента, который медленно, но неуклонно поднимается в волнах? Я уверен, что вы догадались, что правильным будет вход на откатах и выход, когда тренд становится перегруженным!

Другими словами, мы покупаем, когда цена закрывается ниже BB, и выходим, когда она закрывается выше BB. Вот как это работает.

Если Закрытие > BollingerBand (Close, 20, -2), то Покупаем на следующем открытии рынка;
Если Закрытие < BollingerBand (Close, 20, 2), то Продаем на следующем открытии рынка;

Мы зарабатываем гораздо больше денег, и сейчас мы находимся на веселой победной серии из 20-ти сделок, которая продолжается с 2009 года. Однако катастрофы 2008 и 2000 года действительно убили наш результат. Посмотрите на это.

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

Если Закрытие < BollingerBand (Close, 20, -2) и Закрытие > Average (Close, 200), то покупаем на следующем открытии рынка;
Если Закрытие > BollingerBand (Close, 20, 2), то продаем на следующем открытии рынка;

Ого! Смешной винрейт, но и не много сделок. 2008 просто исчез из отчета об эффективности, ноль сделок. 2001 и 2002 гг. дали нам небольшие управляемые потери.

Неплохо. Производительность приемлема, нам не нужно беспокоиться о комиссиях, поскольку мы не много торгуем, и средняя торговая прибыль довольно высокая (2400 долларов), как и следовало ожидать на дневных графиках, однако мы торгуем только 2-5 раз в год. В портфеле с множеством стратегий это приемлемо. Если это ваша единственная стратегия, хорошо … будете весело проводить время в ожидании. Поэтому я попытался перейти на более низкие таймфреймы, например, 4 часа, 2 часа, 1 час и т.д., используя День в качестве вторичного таймфрейма (торговля только тогда, когда дневной SMA200 ниже цены), но всё, что он сделал было увеличение нашего количества сделок при снижении нашей чистой прибыли и нашей средней прибыли за сделку. На данный момент это того не стоит, но можно продолжать и сочетать с другими идеями.

Теперь я чувствую, что мы могли бы поднять больше прибыли, ели бы захватили больше тенденций, когда они действительно происходили, поэтому я немного экспериментировал с выходами после (x) баров. В основном, я сделал 200 повторных тестов с теми же параметрами, за исключением выхода после 1 бара, 2 бара, 3 бара и т.д. Это также отличный способ проверить качество входных сигналов, кстати – просто посмотреть, сколько цена пройдет – 1 бар, 2 бара, 3 бара и т.д. после вашего входа. Как вы можете видеть в приведенной ниже таблице, наш сигнал всегда прибыльный, независимо от того, выходим мы после 1 или 200 баров. Это обнадеживает и довольно таки необычно.

Входы:
ExitBars (0);

Если Закрытие < BollingerBand (Close, 20, -2) и Закрытие > Average (Close, 200), то Покупаем На Следующем Открытии Рынка;
Если BarsSincEentry = ExitBars, то Продаем На Следующем Открытии Рынка;

Я не слишком доволен вариантами визуализации TradeStation, другие платформы делают это немного лучше, но ничего. Мы работаем с тем, что имеется. Здесь интересны две вещи: лучшая прибыль происходит примерно за 150 дней, что коррелирует с нашей предыдущей стратегией выхода на другом конце BB (среднее время ожидания 147 дней), но результаты кажутся выбросами (в идеале мы хотим иметь горы с плоскими вершинами на этом графике, чтобы обеспечить стабильность наших параметров, которые составляет приблизительно 20-30 дней в нижней части графика).

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

До сих пор мы ничего не оптимизировали. Мы добавили BollingerBand со стандартными настройками и скользящую среднюю 200 периода в качестве нашего фильтра. Я не хочу оптимизировать скользящее среднее, и если бы я это сделал, я бы сделал это только с шагом 50 (50, 100, 150, 200, 250, 300). Опыт говорит мне, что это того не стоит. Меня больше интересует длина BollingerBand и единицы стандартного отклонения. Оптимизация (шаги 5 для длины BB и этапы 0,5 для StdDev) приводит к тому, что длина BB сокращается до 10, а StdDev остается на уровне 2.

С этими настройками мы выжимаем еще 20 000 долларов на рынке и имеем еще более плавную кривую. Я не буду говорить этому «нет».

Затем я попытался оптимизировать верхнюю и нижнюю полосы отдельно (еще раз, чтобы увидеть, можно ли оставаться дольше в победителях), но это мало что изменило и добавило еще один оптимизируемый параметр. Давайте забудем об этом. Итак, вот наш окончательный код EasyLanguage.

Входы:
BBLength(10),
BBDev(2),
MALength(200);

Если Закрытие < BollingerBand (Close, BBLength, -BBDev) и Закрытие > Average (Close, MALength), то Покупаем На Следующем Открытии Рынка;
Если Закрытие > BollingerBand (Close, BBLength, BBDev), то Продаем На Следующем Открытии Рынка;

При максимальном просадке 10% и возвратом в 120% (без применения калибровки позиции) это довольно хорошая производительность. Buy & Hold предоставили бы нам 134% за тот же период, однако без компаундирования и с ужасающими просадками 2008 и 2001/2002 годов. Разумеется, теперь вам нужно будет добавить защитные стопы, чтобы не сломаться, когда рынок станет полностью кислым. Кроме того, эта стратегия торгует только 2-5 раз в год. Хотя с этим можно жить, так как есть только один оптимизированный параметр, эта стратегия не сделает нас богатыми и нуждается в большом капитале с одним контрактом в игре, чтобы торговаться. Вам понадобится диверсифицированный портфель из более чем 20 стратегий, подобных этой, чтобы сделать значимые результаты, не задумываясь о риске.

Теперь, если хотите, вы можете сделать анализ Walk-Forward по этой стратегии, или даже Cluster-Analysis, но нужно ли это. Эта стратегия работает, и будет продолжать работать до тех пор, пока не придет капитализм.

То, что я в основном хотел показать вам, заключается в том, что стратегии не должны быть сложными. Некоторые из моих дневных торговых стратегий имеют 10-20 строк кода и проходят все тесты надежности с развевающимися знаменами. И как видите, код не является трудным. Быть алготрейдером – значит быть творческим и организованным. И быть очень и очень любопытным в отношении тонкостей и характеристик рынков, на которые вы хотите разработать стратегии.

Или иногда, быть просто очень очень тупым. Только длинные стратегии по фондовым индексам, хорошее идея для начала. Или, может быть, попробовать акции Apple? Если вы можете разработать методы, чтобы узнать 1. что заставляет рынки тикать (анализ трендов, средняя реверсия?) и 2. насколько эффективны ваши входы, а затем иметь надлежащие методы тестирования надежности и организованный процесс для того, чтобы оставаться творческим и продуктивным, хорошо.. просто скажите это себе, ведь это может быть очень полезным.

П.С., я также одновременно учусь играть на фортепиано и говорить на японском языке, так что перестаньте оправдываться ;-).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *