Esta estrategia juzga la tendencia del precio calculando el cruce de medias móviles dobles, y emite señales de compra y venta con ciertas restricciones de parámetros.
El núcleo de esta estrategia radica en el cálculo de promedios móviles rápidos y lentos. El promedio móvil rápido tiene un período de la mitad del período de promedio móvil total, que es más sensible a los cambios de precios; el promedio móvil lento tiene un período de período de promedio móvil total, que refleja los cambios de precios más suavemente. Cuando el promedio móvil rápido supera al lento, se cree que el precio sube; cuando está por debajo, cae.
Además, la estrategia establece ciertos parámetros para evitar operaciones incorrectas. Por ejemplo, el umbral de decisión es para garantizar que las señales se emitan solo cuando la diferencia entre los dos promedios móviles excede un cierto nivel; el parámetro de confianza se utiliza para filtrar pequeñas fluctuaciones de precios.
Finalmente, el stop profit y el stop loss se emplean para controlar los riesgos. Si el openprofit es menor que el punto de stop loss o mayor que el punto de stop profit, las posiciones se cerrarán. Esto limita efectivamente la pérdida de una sola operación.
La mayor ventaja de esta estrategia es combinar el juicio de la tendencia de precios y las características de volatilidad a través de indicadores de promedios móviles. Cruzar promedios móviles dobles es un enfoque técnico clásico y efectivo para determinar las tendencias de precios. Con la optimización de parámetros, puede capturar con precisión las tendencias.
Además, los parámetros como el umbral de decisión, el stop profit y el stop loss también pueden reducir en gran medida los riesgos comerciales al evitar perseguir máximos y vender mínimos.
El principal riesgo de esta estrategia es la posibilidad de señales erróneas de las medias móviles dobles. Tanto las medias móviles rápidas como las lentas son medias móviles ponderadas que reaccionan lentamente a eventos repentinos, por lo que se pierden reversiones de precios a corto plazo. En este momento, el parámetro de confianza puede proporcionar una doble confirmación.
Además, la configuración inadecuada de los puntos de stop profit y stop loss también aumentará los riesgos. Un objetivo de ganancia demasiado alto y un punto de stop loss bajo pueden conducir a pérdidas más allá de las expectativas. Se deben establecer parámetros razonables de acuerdo con las características de los diferentes productos comerciales y la volatilidad.
La estrategia se puede optimizar en los siguientes aspectos:
Optimizar los períodos de promedios móviles, establecer promedios móviles adaptativos a las fluctuaciones de precios de los diferentes ciclos;
Establecer mecanismos de seguimiento dinámicos para el stop profit y el stop loss, calcular la volatilidad en tiempo real en función de las condiciones del mercado, de modo que los puntos de parada puedan cambiar dinámicamente;
Aumentar los modelos de aprendizaje automático para juzgar las direcciones de la tendencia de los precios, utilizar más datos históricos para determinar los movimientos actuales de los precios y reducir las señales erróneas.
En general, esta es una estrategia clásica de trading de tendencias simple y efectiva. Utiliza doble cruce de promedios móviles para determinar tendencias, establece parámetros para controlar riesgos y tiene una alta configurabilidad para el comercio de múltiples productos. Si se pueden introducir medios de juicio más inteligentes como el aprendizaje automático, el efecto general podría ser aún mejor para más investigación.
/*backtest start: 2023-12-03 00:00:00 end: 2024-01-02 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // Any timeFrame ok but good on 15 minute & 60 minute , Ichimoku + Daily-Candle_cross(DT) + HULL-MA_cross + MacD combination 420 special blend strategy("Trade Signal", shorttitle="Trade Alert", overlay=true ) keh=input(title="Double HullMA",defval=14, minval=1) dt = input(defval=0.0010, title="Decision Threshold (0.001)", type=float, step=0.0001) SL = input(defval=-10.00, title="Stop Loss in $", type=float, step=1) TP = input(defval=100.00, title="Target Point in $", type=float, step=1) ot=1 n2ma=2*wma(close,round(keh/2)) nma=wma(close,keh) diff=n2ma-nma sqn=round(sqrt(keh)) n2ma1=2*wma(close[1],round(keh/2)) nma1=wma(close[1],keh) diff1=n2ma1-nma1 sqn1=round(sqrt(keh)) n1=wma(diff,sqn) n2=wma(diff1,sqn) b=n1>n2?lime:red c=n1>n2?green:red d=n1>n2?red:green confidence=(request.security(syminfo.tickerid, '5', close[1])-request.security(syminfo.tickerid, '60', close[1]))/request.security(syminfo.tickerid, '60', close[1]) conversionPeriods = input(9, minval=1, title="Conversion Line Periods") basePeriods = input(26, minval=1, title="Base Line Periods") laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Periods") displacement = input(26, minval=1, title="Displacement") donchian(len) => avg(lowest(len), highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) LS=close, offset = -displacement MACD_Length = input(9) MACD_fastLength = input(12) MACD_slowLength = input(26) MACD = ema(close, MACD_fastLength) - ema(close, MACD_slowLength) aMACD = ema(MACD, MACD_Length) closelong = n1<n2 and close<n2 and confidence<dt or strategy.openprofit<SL or strategy.openprofit>TP if (closelong) strategy.close("Long") closeshort = n1>n2 and close>n2 and confidence>dt or strategy.openprofit<SL or strategy.openprofit>TP if (closeshort) strategy.close("Short") longCondition = n1>n2 and strategy.opentrades<ot and confidence>dt and close>n2 and leadLine1>leadLine2 and open<LS and MACD>aMACD if (longCondition) strategy.entry("Long",strategy.long) shortCondition = n1<n2 and strategy.opentrades<ot and confidence<dt and close<n2 and leadLine1<leadLine2 and open>LS and MACD<aMACD if (shortCondition) strategy.entry("Short",strategy.short) //alerts alertcondition(closelong, title='Close Buy Position', message='Close Buy Position') alertcondition(closeshort, title='Close Short Position', message='Close Short Position') alertcondition(longCondition, title='Buy Signal', message='Buy Signal Alert') alertcondition(shortCondition, title='Sell Signal', message='Sell Signal Alert') //a1=plot(n1,color=c) //a2=plot(n2,color=c)plot(cross(n1, n2) ? n1 : na, style = circles, color=b, linewidth = 4) //plot(cross(n1, n2) ? n1 : na, style = line, color=d, linewidth = 4) plot(conversionLine, color=#0496ff, title="Conversion Line") plot(baseLine, color=#991515, title="Base Line") plot(close, offset = -displacement, color=#459915, title="Lagging Span") p1=plot (leadLine1, offset = displacement, color=green, title="Lead 1") p2=plot (leadLine2, offset = displacement, color=red, title="Lead 2") fill(p1, p2, color = leadLine1 > leadLine2 ? green : red) // remove the "//" from before the plot script if want to see the indicators on chart