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

Sistema de negociación de seguimiento de impulso híbrido de doble cadena EMA

El autor:¿ Qué pasa?, Fecha: 2024-11-29 17:04:57
Las etiquetas:El EMA- ¿Qué es?

img

Resumen general

Esta estrategia es un sistema de negociación innovador basado en promedios móviles exponenciales (EMA), que captura oportunidades de mercado a través de dos cadenas de negociación independientes establecidas en diferentes marcos de tiempo.

Principios de estrategia

La estrategia emplea un diseño de cadena dual, con cada cadena teniendo su lógica de entrada y salida única:

La cadena 1 (Tendencia a largo plazo) utiliza los plazos semanales y diarios:

  • Signales de entrada: Se generan cuando el precio de cierre cruza la EMA en un período semanal
  • Signales de salida: Se generan cuando el precio de cierre se cruza por debajo de la EMA en un período diario.
  • El período de EMA por defecto es de 10, ajustable según sea necesario

La cadena 2 (momento a corto plazo) utiliza marcos de tiempo de 12 horas y 9 horas:

  • Signales de entrada: Se generan cuando el precio de cierre cruza la EMA en un período de 12 horas
  • Se genera cuando el precio de cierre se cruza por debajo de la EMA en un período de 9 horas
  • El período de EMA por defecto es de 9, ajustable según sea necesario.

Ventajas estratégicas

  1. Análisis de mercado multidimensional: captura integral de la tendencia del mercado mediante una combinación de marcos de tiempo
  2. Alta flexibilidad: dos cadenas pueden activarse o desactivarse independientemente
  3. Control de riesgos sólido: la confirmación de marcos de tiempo múltiples reduce las señales falsas
  4. Fuerte adaptabilidad a los parámetros: los períodos y plazos de EMA son ajustables
  5. Funcionalidad completa de backtesting: Configuración integrada del período de prueba para la verificación de la estrategia

Riesgos estratégicos

  1. Riesgo de reversión de la tendencia: Puede presentar retraso en los mercados volátiles
  2. Riesgo de configuración de plazos: los mercados diferentes pueden requerir combinaciones de plazos diferentes.
  3. Riesgo de optimización de parámetros: la optimización excesiva puede dar lugar a un sobreajuste
  4. riesgo de superposición de señales: los disparadores simultáneos de ambas cadenas pueden aumentar el riesgo de posición

Sugerencias para el control de riesgos:

  • Establecer niveles razonables de pérdidas
  • Ajustar los parámetros en función de las características del mercado
  • Realizar pruebas de retroceso exhaustivas antes de la negociación en vivo
  • Tamaño de la posición de control por operación

Direcciones para la optimización de la estrategia

  1. Optimización del filtro de señal:
  • Mecanismo de confirmación de volumen
  • Incorporar indicadores de volatilidad
  • Incluir la confirmación de la fuerza de la tendencia
  1. Optimización del control de riesgos:
  • Desarrollar un mecanismo dinámico de stop-loss
  • Sistema de gestión de la posición de diseño
  • Añadir la funcionalidad de control de extracción
  1. Optimización del plazo:
  • Investigación combinaciones óptimas de plazos
  • Desarrollar mecanismos de calendario adaptativo
  • Añadir la funcionalidad de reconocimiento del estado del mercado

Resumen de las actividades

El sistema de seguimiento de impulso híbrido de cadena doble EMA logra un análisis de mercado multidimensional a través de una combinación innovadora de estrategias de promedio móvil a largo y corto plazo. El diseño del sistema es flexible y se puede ajustar de acuerdo con diferentes condiciones del mercado y estilos de comerciantes, mostrando una gran practicidad. A través del control adecuado del riesgo y la optimización continua, esta estrategia tiene el potencial de lograr retornos estables en el comercio real. Se aconseja a los comerciantes que realicen pruebas de retroceso y optimización de parámetros antes de la implementación en vivo para lograr resultados comerciales óptimos.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='Dual Chain Strategy', shorttitle='DualChain', overlay=true)

// User inputs for enabling/disabling chains
enableChain1 = input.bool(true, title='Enable Chain 1')
enableChain2 = input.bool(true, title='Enable Chain 2')

// User inputs for the first chain
len1 = input.int(10, minval=1, title='Length Chain 1 EMA', group="Chain 1")
src1 = input(close, title='Source Chain 1', group="Chain 1")
tf1_entry = input.timeframe("W", title='Chain 1 Entry Timeframe', group="Chain 1")
tf1_exit = input.timeframe("D", title='Chain 1 Exit Timeframe', group="Chain 1")

