Разборки с волатильностью - Часть 3

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

На этот раз расширим инструментарий. Будем измерять дневную и недельную волатильность на дневном таймфрейме. Можно конечно анализировать более полную картину со всех возможных таймфреймов, но в той версии NeuroShell DayTrader в которой проводится эксперимент нет такой возможности. А если использовать специальные для этого аддоны, то программа просто не сможет обработать такое количество данных. Оставим этот существенно масштабный эксперимент для реализации в MetaTrader 5 с помощью языка программирования MQL5. Там это возможно и тоже достаточно просто реализуется. В одной из будущих статей обязательно вернёмся к этому вопросу, пошагово рассмотрев разработку подобной схемы на языке MQL5, а сейчас проведём более грубый и быстро реализуемый вариант в программе NeuroShell DayTrader.

Итак. Попробуем построить торговую стратегию без нейронных сетей, чётко поставив условия для торговли. В качестве правил для входа и выхода будем использовать линию регрессии, а именно индикатор Linear Time Regression: Predicted Value (LinTimeReg PredValue).


График с дневными барами и индикатор LinTimeReg PredValue

На рисунке представлен график с дневными барами и индикатор LinTimeReg PredValue с параметрами 15 и 5. Период охвачен от 1 января 2009 года до 22 июня 2010 года. Первый тест проведём без учёта волатильности, чтобы увидеть в сравнении, есть ли в этом преимущество или нет. В качестве входа в позицию будем использовать простое правило. Если текущее значение индикатора LinTimeReg PredValue ниже, чем его предыдущее значение, то продаём, а если выше, то покупаем. Сразу позволим оптимизатору выбрать наилучшие параметры для индикатора с целью максимизации прибыли.

Диапазоны для оптимизации параметров установим, как на картинке ниже:

Диапазоны для оптимизации параметров

Вот что получилось в итоге:

Результат после оптимизации параметров

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

В результате вот что получилось:

Эксперимент с торговыми условиями

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

Диапазоны для оптимизации показаны на картинке ниже:

Диапазоны для оптимизации параметров

В итоге получаем такой результат:

Результат после оптимизации параметров

Теперь мы видим, что кривая Equity уже не падает стремительно вниз, как в нашем первом тесте. Основная прибыль была получена в первой половине 2009 года, после чего кривая Equity пребывала в боковом движении. И только с начала 2010 года начался рост прибыли, но в довольно не стабильном режиме. Давайте измерим волатильность. Для этого выведем на график два индикатора ATR. Один будет нам показывать дневную волатильность, а другой недельную.

Дневная и недельная волатильность

В верхней части картинки два индикатора ATR с периодом 10. Красная линия показывает дневную волатильность. Синяя линия показывает недельную волатильность. Горизонтальными линиями отмечены уровни 0.0180, 0.0160 и 0.0140. Теперь мы видим, что большая часть прибыли была получена, когда дневной и недельный индикаторы ATR были выше уровня 0.0160. А когда линии индикаторов опустились ниже уровня 0.0160 и 0.0140, кривая капитала перестала расти. Это говорит о том, что нужно создать две или возможно даже три стратегии, которые будут подавать сигналы в зависимости от того, на каком уровне в данный момент времени находятся показатели индикаторов ATR. Допустим, в первой стратегии будет условие, что торговать только тогда, когда дневной индикатор ATR выше уровня 0.0160. Для второй стратегии дополнительное условие будет такое, торговать только, когда дневной индикатор ATR ниже уровня 0.0140, а недельный индикатор ATR выше уровня 0.0140. И для третьей стратегии условие, вступать в торговлю только тогда, когда недельный индикатор ATR ниже уровня 0.0140. В качестве эксперимента попробуем использовать в правилах для входа разные модификации индикатора LinTimeReg PredValue.

