Блог им. Quantrum

Бэктестинг: торговля на импульсе с помощью ATR

Индикатор ATR (Average True Range) показывает среднюю величину изменения цены внутри дня за указанный период. Отлично подходит для выбора уровней стопов. Также индикатор показывает рост волатильности в активе, когда сохраняет высокие значения.

Работаем на Quantopian (см. сюда), код пишем на Python. Проверяем стратегии:

  • Как есть.
  • Фильтр по SMA200.
  • Торговля в двух направлениях.
  • Аналог стоп-приказа.
  • Фильтр по объему.

Немного об ATR

ATR (Average True Range) широко известен среди трейдеров, использующих технический анализ. Индикатор рассчитывается на заданный период и использует значения максимума цены, минимума цены и цены закрытия. Является прекрасным фильтром для отбора акций для внутридневной торговли. Подходит для определения уровня установки стоп-приказа, обычно это 1-3 ATR от цены входа.Бэктестинг: торговля на импульсе с помощью ATR

По ATR можно определить рост волатильности (изменчивости) цены, что в свою очередь указывает на волнения на рынке. Высокая волатильность является индикатором роста цен на опционы.

Стандартный период ATR: 14

Гипотеза

ATR — это средний диапазон изменения цены учитывающий максимум и минимум. Основываясь на этом, предположим, что при резком изменении цены более 1х ATR, мы получаем сигнал об импульсе на рынке в определенном направлении. Импульс возможен, когда рынок что-то узнал и начинает двигаться в направлении своих ожиданий. Если цена изменилась вверх — время покупать, если вниз — закрывать позицию.

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

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

При росте волатильности мы можем не получить сигнал на закрытие, так как цена может снижаться меньшими свечами, чем текущий ATR. Это против нас.

Условия тестирования:

  • SPY, IWM.
  • c 01/01/2004 до 13/01/2017 (13 лет).
  • торгуем спустя 1 час после открытия рынка.

Что надо знать

Библиотека TA-Lib на индикаторе ATR снова проявила свои проблемы и мы получаем разные сигналы при обработке разных периодов. Постоянство появилось после увеличения анализируемого периода выше 100 дней. Ниже графики с пометками о величине истории. Размах отклонений впечатляет, не так ли?

Бэктестинг: торговля на импульсе с помощью ATR30 дней
 Бэктестинг: торговля на импульсе с помощью ATR60 дней
 Бэктестинг: торговля на импульсе с помощью ATR100 дней
 Бэктестинг: торговля на импульсе с помощью ATR500 дней

Как есть

В этом тесте проверим, как индикатор работает сам по себе, без настройки и подкрутки. Посмотрим, как на него влияет время начала торговли: на открытии рынка или спустя 1 час. ATR считаем за последние 14 дней, помним, что величина истории для анализа должна быть более 100 дней.

Бэктестинг: торговля на импульсе с помощью ATRОткрытие рынка
Бэктестинг: торговля на импульсе с помощью ATRСпустя 1 час

На графиках видно, что стратегия сама по себе работает очень прилично — 141% доходности против -11% просадки на SPY. Результаты восхитительны. Проверять сигналы надо через 1 час после открытия, иначе волатильность первого часа сведет на нет все старания. На рынке мы находимся всего 50% времени. Результаты внизу статьи. Дополнительно в результатах добавлены показатели тестов DIA и IWM.

Код доступен на Quantrum.me 

Фильтр по SMA200

В этот раз будем фильтровать открытие позиций по положению цены над 200-дневной скользящей средней (SMA200). В техническом анализе принято так, что если цена над SMA200 — это бычий тренд, под ней — медвежий. Теперь мы будем открывать позиции только во время бычьего тренда.

Бэктестинг: торговля на импульсе с помощью ATRSPY
Бэктестинг: торговля на импульсе с помощью ATRIWM

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

Код доступен на Quantrum.me.

Торгуем в двух направлениях

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

Бэктестинг: торговля на импульсе с помощью ATR

Код доступен на Quantrum.me.

Может быть, стопы?

Я решил заменить стоп-приказы на сигнал увеличения ATR относительно значения на момент открытия позиции. Например, мы открываем позицию с ATR=$1, а закроем при ATR=$2. Почему? Потому что сигнал на закрытие при резком падении цены хорош, только вот незадача, если ATR вырастет до того как цена сделает резкое движение (широкий диапазон хода цены между максимумом и минимумом, при закрытии рядом с открытием), то мы так и останемся в позиции. Теперь сам рост волатильности для нас будет являться сигналом на выход.

Бэктестинг: торговля на импульсе с помощью ATRSPY
Бэктестинг: торговля на импульсе с помощью ATRIWM

Результаты оказались удивительными. SPY не показал изменений, предположу, по причине меньшей волатильности. А вот более изменчивый IWM показал улучшение доходности в 2,5 раза и незначительное снижение просадки.

 

Фильтр по объему

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

Попытка фильтровать по вчерашнему объему, чтобы он был выше среднего за последние 50 дней, привели к незначительным улучшениям/ухудшениям. По этой причине было решено фильтровать по росту объема, а именно вчерашний объем должен быть больше, чем в предыдущий день.

Бэктестинг: торговля на импульсе с помощью ATRSPY
Бэктестинг: торговля на импульсе с помощью ATRIWM

 

Итоговые результаты не впечатляют. Удалось отфильтровать просадку IWM и получить 9 прибыльных сделок из 11, что тоже результат.