// Weekly timeframe EMA for Chain 1
entryEMA1 = request.security(syminfo.tickerid, tf1_entry, ta.ema(src1, len1))

// Daily timeframe EMA for Chain 1
exitEMA1 = request.security(syminfo.tickerid, tf1_exit, ta.ema(src1, len1))

// User inputs for the second chain
len2 = input.int(9, minval=1, title='Length Chain 2 EMA', group="Chain 2")
src2 = input(close, title='Source Chain 2', group="Chain 2")
tf2_entry = input.timeframe("720", title='Chain 2 Entry Timeframe (12H)', group="Chain 2")  // 12 hours
tf2_exit = input.timeframe("540", title='Chain 2 Exit Timeframe (9H)', group="Chain 2")    // 9 hours

// Entry timeframe EMA for Chain 2
entryEMA2 = request.security(syminfo.tickerid, tf2_entry, ta.ema(src2, len2))

// Exit timeframe EMA for Chain 2
exitEMA2 = request.security(syminfo.tickerid, tf2_exit, ta.ema(src2, len2))

// Plotting Chain 1 EMAs
plot(enableChain1 ? entryEMA1 : na, title='Chain 1 Entry EMA', color=color.new(color.blue, 0))
plot(enableChain1 ? exitEMA1 : na, title='Chain 1 Exit EMA', color=color.new(color.yellow, 0))

// Plotting Chain 2 EMAs
plot(enableChain2 ? entryEMA2 : na, title='Chain 2 Entry EMA', color=color.new(color.green, 0))
plot(enableChain2 ? exitEMA2 : na, title='Chain 2 Exit EMA', color=color.new(color.red, 0))

// Backtesting period
startDate = input(timestamp('2015-07-27'), title="StartDate")
finishDate = input(timestamp('2026-01-01'), title="FinishDate")
time_cond = true

// Entry Condition (Chain 1)
bullishChain1 = enableChain1 and ta.crossover(src1, entryEMA1)
bearishChain1 = enableChain1 and ta.crossunder(src1, entryEMA1)

// Exit Condition (Chain 1)
exitLongChain1 = enableChain1 and ta.crossunder(src1, exitEMA1)
exitShortChain1 = enableChain1 and ta.crossover(src1, exitEMA1)

// Entry Condition (Chain 2)
bullishChain2 = enableChain2 and ta.crossover(src2, entryEMA2)
bearishChain2 = enableChain2 and ta.crossunder(src2, entryEMA2)

// Exit Condition (Chain 2)
exitLongChain2 = enableChain2 and ta.crossunder(src2, exitEMA2)
exitShortChain2 = enableChain2 and ta.crossover(src2, exitEMA2)

// Debugging: Plot entry signals for Chain 1
plotshape(bullishChain1, color=color.new(color.green, 0), style=shape.labelup, text='BUY C1', location=location.belowbar)
plotshape(bearishChain1, color=color.new(color.red, 0), style=shape.labeldown, text='SELL C1', location=location.abovebar)

// Debugging: Plot entry signals for Chain 2
plotshape(bullishChain2, color=color.new(color.green, 0), style=shape.labelup, text='BUY C2', location=location.belowbar)
plotshape(bearishChain2, color=color.new(color.red, 0), style=shape.labeldown, text='SELL C2', location=location.abovebar)

// Trade Execution for Chain 1
if bullishChain1 and time_cond
    strategy.entry('BUY_Chain_1', strategy.long)

if bearishChain1 and time_cond
    strategy.entry('SELL_Chain_1', strategy.short)

// Exit trades based on daily conditions for Chain 1
if exitLongChain1 and strategy.opentrades > 0
    strategy.close(id='BUY_Chain_1', when=exitLongChain1)

if exitShortChain1 and strategy.opentrades > 0
    strategy.close(id='SELL_Chain_1', when=exitShortChain1)

// Trade Execution for Chain 2
if bullishChain2 and time_cond
    strategy.entry('BUY_Chain_2', strategy.long)

if bearishChain2 and time_cond
    strategy.entry('SELL_Chain_2', strategy.short)

// Exit trades based on daily conditions for Chain 2
if exitLongChain2 and strategy.opentrades > 0
    strategy.close(id='BUY_Chain_2', when=exitLongChain2)

if exitShortChain2 and strategy.opentrades > 0
    strategy.close(id='SELL_Chain_2', when=exitShortChain2)

// Close all positions outside the backtesting period
if not time_cond
    strategy.close_all()


Relacionados

Más.