Estrategia de trading con ruptura de impulso de medias móviles múltiples adaptativas

SMMA ZLEMA EMA MA SMA
Fecha de creación: 2025-01-10 15:27:53 Última modificación: 2025-01-10 15:27:53
Copiar: 0 Número de Visitas: 433
1
Seguir
1617
Seguidores

Estrategia de trading con ruptura de impulso de medias móviles múltiples adaptativas

Descripción general

Esta es una estrategia comercial basada en múltiples promedios móviles y rupturas de impulso. Esta estrategia combina múltiples indicadores técnicos como SMMA (promedio móvil suavizado) y ZLEMA (promedio móvil exponencial de rezago cero) para identificar oportunidades comerciales capturando señales de cruce entre precios y promedios móviles. La estrategia adopta un mecanismo adaptativo que puede ajustar la sensibilidad de la señal según las fluctuaciones del mercado y mejorar la precisión de las transacciones.

Principio de estrategia

La estrategia utiliza cuatro promedios móviles clave: src (SMMA basada en HLC3), hi (SMMA basada en alto), lo (SMMA basada en bajo) y mi (ZLEMA basada en src). Las señales comerciales se basan principalmente en las relaciones de cruce y posición entre estos promedios móviles. La combinación de múltiples condiciones de señal garantiza la confiabilidad de las señales comerciales. Las señales de compra incluyen cuatro combinaciones diferentes de condiciones, y las señales de venta también incluyen cuatro combinaciones diferentes de condiciones. La señal de cierre se basa en el cruce del precio y la media móvil mi y la relación posicional entre las medias móviles.

Ventajas estratégicas

  1. El mecanismo de confirmación de múltiples señales mejora la precisión de las transacciones
  2. Las características adaptativas permiten que las estrategias se adapten a diferentes condiciones del mercado.
  3. Uso de SMMA y ZLEMA para reducir el impacto de señales falsas
  4. Un sistema de señales en capas proporciona más oportunidades comerciales
  5. Las condiciones de cierre claras ayudan a controlar los riesgos

Riesgo estratégico

  1. El cruce de medias móviles puede causar retrasos, lo que afecta el momento de entrada
  2. Múltiples condiciones pueden hacer pasar por alto algunas oportunidades comerciales importantes
  3. Puede generar demasiadas señales falsas en un mercado volátil
  4. La configuración incorrecta de los parámetros puede afectar el rendimiento de la estrategia
  5. Es necesario considerar el impacto de los costos de transacción en los retornos de la estrategia

Dirección de optimización de la estrategia

  1. Introducción de filtros de volatilidad para ajustar los parámetros de la estrategia durante períodos de alta volatilidad
  2. Agregue análisis del volumen de operaciones para mejorar la confiabilidad de la señal
  3. Mecanismo adaptativo para optimizar parámetros de media móvil
  4. Añadir un indicador de fuerza de tendencia para mejorar la precisión del juicio de tendencia
  5. Desarrollar un mecanismo dinámico de stop-loss para mejorar las capacidades de control de riesgos

Resumir

Esta estrategia construye un sistema de trading relativamente completo a través de la combinación de múltiples medias móviles e indicadores de impulso. La naturaleza adaptativa de la estrategia y el mecanismo de confirmación múltiple mejoran la confiabilidad de las transacciones. Mediante la optimización y la mejora, se espera que la estrategia mantenga un rendimiento estable en diferentes entornos de mercado. Se recomienda que los operadores realicen pruebas retrospectivas suficientes y optimicen los parámetros antes del uso en tiempo real.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-10 00:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6

//study("Limit order strategy", overlay=true)
strategy('Limit order strategy', overlay = true)

lengthMA = input(1)
lengthmi = input(14)
lengthhigh = input(14)
lengthlow = input(14)

calc_smma(src, len) =>
    smma = 0.0
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    d = ema1 - ema2
    ema1 + d


src = calc_smma(hlc3, lengthMA)
hi = calc_smma(high, lengthhigh)
lo = calc_smma(low, lengthlow)
mi = calc_zlema(src, lengthmi)

