Стратегия двойной скользящей средней

Автор:Чао Чжан, Дата: 2024-01-17 17:45:45
Тэги:

img

Обзор

Эта стратегия использует двойные скользящие средние, в частности 8-периодные и 21-периодные.

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

Принципы

Основа этой стратегии заключается в перекрестке краткосрочных и долгосрочных скользящих средних. Более короткий MA может быстрее улавливать изменения тренда, в то время как более длинный MA имеет лучший эффект фильтрации шума. Установление восходящего тренда предполагается, когда более короткий MA пересекает более длинный MA, что приводит к длинному сигналу; установление нисходящего тренда предполагается, когда более короткий MA пересекает ниже более длинного MA, что приводит к короткому сигналу.

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

В частности, логика генерации торговых сигналов:

  1. Вычислить простые скользящие средние за 8 и 21 период
  2. Выявление перекрестных сигналов между двумя
  3. Вычислить наклон 21-периодного скользящего среднего с использованием арктагентной функции atan
  4. Сделайте длинные сигналы только тогда, когда наклон превышает заданный положительный порог
  5. Создавать короткие сигналы только тогда, когда наклон падает ниже заданного отрицательного порога

Анализ преимуществ

Преимущества этой стратегии включают:

  1. Идея стратегии проста и легко понять/внедрить
  2. Включение индекса наклона помогает отфильтровать периоды, не связанные с трендом, и улучшает качество сигнала
  3. Использование двойных скользящих сред позволяет обоим использовать свои сильные стороны, повышая прочность
  4. Параметры могут регулироваться в соответствии с различными инструментами торговли
  5. Простая реализация программы способствует дальнейшей оптимизации

Анализ рисков

Эта стратегия также сопряжена с некоторыми рисками:

  1. Больше ложных сигналов может возникнуть во время бурных колебаний рынка
  2. Само перекрестное пересечение имеет тенденцию производить некоторые ложные сигналы
  3. Существует некоторая отставание, не в состоянии мгновенно улавливать изменение тренда

Некоторые способы оптимизации на основе этих рисков:

  1. Корректировка параметров МО в соответствии с характеристиками рынка
  2. Оптимизировать порог наклона для повышения прочности
  3. Добавление механизмов остановки потерь для контроля одиночных потерь
  4. Включить другие индикаторы для фильтрации сигналов
  5. Использование адаптивных параметров для улучшения надежности

Руководство по оптимизации

Некоторые направления для оптимизации стратегии:

  1. Использование адаптивных МА, корректировка параметров на основе волатильности
  2. Включить анализ объема, чтобы избежать ошибок при консолидации
  3. Добавление индекса волатильности для повышения качества и своевременности
  4. Добавить машинное обучение для автоматической оптимизации параметров
  5. Использование глубокого обучения для обнаружения более сложных нелинейных моделей

Заключение

В целом, эта стратегия двойного MA проста и практична. Захватывая различные характеристики тренда через два параметра периода и объединяя их для генерации торговых сигналов. Между тем, включение порога наклона улучшает качество сигнала. Эта стратегия может служить базовой для расширений, с большим пространством и потенциалом оптимизации.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//written by sixpathssenin
//@version=4
strategy(title="Dual Moving Average",initial_capital=10000,overlay=true)

ma1= sma(close,8)
ma2= sma(close,21)

angleCriteria = input(title="Angle", type=input.integer, defval=7, minval=1, maxval=13)

i_lookback   = input(2,     "Angle Period", input.integer, minval = 1)
i_atrPeriod  = input(10,    "ATR Period",   input.integer, minval = 1)
i_angleLevel = input(6,     "Angle Level",  input.integer, minval = 1)
i_maSource   = input(close, "MA Source",    input.source)

f_angle(_src, _lookback, _atrPeriod) =>
    rad2degree = 180 / 3.141592653589793238462643  //pi 
    ang = rad2degree * atan((_src[0] - _src[_lookback]) / atr(_atrPeriod)/_lookback)
    ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)

plot(ma1,color=#FF0000)
plot(ma2,color=#00FF00)

crosso=crossover(ma1,ma2) 
crossu=crossunder(ma1,ma2)

_lookback = 15

f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed
    
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)

long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)


if(long)
    strategy.entry("Long",strategy.long)
if(short)
    strategy.entry("short",strategy.short)
    


Больше