En la carga de los recursos... Cargando...

Estrategia de negociación de ruptura de impulso multi-MA adaptativa

El autor:¿ Qué pasa?, Fecha: 2025-01-10 15:27:53
Las etiquetas:El número de personas afectadasZLEMAEl EMA- ¿Qué es?La SMA

 Adaptive Multi-MA Momentum Breakthrough Trading Strategy

Resumen general

Esta es una estrategia de trading basada en múltiples promedios móviles y avance de impulso. La estrategia combina indicadores técnicos como SMMA (Smoothed Moving Average) y ZLEMA (Zero-Lag Exponential Moving Average) para identificar oportunidades de trading mediante la captura de señales de cruce entre precio y promedios móviles. La estrategia emplea un mecanismo adaptativo que ajusta la sensibilidad de la señal basada en la volatilidad del mercado para mejorar la precisión de trading.

Principio de la estrategia

La estrategia utiliza cuatro promedios móviles clave: src (SMMA basado en HLC3), hi (SMMA basado en alto), lo (SMMA basado en bajo) y mi (ZLEMA basado en src). Las señales de negociación se basan principalmente en las relaciones de cruce y posiciones relativas entre estos promedios móviles. La combinación de múltiples condiciones de señal garantiza la confiabilidad de las señales de negociación. Las señales de compra incluyen cuatro combinaciones de condiciones diferentes, y las señales de venta también incluyen cuatro combinaciones de condiciones diferentes. Las señales de salida se basan en cruces de precios con el promedio mi y posiciones relativas entre los promedios móviles.

Ventajas estratégicas

  1. Mecanismo de confirmación de señales múltiples mejora la precisión de las operaciones
  2. Las características de adaptación permiten que la estrategia se adapte a diferentes entornos de mercado
  3. El uso de SMMA y ZLEMA reduce el impacto de las señales falsas
  4. El sistema de señales en capas proporciona más oportunidades comerciales
  5. Las condiciones claras de salida ayudan a controlar el riesgo

Riesgos estratégicos

  1. Los cruces de promedio móvil pueden producir retraso, lo que afecta al tiempo de entrada
  2. Las condiciones múltiples pueden perder algunas oportunidades comerciales importantes
  3. Puede generar señales falsas excesivas en mercados inestables
  4. La configuración incorrecta de los parámetros puede afectar el rendimiento de la estrategia
  5. Necesidad de considerar el impacto de los costes de negociación en los rendimientos de la estrategia

Direcciones para la optimización de la estrategia

  1. Introducir filtros de volatilidad para ajustar los parámetros de la estrategia durante los períodos de alta volatilidad
  2. Añadir análisis de volumen para mejorar la fiabilidad de la señal
  3. Optimizar el mecanismo de adaptación de los parámetros de la media móvil
  4. Añadir indicadores de fuerza de tendencia para mejorar la precisión del juicio de tendencia
  5. Desarrollar mecanismos dinámicos de suspensión de pérdidas para mejorar el control de riesgos

Resumen de las actividades

La estrategia construye un sistema comercial relativamente completo a través de la combinación de múltiples promedios móviles e indicadores de impulso. Las características adaptativas de la estrategia y los múltiples mecanismos de confirmación mejoran la confiabilidad de la negociación. A través de la optimización y el refinamiento, la estrategia tiene el potencial de mantener un rendimiento estable en diferentes entornos de mercado. Se aconseja a los comerciantes que realicen pruebas de retroceso y optimización de parámetros antes de la negociación en vivo.


/*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)


Relacionados

Más.