plot(src, color = color.new(#FF1493, 0), linewidth = 2, title = 'src')
plot(hi, color = color.new(#7CFC00, 0), linewidth = 2, title = 'hi')
plot(lo, color = color.new(#FF0000, 0), linewidth = 2, title = 'lo')
plot(mi, color = color.new(#00FFFF, 0), linewidth = 2, title = 'mi')


//strategy.order("buy", true, 1, stop = na, when = openbuy) // buy by market if current open great then previous high
//strategy.order("sell", false, 1, stop = na, when = opensell) // sell by market if current open less then previous low
//if src >= mi and src[1] <= mi[1] and src[1] <= lo[1]
//	strategy.entry("buy 1", strategy.long, qty = 15)
sigorderbuy1 = src > mi and src[1] < mi[1] and src < lo and mi < lo
sigorderbuy2 = src > lo and src[1] < lo[1] and mi < lo
sigorderbuy3 = src > hi and src[1] < hi[1] and mi < hi
sigorderbuy4 = src > mi and src[1] < mi[1] and src > hi and mi > hi
//sigorderbuy5 = mi > hi and  src > hi  and src > mi and src[1] < mi[1] 
//sigorderbuy6 = mi < hi and src > hi and src[1] < hi[1]
sigclosebuy = src < mi and src[1] > mi[1] or mi < lo and src < lo and src[1] > lo[1]

sigordersell1 = src < mi and src[1] > mi[1] and src > hi and mi > hi
sigordersell2 = src < hi and src[1] > hi[1] and mi > hi
sigordersell3 = src < lo and src[1] > lo[1] and mi > lo
sigordersell4 = src < mi and src[1] > mi[1] and src < lo and mi < lo
//sigordersell5 = mi < lo and  src < lo  and src < mi and src[1] > mi[1] 
//sigordersell6 = mi > lo and src < lo and src[1] > lo[1]
sigclosesell = src > mi and src[1] < mi[1] or mi > hi and src > hi and src[1] < hi[1]

plot(sigorderbuy1 ? 1 : 0, 'sigorderbuy1')
plot(sigorderbuy2 ? 1 : 0, 'sigorderbuy2')
plot(sigorderbuy3 ? 1 : 0, 'sigorderbuy3')
plot(sigorderbuy4 ? 1 : 0, 'sigorderbuy4')
//plot(sigorderbuy5 ? 1 : 0,"sigorderbuy5") 
//plot(sigorderbuy6 ? 1 : 0,"sigorderbuy6") 

plot(sigordersell1 ? 1 : 0, 'sigordersell1')
plot(sigordersell2 ? 1 : 0, 'sigordersell2')
plot(sigordersell3 ? 1 : 0, 'sigordersell3')
plot(sigordersell4 ? 1 : 0, 'sigordersell4')
//plot(sigordersell5 ? 1 : 0,"sigordersell5") 
//plot(sigordersell6 ? 1 : 0,"sigordersell6")

plot(sigclosebuy ? 1 : 0, 'sigclosebuy')
plot(sigclosesell ? 1 : 0, 'sigclosesell')


openbuy = sigorderbuy1 or sigorderbuy2 or sigorderbuy3 or sigorderbuy4 // or sigorderbuy5 or sigorderbuy6
opensell = sigordersell1 or sigordersell2 or sigordersell3 or sigordersell4 //or sigordersell5 or sigordersell6
openclosebuy = sigclosebuy
openclosesell = sigclosesell

alertcondition(condition = openbuy, title = 'sigorderbuy all', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Buy {{ticker}} sig_b1={{plot("sigorderbuy1")}} sig_b2={{plot("sigorderbuy2")}} sig_b3={{plot("sigorderbuy3")}} sig_b4={{plot("sigorderbuy4")}}"}')
alertcondition(condition = opensell, title = 'sigordersell all', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Sell {{ticker}} sig_s1={{plot("sigordersell1")}} sig_ss={{plot("sigordersell2")}} sig_s3={{plot("sigordersell3")}} sig_s4={{plot("sigordersell4")}} sig_s5={{plot("sigordersell5")}} sig_61={{plot("sigordersell6")}}"}')

alertcondition(condition = sigclosebuy, title = 'Close buy', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Close {{ticker}} T=short"}')
alertcondition(condition = sigclosesell, title = 'Close sell', message = '{"accountmt":"70415621,666734890","time":"15","msg":"Close {{ticker}} T=long"}')

if sigorderbuy1
    strategy.order('Buy 1', strategy.long, 1)
if sigorderbuy2
    strategy.order('Buy 2', strategy.long, 1)
if sigorderbuy3
    strategy.order('Buy 3', strategy.long, 1)
if sigorderbuy4
    strategy.order('Buy 4', strategy.long, 1)


if sigordersell1
    strategy.order('sell 1', strategy.short, 1)
if sigordersell2
    strategy.order('sell 2', strategy.short, 1)
if sigordersell3
    strategy.order('sell 3', strategy.short, 1)
if sigordersell4
    strategy.order('sell 4', strategy.short, 1)
//strategy.order("sell 5", false, 1, when = sigordersell5)
//strategy.order("sell 6", false, 1, when = sigordersell6)