Estrategia de negociación de media móvil de cambio de varios niveles

El autor:¿ Qué pasa?, Fecha: 2023-09-23 15:55:20
Las etiquetas:

Resumen general

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.

Estrategia lógica

  1. Calcular la media móvil simple del precio del src como la línea base.

  2. Establezca el número de líneas largas y cortas basándose en los parámetros largos y cortos.

  3. 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.

  4. Entrar en operaciones a varios niveles cuando el precio cruza las líneas dentro de los tiempos negociables.

  5. Detener pérdidas cuando el precio toque la línea base.

  6. Fuerza a cerrar todas las posiciones después del tiempo final.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. La entrada a varios niveles permite obtener beneficios en diferentes etapas de la tendencia.

  2. Altamente personalizable con parámetros para diferentes productos y estilos comerciales.

  3. Sistema de ruptura confiable basado en promedios móviles.

  4. Evite eventos importantes estableciendo un intervalo de tiempo negociable.

  5. Las pérdidas contenidas a través del stop loss.

Análisis de riesgos

Algunos riesgos de la estrategia:

  1. Alto riesgo de las posiciones piramidal, capital suficiente necesario.

  2. Los parámetros inadecuados pueden conducir a un exceso de negociación.

  3. El tiempo de salida fijo puede perder la ganancia de tendencia tardía.

  4. No se consideran las posiciones a un día y el coste de carga.

  5. No hay control sobre el tamaño de la posición.

Direcciones de optimización

La estrategia puede mejorarse en los siguientes aspectos:

  1. Añadir un stop loss trasero en lugar de un tiempo de salida fijo.

  2. Considere el coste de carga para las posiciones de una sola noche.

  3. Agregue el stop loss para capturar las ganancias tardías.

  4. Posiciones de tamaño dinámico basadas en la exposición actual.

  5. Prueba de parámetros en diferentes productos y métodos de optimización de construcción.

  6. Optimizar los niveles de stop loss para evitar paradas innecesarias.

Resumen de las actividades

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()

Más.