В предыдущих двух частях нашего исследования мы пришли к выводу, что
волатильность, в зависимости от того, на каком уровне она в определённый
момент находится, может служить нам подсказкой или даже лучше скажем
функцией, которая включает ту или иную стратегию под текущее состояние
рынка.
На этот раз расширим инструментарий. Будем измерять дневную и недельную волатильность на дневном таймфрейме. Можно конечно анализировать более полную картину со всех возможных таймфреймов, но в той версии NeuroShell DayTrader в которой проводится эксперимент нет такой возможности. А если использовать специальные для этого аддоны, то программа просто не сможет обработать такое количество данных. Оставим этот существенно масштабный эксперимент для реализации в MetaTrader 5 с помощью языка программирования MQL5. Там это возможно и тоже достаточно просто реализуется. В одной из будущих статей обязательно вернёмся к этому вопросу, пошагово рассмотрев разработку подобной схемы на языке MQL5, а сейчас проведём более грубый и быстро реализуемый вариант в программе NeuroShell DayTrader.
Итак. Попробуем построить торговую стратегию без нейронных сетей, чётко поставив условия для торговли. В качестве правил для входа и выхода будем использовать линию регрессии, а именно индикатор Linear Time Regression: Predicted Value (LinTimeReg PredValue).
На этот раз расширим инструментарий. Будем измерять дневную и недельную волатильность на дневном таймфрейме. Можно конечно анализировать более полную картину со всех возможных таймфреймов, но в той версии NeuroShell DayTrader в которой проводится эксперимент нет такой возможности. А если использовать специальные для этого аддоны, то программа просто не сможет обработать такое количество данных. Оставим этот существенно масштабный эксперимент для реализации в MetaTrader 5 с помощью языка программирования MQL5. Там это возможно и тоже достаточно просто реализуется. В одной из будущих статей обязательно вернёмся к этому вопросу, пошагово рассмотрев разработку подобной схемы на языке MQL5, а сейчас проведём более грубый и быстро реализуемый вариант в программе NeuroShell DayTrader.
Итак. Попробуем построить торговую стратегию без нейронных сетей, чётко поставив условия для торговли. В качестве правил для входа и выхода будем использовать линию регрессии, а именно индикатор Linear Time Regression: Predicted Value (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
***
Статьи из этой серии:
Модифицированные базовые индикаторы в NeuroShell DayTrader - Часть 1
Дополнение (Add-ons) Turning Points - Часть 2
Уровни волатильности - Часть 4
Комментариев нет :
Отправить комментарий