Esta estrategia genera señales de compra cuando la línea de compra rápida de la EMA cruza la línea de compra lenta de la SMA, y utiliza la parada de seguimiento dinámica ATR para controlar el riesgo.
Cálcule las líneas de compra de la EMA rápida y la SMA lenta, genere una señal de compra cuando la línea rápida cruce la línea lenta con cierta fuerza de compra.
Calcula las líneas de venta de EMA rápida y SMA lenta, genera una señal de venta cuando la línea rápida cruza por debajo de la línea lenta.
Se utilizará la media ATR de N días multiplicada por el coeficiente de parada dinámica de seguimiento para el control del riesgo.
Comience la estrategia en el período de backtest para la ejecución de compra y venta.
Optimice los parámetros para cada stock para encontrar los mejores valores.
La estrategia combina las ventajas del cruce de MA para señales y el ATR para el control de riesgos.
Los cruces de EMA rápidos y SMA lentos identifican tendencias y generan señales.
El ATR se detendrá en función de la volatilidad del mercado, controlando de manera efectiva los riesgos.
La optimización para cada acción mejora la rentabilidad.
Lógica y reglas sencillas, fáciles de implementar y verificar.
Completar la funcionalidad de backtest para validar la estrategia.
Busca un rendimiento superior constante sobre la compra y la retención.
Los parámetros optimizados pueden no funcionar para el futuro, puede ser necesaria una re-optimización periódica.
Los cruces de EMA y SMA pueden generar señales incorrectas o con retraso.
La parada ATR puede ser demasiado agresiva, puede aflojar el rango de pérdida de parada.
La baja frecuencia comercial puede perder buenas oportunidades.
Es necesario tener en cuenta el impacto de los costes comerciales.
Continúe probando diferentes combinaciones de parámetros para obtener valores óptimos.
Intente introducir otros indicadores para filtrar la señal.
Optimizar el período de ATR para equilibrar la sensibilidad de stop loss.
Evaluar el efecto de relajar el rango de pérdida de parada.
Considere el aprendizaje automático para la optimización automática de parámetros.
Efectos del estudio de la creciente frecuencia del comercio.
Esta estrategia de parada de media móvil combina las fortalezas de los cruces MA para señales y las paradas ATR para el control de riesgos. La optimización de parámetros la adapta a las características de cada acción. Aunque los parámetros optimizados no tienen garantía, la lógica general es simple y práctica para superar el buy and hold. Merecen más mejoras y verificación, ya que la estrategia tiene un buen valor inspirador.
/*backtest start: 2023-01-01 00:00:00 end: 2023-09-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //created by XPloRR 04-03-2018 strategy("XPloRR MA-Trailing-Stop Strategy",overlay=true, initial_capital=1000,default_qty_type=strategy.percent_of_equity,default_qty_value=100) testStartYear = input(2005, "Start Year") testStartMonth = input(1, "Start Month") testStartDay = input(1, "Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2050, "Stop Year") testStopMonth = input(12, "Stop Month") testStopDay = input(31, "Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriodBackground = input(title="Background", type=bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=97) ema1Period = input(12, "Fast EMA Buy") sma1Period = input(54, "Slow SMA Buy") strength1 = input(52, "Minimum Buy Strength") ema2Period = input(18, "Fast EMA Sell") sma2Period = input(55, "Slow SMA Sell") strength2 = input(100, "Minimum Sell Strength") delta = input(8, "Trailing Stop (#ATR)") testPeriod() => true ema1val=ema(close,ema1Period) sma1val=sma(close,sma1Period) ema1strength=10000*(ema1val-ema1val[1])/ema1val[1] ema2val=ema(close,ema2Period) sma2val=sma(close,sma2Period) ema2strength=10000*(ema2val-ema2val[1])/ema2val[1] plot(ema1val,color=blue,linewidth=1) plot(sma1val,color=orange,linewidth=1) plot(ema2val,color=navy,linewidth=1) plot(sma2val,color=red,linewidth=1) long=crossover(ema1val,sma1val) and (ema1strength > strength1) short=crossunder(ema2val,sma2val) and (ema2strength < -strength2) stopval=ema(close,6) atr=sma((high-low),15) inlong=0 buy=0 stop=0 if testPeriod() if (inlong[1]) inlong:=inlong[1] buy:=close stop:=iff((stopval>(stop[1]+delta*atr)),stopval-delta*atr,stop[1]) if (long) and (not inlong[1]) strategy.entry("buy",strategy.long) inlong:=close buy:=close stop:=stopval-delta*atr plot(buy,color=iff(close<inlong,red,lime),style=columns,transp=90,linewidth=1) plot(stop,color=iff((short or (stopval<stop)) and (close<inlong),red,lime),style=columns,transp=60,linewidth=1) if testPeriod() if (short or (stopval<stop)) and (inlong[1]) strategy.close("buy") inlong:=0 stop:=0 buy:=0