В первой стратегии применим условие, которое было в тесте выше. Зафиксируем параметры, так как они показали хороший результат именно там, где дневной индикатор ATR выше уровня 0.0160.
  • - Значение индикатора LinTimeReg PredValue(LinTimeReg PredValue) больше/меньше предыдущего значения.
  • - Значение индикатора ATR выше уровня 0.0160.

В оптимизации не участвует ни один параметр:

В оптимизации не участвует ни один параметр

Для второй стратегии применим три условия:

  • - Значение индикатора LinTimeReg PredValue(LinTimeReg PredValue) больше/меньше предыдущего значения.
  • - Дневной индикатор ATR ниже уровня 0.0140.
  • - Недельный индикатор ATR выше уровня 0.0140.

Установим диапазоны для оптимизации:

Установка диапазонов для оптимизации

В результате вот что получили:


На картинке отмечено прямоугольниками, на каких участках совершались сделки с учётом указанных условий. Для третьей стратегии применим немного иначе  модифицированный индикатор.

  • - Индикатор Momentum(LinTimeReg PredValue (LinTimeReg PredValue)) пересекает вниз/вверх нулевой уровень.
    - Недельный индикатор ATR ниже уровня 0.0140.

Вот диапазоны, которые были установлены для оптимизации параметров:

Диапазоны для оптимизации параметров

После оптимизации видим такой результат:


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

Для того, чтобы это всё реализовать, нужно создать ещё одну Trading Strategy Wizard. Только отличие от предыдущих действий будет в том, что в ней не нужно задавать условия для торговли, они ведь уже были созданы в трёх ТС (торговых стратегиях). Нужно взять из всех ТС сигналы и установить в одну.

Вот как это выглядит на вход в длинную позицию:

Направление всех сигналов в общий модуль торговой стратегии

Красными прямоугольниками отмечены вкладки, где всё аналогично.

Для входа в короткую позицию с точностью наоборот:

Направление всех сигналов в общий модуль торговой стратегии

Вот такие значения стоп-лоссов были выбраны оптимизатором.

Выбранные оптимизатором значения для стоп-лосс

Вот что получилось после всех произведённых выше действий:

Итоговый результат

На самом деле это всё можно назвать тщательной подгонкой под исторические данные. Скорее всего, именно так создаются "чёрные ящики". Чтобы создать работающую систему, нужно добавить дополнительные условия и провести более тщательный анализ, а именно:
  • - Во-первых, такого количества данных для дневного таймфрейма не достаточно.
  •  
  • - Во-вторых, трёх уровней для измерения волатильности тоже мало. Значения индикатора ATR поднимаются выше 0.0200, 0.0220, 0.0240… и даже 0.0360!!! (конец 2008 года). Это тоже нужно учитывать. 
  •  
  • - В-третьих, нужно создать мульти-таймфреймовую  систему, так как, когда уровень волатильности падает ниже уровня 0.0140 и даже ниже уровня 0.0050 (конец июня 2007 года) индикаторам на дневном таймфрейме не достаточно данных для того, чтобы развернуться и вовремя дать сигнал на открытие позиции.
  •  
  • - В-четвёртых, с учётом выше перечисленных пунктов можно ещё добавить в стратегию адаптивные нейронные индикаторы или даже нейронные сети.
Все эти правила, мы учтём в следующей части нашего исследования. А пока давайте зафиксируем настройки подобранные оптимизатором, развернём график от начала 2008 года и посмотрим сначала на результат без оптимизации, а потом попробуем оптимизировать параметры заново.

Результат без оптимизации на выборке от начала 2008 года до 24 июня 2010 года:

Результат на незнакомых данных без оптимизации

Результат с оптимизацией на той же выборке данных:

Результат с оптимизацией

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

***

Статьи из этой серии:

Модифицированные базовые индикаторы в NeuroShell DayTrader - Часть 1
Дополнение (Add-ons) Turning Points - Часть 2
Уровни волатильности - Часть 4

Комментариев нет :

Отправить комментарий