Блог им. Quantrum

Простой event-driven бэктестер, или как быстро потерять деньги на бинарных опционах

В этот раз сделаем простой бэктестер. Начнём с бинарных опционов, так как у них примитивный принцип работы. Мы делаем ставку, а она на следующей свече выиграет или проиграет.

Также посмотрим на работу стратегии с Мартингейлом и опасность, которую она несёт. Часто, есть периоды, когда подобные стратегии рисуют красивый график с прибылью. Но заканчиваются чудеса молниеносно быстро, несколькими ставками в максимальный убыток.

Для проверки, проведём тесты на минутном таймфрейме за июль 2018 года на паре EUR/USD. Поможет нам в этом Jupyter и Python 3.6.

Событийно-ориентированный бэктестер

Это относительно медленный бэктестер, который позволяет тестировать историю цен исключая заглядывание в будущее. Для его работы нам требуется:

  • Класс (Account), отвечающий за баланс и обработку ставки.
  • Функция (стратегия), вызываемая на каждой свече, работающая с прошлой историей.
  • Pandas датафрейм с OHLC историей цен и цикл перебора тиков.

Account

Здесь всё просто. Следим за балансом, принимаем и проверяем ставки. А также накапливаем последовательный убыток.

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

Стратегии

Эти функции мы будем использовать в цикле, чтобы через одну из них прошли все имеющиеся ценовые бары. Дополнительно, сопроводим каждый бар объектом account и историей цен без будущего. Тест останавливается при потере капитала.

Простая стратегия с сигналом, на основании текущей свечи и возможностью подключения мартингейла:
Код доступен на Quantrum.me

Стратегия, фильтрующая тренд:
Код доступен на Quantrum.me

Стратегия возврата к среднему:
Код доступен на Quantrum.me

Цикл перебора истории

Осталось подготовить данные и запустить. Используем цикл, так как скорость его работы равна скорости использования метода pd.DataFrame().apply(). И, в отличии от метода, нам будут видны возникающие ошибки. Дополнительно добавим остановку при получении ошибки.
Код доступен на Quantrum.me

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

Брокер бинарных опционов всегда накладывает дополнительные ограничения на игроков. Мы учтём только часть.

  • Начальный капитал 100К руб.
  • Минимальная ставка 1000 руб.
  • Коэффициент прибыли 0.82%.
  • Пара EUR/USD.
  • Принимаем решение каждую минуту.
  • Дожи фильтруем при разнице менее 0,005%.
  • Когда используем Мартингейл, то должны покрыть убыток и получить прибыль первой ставки.
  • Максимальная ставка при Мартингейле — 20К руб. Если больше, то обнуляем накопленный убыток и начинаем с минимальной ставки.
  • Ограничим время ставок. Будем играть в рабочие дни с понедельника до пятницы в рабочие часы с 10 до 18 (8 часов).

Что мы не можем учесть:

  • Остановку приема ставок в любое время, если брокеру не выгодна ситуация на рынке.
  • Изменение коэффициента прибыли с течением времени.

Простые тесты

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

Простой event-driven бэктестер, или как быстро потерять деньги на бинарных опционах

Для проверки запустим тест без Мартингейла с самой простой стратегией, и посмотрим, как капитал растает к концу третьего дня.

Простой event-driven бэктестер, или как быстро потерять деньги на бинарных опционах

Добавление мартингейла позволяет слить капитал к середине первого дня.

Простой event-driven бэктестер, или как быстро потерять деньги на бинарных опционахУдача была на стороне брокера. Попробуем усложнить себе жизнь.

Фильтр по минутному тренду

Теперь добавим простые технические индикаторы, показывающие направление тренда. Они запаздывают, но должны помочь отфильтровать неблагоприятные моменты.

Простой event-driven бэктестер, или как быстро потерять деньги на бинарных опционахКак мы видим, с мартингейлом удалось протянуть два дня. Без него — четыре. Но тренд на средних нам не помог.

Возврат к среднему

В заключение рассмотрим ставки по стратегии возврата к среднему. Проверяем максимум и минимум за последние 200 минут. Для ставки на рост проверяем, чтобы цена была не далее 15% от максимума, а RSI(3) показывал перепроданность. И что мы видим? Мы продержались 22 торговые сессии и даже вышли в плюс.

Простой event-driven бэктестер, или как быстро потерять деньги на бинарных опционах

Добавление мартингейла с ограничением максимальной ставки до 20К руб. приносит нам 80% прибыли.

Простой event-driven бэктестер, или как быстро потерять деньги на бинарных опционах

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

Все наблюдения

Ниже таблица со всеми результатами:

Простой event-driven бэктестер, или как быстро потерять деньги на бинарных опционах

Колонки:

  • balance — итоговый результат.
  • max drawdown, % — максимальная просадка в процентах.
  • max win — максимальный выигрыш.
  • max loss — максимальный проигрыш.
  • bets — количество ставок.
  • wins — количество выигрышных ставок.
  • loss — количество проигрышных ставок.
  • lifetime — количество часов жизни капитала.

Сокращения:

  • RSI, SMA, MACD — названия индикаторов.
  • Reversal — возврат к среднему.
  • Min/Max — торговля рядом с минимумами и максимумами.
  • Mart — мартингейл.
  • Reverse candle — разворот сигнала на противоположный.

Заключение

Тесты показали, что стабильность тренда на минутках предсказать очень тяжело. А вот развороты дались легче. Возврат к среднему рядом с максимумами/минимумами позволил даже заработать. Мартингейл даёт возможность быстро вернуться к прибыли, но на длинных дистанциях стабильно ведёт к полной потере счёта.

Бэктестер доработаем в следующих статьях и реализуем механизм торговли акциями.

В комментариях задавайте вопросы и выражайте своё мнение.

Александр Румянцев
Автор на Quantrum.me
Telegram-канал: @quantiki

★8
2 комментария
1. >  Добавление мартингейла позволяет слить капитал к середине первого дня.
+ RSI и, вуаля:
2. > Добавление мартингейла с ограничением максимальной ставки до 20К руб. приносит нам 80% прибыли. 
И кто-то ещё говорит, что теханализ не работает )).
avatar
Мартин вещь хорошая, но таки у него всего одна проблема: клюёт как воробушек, обсирается как слон.
avatar

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

....все тэги



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