Стратегия торговли с двойной перемещающейся средней реверсией

Автор:Чао Чжан, Дата: 2023-12-04 16:39:13
Тэги:

img

Обзор

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

Принципы

Основным показателем этой стратегии является двойная скользящая средняя. Стратегия позволяет выбрать тип (SMA, EMA и т. д.), длину и источник цены (закрытая цена, типичная цена и т. д.) скользящей средней. После расчета двух групп скользящих средних, их направления определяются путем определения параметра реакции. Сигнал покупки генерируется, когда быстрая линия пересекает над медленной линией, и сигнал продажи генерируется, когда она пересекает ниже. Параметр реакции используется для регулирования чувствительности для определения поворотных точек.

Кроме того, стратегия также устанавливает условия для определения изменения направления и продолжающегося роста/падения, чтобы избежать генерирования неправильных сигналов. И она визуализирует рост и падение цен в разных цветах. Когда цены продолжают расти, линия movavg отображается в зеленом, а в красном цвете, когда цены падают.

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

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

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

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

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

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

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

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

Кроме того, подтверждение торговых сигналов другими вспомогательными индикаторами, такими как RSI и KD, также является идеей оптимизации.

Резюме

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


/*backtest
start: 2023-11-03 00:00:00
end: 2023-12-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle="MA_color strategy", title="Moving Average Color", overlay=true)

// === INPUTS

ma_type   = input(defval="HullMA", title="MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"])
ma_len    = input(defval=32, title="MA Lenght", minval=1)
ma_src    = input(close, title="MA Source")
reaction  = input(defval=2, title="MA Reaction", minval=1)

// SuperSmoother filter
// © 2013  John F. Ehlers
variant_supersmoother(src,len) =>
    a1 = exp(-1.414*3.14159 / len)
    b1 = 2*a1*cos(1.414*3.14159 / len)
    c2 = b1
    c3 = (-a1)*a1
    c1 = 1 - c2 - c3
    v9 = 0.0
    v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
    v9
    
variant_smoothed(src,len) =>
    v5 = 0.0
    v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len
    v5

variant_zerolagema(src,len) =>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)
    v10
    
variant_doubleema(src,len) =>
    v2 = ema(src, len)
    v6 = 2 * v2 - ema(v2, len)
    v6

variant_tripleema(src,len) =>
    v2 = ema(src, len)
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)              
    v7
    
variant(type, src, len) =>
    type=="EMA"     ? ema(src,len) : 
      type=="WMA"   ? wma(src,len): 
      type=="VWMA"  ? vwma(src,len) : 
      type=="SMMA"  ? variant_smoothed(src,len) : 
      type=="DEMA"  ? variant_doubleema(src,len): 
      type=="TEMA"  ? variant_tripleema(src,len): 
      type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) :
      type=="SSMA"  ? variant_supersmoother(src,len) : 
      type=="ZEMA"  ? variant_zerolagema(src,len) : 
      type=="TMA"   ? sma(sma(src,len),len) : sma(src,len)


// === Moving Average
ma_series = variant(ma_type,ma_src,ma_len)

direction = 0
direction := rising(ma_series,reaction) ? 1 : falling(ma_series,reaction) ? -1 : nz(direction[1])
change_direction= change(direction,1)
change_direction1= change(direction,1)

pcol = direction>0 ? lime : direction<0 ? red : na
plot(ma_series, color=pcol,style=line,join=true,linewidth=3,transp=10,title="MA PLOT")

/////// Alerts ///////

alertcondition(change_direction,title="Change Direction MA",message="Change Direction MA")


longCondition = direction>0
shortCondition = direction<0
if (longCondition)
    strategy.entry("BUY", strategy.long)
if (shortCondition)
    strategy.entry("SELL", strategy.short)



Больше