La estrategia de avance de oscilación de media móvil dual calcula dos promedios móviles de diferentes períodos para formar un canal y juzgar la tendencia oscilante de los precios.
Las principales etapas de esta estrategia son:
Calcular dos promedios móviles, uno con un período más corto y otro con un período más largo.
Se añade un ATR por encima y por debajo del MA más corto para formar un canal.
Una señal de compra se genera cuando el precio rompe el canal hacia arriba. Una señal de venta se genera cuando el precio rompe el canal hacia abajo.
Las señales comerciales válidas solo se generan cuando el avance a corto plazo se alinea con la dirección de la tendencia principal.
Al seguir estos pasos, esta estrategia captura puntos de avance en las tendencias oscilantes y evita señales falsas al referirse a la tendencia principal.
Las ventajas de esta estrategia:
El canal de doble MA refleja el rango actual de oscilación de los precios.
El parámetro ATR permite que el rango del canal realice un seguimiento de la volatilidad del mercado en tiempo real.
El filtrado de tendencias generalizadas evita señales falsas en los mercados oscilantes.
Las reglas son sencillas y fáciles de entender, adecuadas para aprender e investigar.
Los riesgos:
Los avances fracasados pueden llevar a perder buenas oportunidades, que pueden mitigarse mediante la obtención de beneficios y la reentrada.
El juicio de tendencia principal tiene un retraso de tiempo y no puede eliminar todas las señales falsas.
El stop loss puede penetrar en mercados volátiles y puede ajustar el ATR dinámicamente.
Maneras de optimizar esta estrategia:
Optimizar los parámetros de la MA para diferentes productos.
Optimice el parámetro ATR para controlar mejor la volatilidad.
Añadir filtros adicionales como indicadores de volumen y volatilidad para evitar aún más señales falsas.
Utilice el aprendizaje automático para optimizar los parámetros automáticamente.
Esta estrategia de avance de oscilación de doble MA captura las tendencias oscilantes a través del canal de doble MA y el filtrado de la corriente principal. Con sus reglas simples y claras, es un excelente ejemplo para aprender estrategias comerciales de avance.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Anuj4912 //@version=4 strategy("Anuj4912", overlay=true) res = input(title="Time Frame", defval="120") Factor=input(1, minval=1,maxval = 100) Pd=input(1, minval=1,maxval = 100) tp = input(500,title="Take Profit") sl = input(400,title="Stop Loss") Up=hl2-(Factor*atr(Pd)) Dn=hl2+(Factor*atr(Pd)) MUp=request.security(syminfo.tickerid,res,hl2-(Factor*atr(Pd))) MDn=request.security(syminfo.tickerid,res,hl2+(Factor*atr(Pd))) Mclose=request.security(syminfo.tickerid,res,close) TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn MTrendUp=Mclose[1]>MTrendUp[1]? max(MUp,MTrendUp[1]) : MUp MTrendDown=Mclose[1]<MTrendDown[1]? min(MDn,MTrendDown[1]) : MDn Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1) Tsl = Trend==1? TrendUp: TrendDown MTrend = Mclose > MTrendDown[1] ? 1: Mclose< MTrendUp[1]? -1: nz(MTrend[1],1) MTsl = MTrend==1? MTrendUp: MTrendDown linecolor = Trend == 1 ? green : red plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend") Mlinecolor = MTrend == 1 ? blue : orange plot(MTsl, color = Mlinecolor , style = line , linewidth = 2,title = "Main SuperTrend") plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0) plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0) up = Trend == 1 and Trend[1] == -1 and MTrend == 1 down = Trend == -1 and Trend[1] == 1 and MTrend == -1 plotarrow(up ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0) plotarrow(down ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0) golong = Trend == 1 and Trend[1] == -1 and MTrend == 1 goshort = Trend == -1 and Trend[1] == 1 and MTrend == -1 strategy.entry("Buy", strategy.long,when=golong) strategy.exit("Close Buy","Buy",profit=tp,loss=sl) strategy.entry("Sell", strategy.short,when=goshort) strategy.exit("Close Sell","Sell",profit=tp,loss=sl)