La estrategia de media móvil de movimiento de varios niveles entra y detiene la pérdida en múltiples niveles estableciendo varias líneas de media móvil de movimiento con diferentes parámetros. La estrategia primero calcula 3 líneas largas y 3 líneas cortas. Va largo cuando las líneas largas están por debajo de las líneas cortas, y va corto cuando las líneas cortas están por debajo de las líneas largas. La estrategia permite la personalización de parámetros como el período de media móvil, la relación de movimiento, el rango de tiempo negociable, etc. Es adecuado para el comercio de tendencias a medio y largo plazo.
Calcular la media móvil simple del precio del src como la línea base.
Establezca el número de líneas largas y cortas basándose en los parámetros largos y cortos.
Las líneas largas1 etc. se establecen desplazando la línea base de acuerdo con las relaciones de los niveles largos1 etc. Las líneas cortas se establecen de manera similar.
Entrar en operaciones a varios niveles cuando el precio cruza las líneas dentro de los tiempos negociables.
Detener pérdidas cuando el precio toque la línea base.
Fuerza a cerrar todas las posiciones después del tiempo final.
La estrategia tiene las siguientes ventajas:
La entrada a varios niveles permite obtener beneficios en diferentes etapas de la tendencia.
Altamente personalizable con parámetros para diferentes productos y estilos comerciales.
Sistema de ruptura confiable basado en promedios móviles.
Evite eventos importantes estableciendo un intervalo de tiempo negociable.
Las pérdidas contenidas a través del stop loss.
Algunos riesgos de la estrategia:
Alto riesgo de las posiciones piramidal, capital suficiente necesario.
Los parámetros inadecuados pueden conducir a un exceso de negociación.
El tiempo de salida fijo puede perder la ganancia de tendencia tardía.
No se consideran las posiciones a un día y el coste de carga.
No hay control sobre el tamaño de la posición.
La estrategia puede mejorarse en los siguientes aspectos:
Añadir un stop loss trasero en lugar de un tiempo de salida fijo.
Considere el coste de carga para las posiciones de una sola noche.
Agregue el stop loss para capturar las ganancias tardías.
Posiciones de tamaño dinámico basadas en la exposición actual.
Prueba de parámetros en diferentes productos y métodos de optimización de construcción.
Optimizar los niveles de stop loss para evitar paradas innecesarias.
La estrategia de media móvil de cambio de varios niveles obtiene ganancias de las tendencias a través de la entrada de varios niveles basada en promedios móviles. Los tiempos negociables y los controles de stop loss corren un buen riesgo.
/*backtest start: 2022-09-16 00:00:00 end: 2023-09-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=4 strategy(title = "Noro's ShiftMA-multi Strategy v1.1", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3) //Settings long = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for long") short = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") len = input(3, minval = 1, title = "MA Length") src = input(ohlc4, title = "MA Source") shortlevel3 = input(15.0, title = "Short line 3") shortlevel2 = input(10.0, title = "Short line 2") shortlevel1 = input(5.0, title = "Short line 1") longlevel1 = input(-5.0, title = "Long line 1") longlevel2 = input(-10.0, title = "Long line 2") longlevel3 = input(-15.0, title = "Long line 3") needoffset = input(true, title = "Offset") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Variables size = strategy.position_size mult = 1 / syminfo.mintick //MA ma = sma(src, len) longline1 = long >= 1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close longline2 = long >= 2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close longline3 = long >= 3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close shortline1 = short >= 1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close shortline2 = short >= 2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close shortline3 = short >= 3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close //Lines colorlong1 = long >= 1 ? color.lime : na colorlong2 = long >= 2 ? color.lime : na colorlong3 = long >= 3 ? color.lime : na colorshort1 = short >= 1 ? color.red : na colorshort2 = short >= 2 ? color.red : na colorshort3 = short >= 3 ? color.red : na offset = needoffset ? 1 : 0 plot(shortline3, offset = offset, color = colorshort1) plot(shortline2, offset = offset, color = colorshort2) plot(shortline1, offset = offset, color = colorshort3) plot(ma, offset = offset, color = color.blue) plot(longline1, offset = offset, color = colorlong1) plot(longline2, offset = offset, color = colorlong2) plot(longline3, offset = offset, color = colorlong3) //Trading lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] lots = 0.0 needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) if ma > 0 lots := round(size / lot) strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long >= 1 and needtime)) lots := round(size / lot) strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long >= 2 and needtime)) lots := round(size / lot) strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long >= 3 and needtime)) lots := round(size / lot) strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short >= 1 and needtime)) lots := round(size / lot) strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short >= 2 and needtime)) lots := round(size / lot) strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short >= 3 and needtime)) if size > 0 strategy.entry("TPL", strategy.short, 0, limit = ma) if size < 0 strategy.entry("TPS", strategy.long, 0, limit = ma) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()