La estrategia de comercio de canal de media móvil dual es una estrategia de comercio de tendencia que rastrea los cruces entre las medias móviles dobles. La estrategia utiliza el promedio móvil exponencial (EMA) y el promedio móvil ponderado (WMA) como indicadores de señal de comercio. Cuando la EMA a corto plazo cruza por encima de la WMA a largo plazo, la estrategia va a largo. Cuando la EMA a corto plazo cruza por debajo de la WMA a largo plazo, la estrategia va a corto.
Las señales comerciales de esta estrategia provienen de la cruz de oro y la cruz de la muerte entre la EMA a corto plazo de 10 períodos y la WMA a largo plazo de 20 períodos. Cuando la EMA a corto plazo cruza por encima de la WMA a largo plazo, indica que el mercado se está invirtiendo hacia arriba, por lo que va largo. Cuando la EMA a corto plazo cruza por debajo de la WMA a largo plazo, indica que el mercado se está invirtiendo hacia abajo, por lo que va corto.
Después de determinar la dirección de la negociación, la estrategia establece el stop loss por debajo o por encima del precio de entrada en un período de 1 ATR, con dos ganancias - el primer take profit se establece a 1 ATR por encima o por debajo del precio de entrada, y el segundo take profit se establece a 2 ATR por encima o por debajo del precio de entrada. Cuando se activa el primer take profit, se cerrará el 50% de la posición. La posición restante seguirá corriendo hacia el segundo take profit o con un trailing stop loss.
La lógica de stop loss de seguimiento - se activará una vez que el precio más alto o el precio más bajo haya alcanzado el primer nivel de ganancia.
La estrategia utiliza la función de reducción de ruido de doble suavizado de las medias móviles para filtrar de manera efectiva las fluctuaciones aleatorias en el mercado e identificar señales de tendencia a mediano y largo plazo, evitando así quedar atrapados en los golpes. Además, las dos etapas de toma de ganancias aumentan la zona de ganancias de la estrategia y maximizan las ganancias.
Las medias móviles tienen un mayor retraso, lo que supone el riesgo de que se pierdan señales.
La configuración del stop loss es un componente importante de la estrategia. Si el stop loss es demasiado pequeño, es propenso a ser golpeado por el ruido del mercado. Si el stop loss es demasiado grande, puede no controlar los riesgos de manera efectiva.
Además, cuando el mercado fluctúa violentamente, el trailing stop puede no funcionar muy bien en la protección.
Prueba EMA y WMA con diferentes parámetros para encontrar la combinación óptima de parámetros.
El valor de las pérdidas de los instrumentos de inversión se determinará en función de las características del producto y de los estilos de negociación.
Prueba de los efectos de la parada parcial de posición y de la parada de posición completa.
Introducir otros indicadores para el filtrado de señales para ayudar a la EMA y a la WMA, a fin de mejorar la calidad de la señal.
En general, la estrategia de comercio de canal de media móvil dual es relativamente robusta y tiene un buen rendimiento en los mercados de tendencia. Al optimizar los parámetros, los mecanismos de stop loss y mejorar la calidad de la señal, el rendimiento comercial real de esta estrategia puede mejorarse aún más. Esta es una idea de estrategia prometedora que vale la pena investigar en profundidad y aplicar en el comercio real.
/*backtest start: 2024-01-29 00:00:00 end: 2024-02-28 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © gpadihar //@version=4 strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true) // Strategy Buy = input(true) Sell = input(true) // Date Range start_year = input(title='Start year' ,defval=2020) start_month = input(title='Start month' ,defval=1) start_day = input(title='Start day' ,defval=1) start_hour = input(title='Start hour' ,defval=0) start_minute = input(title='Start minute' ,defval=0) end_time = input(title='set end time?',defval=false) end_year = input(title='end year' ,defval=3019) end_month = input(title='end month' ,defval=12) end_day = input(title='end day' ,defval=31) end_hour = input(title='end hour' ,defval=23) end_minute = input(title='end minute' ,defval=59) // MA ema_period = input(title='EMA period',defval=10) wma_period = input(title='WMA period',defval=20) ema = ema(close,ema_period) wma = wma(close,wma_period) // Entry Condition buy = crossover(ema,wma) and nz(strategy.position_size) == 0 and Buy and time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true) sell = crossunder(ema,wma) and nz(strategy.position_size) == 0 and Sell and time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true) // Pips pip = input(20)*10*syminfo.mintick // Trading parameters // var bool LS = na var bool SS = na var float EP = na var float TVL = na var float TVS = na var float TSL = na var float TSS = na var float TP1 = na var float TP2 = na var float SL1 = na var float SL2 = na if buy or sell and strategy.position_size == 0 EP := close SL1 := EP - pip * (sell?-1:1) SL2 := EP - pip * (sell?-1:1) TP1 := EP + pip * (sell?-1:1) TP2 := EP + pip * 2 * (sell?-1:1) // current trade direction LS := buy or strategy.position_size > 0 SS := sell or strategy.position_size < 0 // adjust trade parameters and trailing stop calculations TVL := max(TP1,open) - pip[1] TVS := min(TP1,open) + pip[1] TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS if LS and high > TP1 if open <= TP1 SL2:=min(EP,TSL) if SS and low < TP1 if open >= TP1 SL2:=max(EP,TSS) // Closing conditions close_long = LS and open < SL2 close_short = SS and open > SL2 // Buy strategy.entry("buy" , strategy.long, when=buy and not SS) strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=50) strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2) // Sell strategy.entry("sell" , strategy.short, when=sell and not LS) strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=50) strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2) // Plots a=plot(strategy.position_size > 0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) b=plot(strategy.position_size < 0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) c=plot(strategy.position_size > 0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) d=plot(strategy.position_size < 0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) e=plot(strategy.position_size > 0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) f=plot(strategy.position_size < 0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) g=plot(strategy.position_size >= 0 ? na : EP, color=#ffffff, style=plot.style_linebr) h=plot(strategy.position_size <= 0 ? na : EP, color=#ffffff, style=plot.style_linebr) plot(ema,title="ema",color=#fff176) plot(wma,title="wma",color=#00ced1)