Estrategia de señal cruzada de media móvil

El autor:¿ Qué pasa?, Fecha: 2024-01-08 15:54:32
Las etiquetas:

img

Resumen general

Esta estrategia calcula y traza diferentes tipos de medias móviles para implementar señales cruzadas de medias móviles para generar señales de compra y venta.

Principio de la estrategia

  1. La estrategia permite la selección de diferentes tipos de medias móviles, incluyendo SMA, EMA, WMA, etc.
  2. La estrategia calcula la media móvil principal y también permite la selección de una segunda media móvil.
  3. Juzgar la tendencia del mercado basándose en la situación cruzada entre la media móvil principal y la segunda media móvil.
  4. Cuando la media móvil principal cruza por encima de su propia media móvil del ciclo especificado, se genera una señal de compra; cuando la media móvil principal cae por debajo de su propia media móvil del ciclo especificado, se genera una señal de venta.
  5. Por lo tanto, por la situación cruzada de las medias móviles, la tendencia del mercado puede juzgarse con mayor claridad.

Ventajas de la estrategia

  1. Tipos de medias móviles personalizables para satisfacer diferentes necesidades.
  2. Añadir un segundo promedio móvil para señales más claras.
  3. Ciclos personalizables de medias móviles, adecuados para diferentes ciclos de tiempo.
  4. Rendering de color suave para gráficos más claros.
  5. Utiliza un mecanismo de señal cruzada para juzgar con precisión las tendencias.

Riesgos y optimización de la estrategia

  1. Los promedios móviles tienen propiedades de retraso, pueden ocurrir señales falsas.
  2. La configuración inadecuada de los ciclos de promedios móviles puede conducir a oportunidades de negociación perdidas.
  3. Se recomienda utilizar otros indicadores, como la energía del volumen de negociación, para la verificación a fin de reducir los riesgos.
  4. Considere cambiar la media móvil de la señal a media de rizos para mejorar la precisión de la señal.
  5. Los modelos como LSTM se pueden utilizar para optimizar la estrategia.

Conclusión

La idea general de la estrategia es clara, utilizando el principio de cruce de media móvil para juzgar la tendencia del mercado, parámetros personalizables para satisfacer diferentes necesidades. También hay algunos problemas, pero pueden mejorarse optimizando modelos y parámetros. En general, esta estrategia es un representante típico de las estrategias comerciales basadas en medias móviles.


/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Moving averages-Strategy", overlay=true)
//Created by user ChrisMoody 4-24-2014
//Plots The Majority of Moving Averages
//Defaults to Current Chart Time Frame --- But Can Be Changed to Higher Or Lower Time Frames
//2nd MA Capability with Show Crosses Feature

//inputs
src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above",defval="D")
len = input(20, title="Moving Average Length - LookBack Period")
atype = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc = input(true,title="Change Color Based On Direction?")
smoothe = input(2, minval=1, maxval=10, title="Color Smoothing - 1 = No Smoothing")
doma2 = input(false, title="Optional 2nd Moving Average")
len2 = input(50, title="Moving Average Length - Optional 2nd MA")
atype2 = input(1,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA")
cc2 = input(true,title="Change Color Based On Direction 2nd MA?")
warn = input(false, title="***You Can Turn On The Show Dots Parameter Below Without Plotting 2nd MA to See Crosses***")
warn2 = input(false, title="***If Using Cross Feature W/O Plotting 2ndMA - Make Sure 2ndMA Parameters are Set Correctly***")
sd = input(false, title="Show Dots on Cross of Both MA's")


res = useCurrentRes ? timeframe.period : resCustom
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : tema
//2nd Ma - hull ma definition
hullma2 = wma(2*wma(src, len2/2)-wma(src, len2), round(sqrt(len2)))
//2nd MA TEMA definition
sema1 = ema(src, len2)
sema2 = ema(sema1, len2)
sema3 = ema(sema2, len2)
stema = 3 * (sema1 - sema2) + sema3

avg2 = atype2 == 1 ? sma(src,len2) : atype2 == 2 ? ema(src,len2) : atype2 == 3 ? wma(src,len2) : atype2 == 4 ? hullma2 : atype2 == 5 ? vwma(src, len2) : atype2 == 6 ? rma(src,len2) : tema

out = avg 
out_two = avg2

out1 = request.security(syminfo.tickerid, res, out)
out2 = request.security(syminfo.tickerid, res, out_two)

ma_up = out1 >= out1[smoothe]
ma_down = out1 < out1[smoothe]

col = cc ? ma_up ? lime : ma_down ? red : aqua : aqua
col2 = cc2 ? ma_up ? lime : ma_down ? red : aqua : aqua

circleYPosition = out2

plot(out1, title="Multi-Timeframe Moving Avg", style=line, linewidth=4, color = col)
plot(doma2 and out2 ? out2 : na, title="2nd Multi-TimeFrame Moving Average", style=circles, linewidth=4, color=col2)
plot(sd and cross(out1, out2) ? circleYPosition : na,style=cross, linewidth=5, color=yellow)


longCondition = crossover(out1, out1[smoothe])
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(out1, out1[smoothe])
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

Más.