Estrategia de seguimiento de medias móviles múltiples y sistema de gestión de posiciones dinámicas

EMA ATR
Fecha de creación: 2025-02-27 10:20:18 Última modificación: 2025-02-27 10:20:18
Copiar: 0 Número de Visitas: 478
2
Seguir
319
Seguidores

Estrategia de seguimiento de medias móviles múltiples y sistema de gestión de posiciones dinámicas Estrategia de seguimiento de medias móviles múltiples y sistema de gestión de posiciones dinámicas

Descripción general

La estrategia de seguimiento de líneas medias múltiples y el sistema de gestión de posiciones dinámicas es una estrategia de negociación cuantitativa basada en promedios móviles de múltiples índices (EMA). La estrategia construye un sistema de negociación completo mediante la monitorización de cinco indicadores de EMA de diferentes períodos (SEC 12 , 144 , 169 , 576 y 676). Incluye el juicio de tendencias, la identificación de señales de entrada, la construcción de lotes, los paros dinámicos y los paros dinámicos.

Principio de estrategia

La lógica central de la estrategia se basa en la relación de posición entre múltiples EMAs y la interacción de los precios con los EMAs clave:

  1. Mecanismo de evaluación de tendencias:

    • Las condiciones de tendencia múltiple: EMA12 > EMA144 > EMA169 > EMA576 > EMA676
    • Condiciones de la tendencia a la baja: EMA12 < EMA144 < EMA169 < EMA576 < EMA676
  2. Señales de entrada:

    • Entradas de múltiples cabezas: basadas en el cumplimiento de la tendencia de múltiples cabezas, cuando los bajos superan la EMA144 y el precio de cierre está por encima de la EMA169
    • Entrada a la borda: basado en el cumplimiento de la tendencia a la borda, cuando el máximo supera la EMA144 y el precio de cierre está por debajo de la EMA169
  3. Construcción por lotes:

    • Primera posición: cumple con la señal de entrada y no tiene posición
    • Segunda posición: cumple con la señal de entrada y tiene una posición actual
    • De tres a cinco posiciones: Basado en la satisfacción de la señal de entrada, también se requiere un intervalo de tiempo de más de 50 líneas K desde la última posición
  4. Parador de pérdida dinámica:

    • Cada posición adopta un punto de parada dinámico, basado en el precio mínimo de la línea K de 12 en el momento de la construcción de la posición (multi-cabeza) o el precio máximo (cabeza vacía)
    • Utiliza una estrategia de parálisis simétrica con un precio objetivo de “precio de entrada + (precio de entrada - precio de parada) “
    • Ganancias por lotes: cada posición se liquida el 50% cuando se alcanza el punto de parada, y el resto se mantiene hasta que se toque el punto de parada
  5. Control de riesgo global:

    • Cuando el EMA12 se cruza con el EMA144 indicador ((el EMA12 en una tendencia de más de una cabeza cae por debajo del EMA144, o el EMA12 en una tendencia de cabeza de más de una cabeza rompe el EMA144), todas las posiciones cerradas

En general, la estrategia establece la dirección de la tendencia del mercado a través de la alineación de múltiples EMA, determina el momento de entrada a través de la interacción del precio con el EMA144 y establece un punto de parada de pérdidas dinámicas a través de la zona de fluctuación de precios recientes, al tiempo que optimiza la gestión de fondos mediante la creación de reservas en serie y la distribución de ganancias aprobadas, lo que finalmente forma un sistema de negociación completo.

Ventajas estratégicas

  1. El juicio sistemático de tendencias:

    • Un sistema de determinación de tendencias que utiliza cinco EMA de diferentes períodos para formar un trípode y reducir el riesgo de falsas rupturas
    • El conjunto de indicadores de la EMA proporciona un criterio cuantitativo para la fuerza de la tendencia y hace que las decisiones de negociación sean más objetivas.
  2. Mecanismo de admisión exacto:

    • La combinación de la acción cruzada del precio con la línea media como condición de activación de la entrada, mejora la efectividad de la entrada
    • Requerir que las señales de entrada se confirmen dentro de las 12 líneas K, reduciendo el riesgo de transacciones atrasadas
  3. Gestión inteligente de los fondos:

    • Construcción por lotes de hasta 5 almacenes para adaptarse a las diferentes etapas de desarrollo del mercado
    • La construcción posterior del almacén debe cumplir con el intervalo de tiempo mínimo (de 50 líneas K), para evitar la construcción excesiva del almacén en poco tiempo.
  4. Las estrategias de rentabilidad flexible:

    • Utilizando el principio de “parada simétrica”, se obtienen posiciones de ventaja en función de los objetivos de cálculo de la dinámica del precio de entrada y el punto de parada
    • Porciones de ganancias ((50% de posiciones)), bloqueando parte de las ganancias mientras se conserva el espacio para subir
  5. Estricto control de los riesgos:

    • Cada posición establece un punto de parada independiente, basado en el rango de fluctuación reciente (12 líneas K)
    • La señal de cambio de tendencia (cruzamiento entre EMA12 y EMA144) desencadena una posición completamente cerrada y un stop loss a tiempo
  6. Altamente adaptable:

    • Al mismo tiempo, soporta operaciones con múltiples y sin titulares y se adapta a diversos entornos de mercado.
    • Ajuste de parámetros (por ejemplo, multiplicador ATR, número de líneas K) para diferentes variedades y períodos

Riesgo estratégico

  1. Riesgo de retraso en la línea media:

    • El retraso en los EMA puede ocasionar un mal momento para entrar o salir de la bolsa en momentos de gran volatilidad.
    • Método de mitigación: se puede considerar la combinación de indicadores de movilidad a corto plazo como auxiliar para mejorar la velocidad de respuesta del sistema
  2. La presión financiera para construir el depósito por lotes:

    • Las estrategias de acrecentamiento que apoyan hasta cinco posiciones pueden conducir a una concentración excesiva de capital.
    • Método de mitigación: Se debe establecer una proporción razonable de fondos para cada depósito en función de la cantidad total de fondos, para garantizar una distribución equilibrada de los fondos
  3. Limitaciones de los parámetros de ciclo fijo:

    • Los períodos de EMA en el código ((12, 144, 169, 576, 676) son valores fijos y pueden no ser válidos para todos los entornos de mercado
    • Métodos de mitigación: Introducción de métodos de cálculo del ciclo de adaptación o creación de procesos de optimización de parámetros especializados para diferentes variedades
  4. Problemas potenciales con el impedimento de simetría:

    • En un mercado de fuerte tendencia, los pares simétricos pueden obtener ganancias prematuras y perder un mayor espacio de ganancias
    • Método de mitigación: Se puede considerar el establecimiento de un stop loss de seguimiento para el 50% restante de las posiciones para adaptarse a una tendencia fuerte
  5. Las condiciones de ingreso son demasiado estrictas:

    • La combinación de múltiples condiciones (ordenamiento de la línea media + cruce de precios + confirmación de cierre) puede causar la pérdida de parte de la señal válida
    • Método de mitigación: Se puede configurar un mecanismo de entrada selectivo para diferentes fases del mercado, lo que mejora la sensibilidad de la captura de la señal
  6. Riesgo de la dependencia de datos:

    • Las estrategias que dependen de EMAs de largo período (como 576, 676) requieren datos históricos lo suficientemente largos como para funcionar de manera efectiva
    • Método de mitigación: en caso de insuficiencia de datos, se puede considerar el uso de indicadores alternativos o un método de cálculo de EMA de largo período ajustado

Dirección de optimización de la estrategia

  1. Introducción del mecanismo de parámetros adaptativos:

    • Cambiar el ciclo de EMA fijo (de 12, 144, 169, 576 y 676) por un parámetro de adaptación basado en la volatilidad del mercado
    • Motivo de la optimización: existen diferencias significativas entre los ciclos óptimos de EMA en diferentes entornos de mercado, y el mecanismo de adaptación puede mejorar la universalidad de las estrategias
  2. Mejora en la filtración de señales de entrada:

    • Indicadores como el volumen de negocios, la volatilidad del mercado (como el ATR) se combinan para agregar condiciones de confirmación adicionales a las señales de entrada
    • Razón de optimización: la señal de cruce de línea pura y uniforme es susceptible a interferencia de ruido del mercado, y las condiciones de filtración adicionales mejoran la calidad de la señal
  3. Mejorar el sistema de gestión de fondos:

    • Proporción de capital por cada posición establecida, ajustada de forma dinámica en función del capital total de la cuenta y de la volatilidad del mercado
    • Razón de optimización: La proporción de fondos asignados a las estrategias actuales es fija, no se puede ajustar automáticamente según el nivel de riesgo, la introducción de la gestión dinámica de fondos mejora la eficiencia de la utilización de fondos
  4. Optimización de los mecanismos de detención de pérdidas:

    • Estrategias diferenciadas de stop-loss diseñadas para diferentes posiciones de almacenamiento, como el uso de stop-loss de proporción fija en el primer almacenamiento y el uso de stop-loss de seguimiento en el almacenamiento posterior
    • Motivo de la optimización: Las estrategias unificadas de stop loss son difíciles de adaptar a las necesidades de las diferentes fases del mercado, mientras que las estrategias diferenciadas permiten una mayor flexibilidad para responder a los cambios del mercado
  5. Aumentar el filtro de tiempo:

    • Introducir un filtro de tiempo de negociación para evitar momentos de alta volatilidad (como antes de la apertura y el cierre) o durante la publicación de datos importantes
    • Motivo de la optimización: La volatilidad del mercado en un período de tiempo determinado suele carecer de dirección, y el aumento del filtro de tiempo evita transacciones innecesarias
  6. Añadir una evaluación de la intensidad de la tendencia:

    • Desarrollo de indicadores de intensidad de tendencia que permiten el comercio solo cuando la intensidad de la tendencia alcanza un umbral
    • Motivo de la optimización: Las estrategias actuales también generan señales en entornos de tendencia débil, y la introducción de la evaluación de la intensidad de la tendencia puede reducir las falsas señales en los mercados oscilantes.
  7. Construir un sistema de sinergia multi-ciclo:

    • La determinación de tendencias en combinación con períodos de tiempo más altos como filtros de dirección de negociación
    • Razón de optimización: los sistemas de transacción de un solo ciclo son susceptibles a la interferencia de las fluctuaciones a corto plazo, y la sinergia de varios ciclos mejora la estabilidad del sistema

Resumir

La estrategia de seguimiento de líneas medias múltiples y el sistema de gestión de posiciones dinámicas es una estrategia de comercio cuantitativa estructurada y lógica. Esta estrategia establece un marco para el juicio de tendencias a través de una combinación de múltiples EMA, determina el momento de entrada a través de la interacción del precio con las líneas medias clave y realiza una gestión de fondos y un control de riesgos refinados mediante la construcción de posiciones por lotes y paradas de pérdidas dinámicas.

Sin embargo, la estrategia también presenta riesgos como el retraso en la línea de promedio, la limitación de parámetros fijos y la presión de la administración de fondos. Para mejorar aún más la eficacia de la estrategia, se pueden considerar direcciones de optimización como la introducción de mecanismos de parámetros adaptativos, el aumento de la filtración de señales, la mejora del sistema de administración de fondos, la optimización de los mecanismos de stop-loss y la construcción de sistemas de sincronización de múltiples ciclos.

En general, la estrategia proporciona un marco operable para el comercio cuantitativo mediante el seguimiento equilibrado de tendencias y el control de riesgos. A través de la optimización continua y el ajuste de los parámetros para un entorno de mercado específico, la estrategia espera obtener un rendimiento estable en el comercio real.

Código Fuente de la Estrategia
/*backtest
start: 2024-09-08 00:00:00
end: 2024-12-08 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("专业级交易系统", overlay=false, close_entries_rule = "ANY")
x1 = input.float(1.5,"atr倍数",step=0.1)
x2 = input.int(50,"k线数量",step=1)
s1 = strategy.opentrades.entry_price(0)
s2 = strategy.opentrades.entry_price(1)
s3 = strategy.opentrades.entry_price(2)
s4 = strategy.opentrades.entry_price(3)
s5 = strategy.opentrades.entry_price(4)
s6 = strategy.opentrades.entry_price(5)
s7 = strategy.opentrades.entry_price(6)
s8 = strategy.opentrades.entry_price(7)
s9 = strategy.opentrades.entry_price(8)
c = strategy.position_size,o = strategy.opentrades
ema12_len = input.int(12,"EMA12长度")
ema144_len = input.int(144, "EMA144长度")
ema169_len = input.int(169,"EMA169长度")
ema576_len = input.int(376, "EMA576长度")
ema676_len = input.int(576,"EMA676长度")
ema12 = ta.ema(close,ema12_len)
ema144 = ta.ema(close, ema144_len)
ema169 = ta.ema(close, ema169_len)
ema576 = ta.ema(close, ema576_len)
ema676 = ta.ema(close, ema676_len)
e3 = ta.valuewhen(o ==2 and o[1] == 1 and c > 0,bar_index,0)
e4 = ta.valuewhen(o ==3 and o[1] == 2 and c > 0,bar_index,0)
e5 = ta.valuewhen(o ==4 and o[1] == 3 and c > 0,bar_index,0)
le1 = false
le1 := c <= 0 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 ? false : le1[1]
le11 = false
le11 := le1 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144,bar_index,0) < 12 ? true : false
le2 = false
le2 := c > 0 and o == 1 and o[1] == 1 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 1? false : le2[1]
le21 = false
le21 := le2 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 1 and o[1]==1,bar_index,0) < 12 ? true : false
le3 = false
le3 := c > 0 and o == 2 and o[1] == 2 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 2? false : le3[1]
le31 = false
le31 := le3 and bar_index - e3 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 2 and o[1]==2,bar_index,0) < 12 ? true : false
le4 = false
le4 := c > 0 and o == 3 and o[1] == 3 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 3? false : le4[1]
le41 = false
le41 := le4 and bar_index - e4 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 3 and o[1]==3,bar_index,0) < 12 ? true : false
le5 = false
le5 := c > 0 and o == 4 and o[1] == 4 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 4? false : le5[1]
le51 = false
le51 := le5 and bar_index - e5 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 4 and o[1]==4,bar_index,0) < 12 ? true : false
d1 = ta.valuewhen(o == 1 and o[1] == 0 and c > 0,ta.lowest(12),0)
d2 = ta.valuewhen(o == 2 and o[1] == 1 and c > 0,ta.lowest(12),0)
d3 = ta.valuewhen(o == 3 and o[1] == 2 and c > 0,ta.lowest(12),0)
d4 = ta.valuewhen(o == 4 and o[1] == 3 and c > 0,ta.lowest(12),0)
d5 = ta.valuewhen(o == 5 and o[1] == 4 and c > 0,ta.lowest(12),0)
if le11 and close > ema12 and o == 0
    strategy.order("l1",strategy.long,comment="第一单")
if c > 0 and o > 0
    strategy.exit("出场1","l1",limit = 2*s1- d1,stop= d1,qty_percent = 50)
    strategy.exit("出场11","l1",stop= d1)

if le21 and close > ema12 and o == 1
    strategy.order("l2",strategy.long,comment="第二单")
if c > 0 and o == 2
    strategy.exit("出场2","l2",limit = 2*s2- d2,stop= d2,qty_percent = 50)
    strategy.exit("出场21","l2",stop= d2)

if le31 and close > ema12 and o == 2
    strategy.order("l3",strategy.long,comment="第三单")
if c > 0 and o == 3
    strategy.exit("出场3","l3",limit = 2*s3- d3,stop= d3,qty_percent = 50)
    strategy.exit("出场31","l3",stop= d3)

if le41 and close > ema12 and o == 3
    strategy.order("l4",strategy.long,comment="第四单")
if c > 0 and o == 4 
    strategy.exit("出场4","l4",limit = 2*s4- d4,stop= d4,qty_percent = 50)
    strategy.exit("出场41","l4",stop= d4)

if le51 and close > ema12 and o == 4
    strategy.order("l5",strategy.long,comment="第五单")
if c > 0 and o == 5
    strategy.exit("出场5","l5",limit = 2*s5- d5,stop= d5,qty_percent = 50)
    strategy.exit("出场51","l5",stop= d5)
bgcolor(le2?color.red:na)
if c > 0 and ema12 < ema144
    strategy.close_all("跌破均线全部出场")

//做空
es3 = ta.valuewhen(o ==2 and o[1] == 1 and c < 0,bar_index,0)
es4 = ta.valuewhen(o ==3 and o[1] == 2 and c < 0,bar_index,0)
es5 = ta.valuewhen(o ==4 and o[1] == 3 and c < 0,bar_index,0)
se1 = false
se1 := c >= 0 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 ? false : se1[1]
se11 = false
se11 := se1 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144,bar_index,0) < 12 ? true : false
se2 = false
se2 := c < 0 and o == 1 and o[1] == 1 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 or o < 1? false : se2[1]
se21 = false
se21 := se2 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 1 and o[1]==1,bar_index,0) < 12 ? true : false
se3 = false
se3 := c < 0 and o == 2 and o[1] == 2 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169 ? true :  close > ema169 or ema12 > ema144 or o < 2? false : se3[1]
se31 = false
se31 := se3 and bar_index - es3 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 2 and o[1]==2,bar_index,0) < 12 ? true : false
se4 = false
se4 := c < 0 and o == 3 and o[1] == 3 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 or o < 3? false : se4[1]
se41 = false
se41 := se4 and bar_index - es4 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 3 and o[1]==3,bar_index,0) < 12 ? true : false
se5 = false
se5 := c < 0 and o == 4 and o[1] == 4 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169 ? true :  close > ema169 or ema12 > ema144 or o < 4? false : se5[1]
se51 = false
se51 := se5 and bar_index - es5 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 4 and o[1]==4,bar_index,0) < 12 ? true : false
ds1 = ta.valuewhen(o == 1 and o[1] == 0 and c < 0 ,ta.highest(12),0)
ds2 = ta.valuewhen(o == 2 and o[1] == 1 and c < 0,ta.highest(12),0)
ds3 = ta.valuewhen(o == 3 and o[1] == 2 and c < 0,ta.highest(12),0)
ds4 = ta.valuewhen(o == 4 and o[1] == 3 and c < 0,ta.highest(12),0)
ds5 = ta.valuewhen(o == 5 and o[1] == 4 and c < 0,ta.highest(12),0)
if se11 and close < ema12 and o == 0
    strategy.order("s1",strategy.short,comment="第一单")
if c < 0 and o > 0
    strategy.exit("出场1","s1",limit = 2*s1- ds1,stop= ds1,qty_percent = 50)
    strategy.exit("出场11","s1",stop= ds1)

if se21 and close < ema12 and o == 1
    strategy.order("s2",strategy.short,comment="第二单")
if c < 0 and o == 2
    strategy.exit("出场2","s2",limit = 2*s2- ds2,stop= ds2,qty_percent = 50)
    strategy.exit("出场21","s2",stop= ds2)

if se31 and close < ema12 and o == 2
    strategy.order("s3",strategy.short,comment="第三单")
if c < 0 and o == 3
    strategy.exit("出场3","s3",limit = 2*s3- ds3,stop= ds3,qty_percent = 50)
    strategy.exit("出场31","s3",stop= ds3)

if se41 and close < ema12 and o == 3
    strategy.order("s4",strategy.short,comment="第四单")
if c < 0 and o == 4 
    strategy.exit("出场4","s4",limit = 2*s4- ds4,stop= ds4,qty_percent = 50)
    strategy.exit("出场41","s4",stop= ds4)

if se51 and close < ema12 and o == 4
    strategy.order("s5",strategy.short,comment="第五单")
if c < 0 and o == 5
    strategy.exit("出场5","s5",limit = 2*s5- ds5,stop= ds5,qty_percent = 50)
    strategy.exit("出场51","s5",stop= ds5)
bgcolor(se1?color.red:na)
if c < 0 and ema12 > ema144
    strategy.close_all("跌破均线全部出场")
kaiguan = input.bool(true,"均线开关")
plot(ema12,force_overlay=true)
plot(ema144, "EMA144", color=color.new(#008000, 0),force_overlay=true)
plot(ema169, "EMA169", color=color.red,force_overlay=true)
plot(kaiguan?ema576:na,color=color.yellow,force_overlay=true)
plot(kaiguan?ema676:na,color=color.yellow,force_overlay=true)
//plotshape(series=entrySignal,title="买入信号",location=location.belowbar,color=color.new(color.green, 0),style=shape.labelup,text="BUY",textcolor=color.new(color.white, 0))