Алгоритм имеет право на существование, но его необходимо дорабатывать. Например, открывать позиции на следующий день после сигнала, если объем в день сигнала был больше среднего в 2 раза.

Код доступен на Quantrum.me.

Результаты

Стратегия Время торгов Кол-во сделок PnL дни PnL сделки Доходность Просадка
Купи-Держи Open 53/0 - 100% 160.1% -54.9%
Как есть: SPY Open+1 35/35 24% 71.4% 141% -10.7%
Как есть: DIA Open+1 45/45 23% 66.7% 99.8% -18.8%
Как есть: IWM Open+1 27/27 17% 70.3% 84% -54.7%
SMA200: SPY Open+1 32/32 24% 71.9% 73% -12.9%
SMA200: IWM Open+1 25/25 19% 72% 102.4% -14.1%
Обе стороны: SPY Open+1 35/35 2% 48.6% 72.8% -42.9%
Стоп-лосс: SPY Open+1 35/35 24% 71.4% 141% -10.7%
Стоп-лосс: IWM Open+1 35/35 19% 71.4% 190% -34.3%
Объем: SPY Open+1 25/25 22% 64% 65.8% -12.6%
Объем: IWM Open+1 11/11 25% 81.8% 90.8% -14.1%
  • Время торгов — время, когда алгоритм начинает торговать: Open — открытие рынка, Open+1 — через 1 час после открытия рынка.
  • Кол-во сделок — количество сделок на покупку и продажу. В поле указаны Покупки/Продажи.
  • PnL дни — отношение прибыльных дней к убыточным. Если прибыльных больше — значение положительное.
  • PnL сделки — процент прибыльных сделок к общему количеству.

Заключение

Индикатор ATR на удивление дает очень хорошие результаты и позволяет своевременно открывать прибыльные позиции. Отлично показал себя в голом виде на SPY и при фильтрации относительно SMA200 и объема на IWM. Более 70% прибыльных сделок — это отличный результат.

Улучшать алгоритм можно в нескольких направлениях: объем и смещение дня реакции на сигнал, сокращение дней удержания позиции и т.п.

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

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

--
Александр Румянцев aka «iamraa»
Автор Quantrum.me

★25
16 комментариев
Нет, я не позволю себя обмануть как бедный Генрих! (Музыка со столба, Пелевин)
avatar
Спасибо.
PS поддержите человека лайками и комментами за проделанную работу, что вы как не родные
avatar
Иван П, плюсиками поддержал, только вопрос автору есть: все индикаторы с момента их создания были уже тысячи раз протестированы. Для чего проходить этот путь еще раз?
avatar
Антон Иванов, искал единый источник, с кратким описанием сути работы каждого индикатора, с полным исходным кодом, с возможностью протестировать самостоятельно, с возможностью бесплатного запуска на популярном брокере, с последовательно разжеванной информацией с чего начать, куда идти, что делать, какие последствия и почему. Не нашел. Начал документировать для себя. Начал публиковать свои записи.
Было бы интересно посмотреть ваши тесты трендовых индикаторов.
avatar
Kmv, в моей ленте есть код с использованием средних и macd. Более любопытные алгоритмы пока не публикую. Вырабатываю стиль изложения и структуру подачи материала. 

45 сделок за 13 лет???

=D Можно в КВН смело с таким номером...

avatar
ch5oh, есть результаты даже с 11 сделками за 13 лет с доходностью в 90% и посадкой всего -14%. А ведь все оставшееся время можно торговать другие сигналы. Капитал свободен, им можно управлять. 
Александр Румянцев, тесты с 11 сделками — вообще не показательны. Кидая монетку 11 раз можно случайно словить 80% орлов… Но это не значит, что есть какое-то преимущество. Я бы вообще не доверял ни одному тесту, где меньше 200 сделок. 
avatar
Alex Hurko, согласен с вами. Можно взять исходный код и самостоятельно провести тесты на 20 других активах. На основании этого сделать свое заключение. Ведь ценность данной статьи в исходном коде и бесплатной платформе с данными, а не в граале ATR. 

Александр Румянцев, мне код не интересен:) подход с маленьким количеством сделок — он неправильный. На 50 сделок я могу на спае нарисовать 90% win rate, только вот от жизни это далеко будет. 

avatar
Alex Hurko, согласен. Чем больше измерений, тем лучше. В прошлом можно нарисовать вообще все что угодно. Подскажите, как сделать больше сделок, когда мало сигналов?
Александр Румянцев, можно потанцевать с бубном, но зачем? Если сделок реально мало, то, может, лучше отказаться от этого алгоритма? Дело даже не в качестве бектеста, а в рациональности использования денег. Зачем морозить деньги и ждать, когда придет сигнал? Да, можно заложиться в облигации или банк, но не всегда можно быстро получить средства обратно…
avatar
Alex Hurko, благодарю за пояснение. Есть ли смысл собирать во едино стратегии с низкой частотой для управления портфелем? Каждая стратегия дает сигналы редко, но совокупно сигналы постоянны и капитал все время работает. Или необходимо использовать только монолитные стратегии с высокой частотой сигналов?
Александр Румянцев, строить торговлю на системах с низкой частотой сделок, конечно, не стоит. Если есть основа из систем(ы) с высокой частотой сделок, то можно к ней добавлять низкочастотные системы, которым вы доверяете. . 
avatar

теги блога Александр Румянцев

....все тэги



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