Estrategia de ruptura de media móvil doble


Fecha de creación: 2023-12-11 15:21:58 Última modificación: 2023-12-11 15:21:58
Copiar: 0 Número de Visitas: 637
1
Seguir
1621
Seguidores

Estrategia de ruptura de media móvil doble

Descripción general

Una estrategia de seguimiento de tendencias basada en el cruce de promedios móviles en dos períodos diferentes como una señal de compra y venta. La estrategia utiliza una media rápida y una media lenta como punto de entrada de la operación, luego de la cruza, determina la dirección de la tendencia y establece una posición de ventaja o de ventaja correspondiente.

Principio de estrategia

La estrategia utiliza dos promedios móviles: un MA rápido y un MA lento. El ciclo de MA rápido generalmente se configura como un período más corto (como un período de 15), para capturar cambios en los precios a corto plazo; el ciclo de MA lento generalmente se configura como un período más largo (como un período de 21), para determinar la dirección de la tendencia principal. La señal de negociación de la estrategia proviene de la intersección de dos MA: una señal de compra cuando el MA rápido atraviesa el MA lento sobre el MA rápido; una señal de venta cuando el MA rápido atraviesa el MA lento debajo del MA rápido.

Al configurar diferentes combinaciones de MA, se puede ajustar la duración de la estrategia para capturar tendencias. Las combinaciones de MA más cortas pueden capturar oportunidades de cambio de precios en períodos más cortos; Las combinaciones de MA más largas pueden filtrar las oscilaciones y capturar solo tendencias en niveles de línea más largos.

La estrategia también incluye módulos de gestión de riesgos: stop loss, stop loss, stop loss móvil. Esto puede limitar la pérdida máxima de una sola operación y ayudar a proteger los beneficios generales.

Ventajas estratégicas

La estrategia de doble línea de equilibrio tiene las siguientes ventajas:

  1. El concepto es simple, fácil de entender y de implementar.
  2. Se pueden capturar tendencias de diferentes longitudes de tiempo ajustando los ciclos de MA para adaptarse a diferentes entornos de mercado;
  3. La mayoría de los países de la región tienen una economía más estable, evitando transacciones demasiado frecuentes.
  4. La combinación de los paradores de pérdidas permite un control eficaz del riesgo.
  5. Fácil de optimizar, puede ajustar el ciclo de MA, los parámetros de gestión de riesgos, etc., para mejorar aún más la eficacia.

Análisis de riesgos

La estrategia de doble línea de equilibrio también tiene ciertos riesgos, que se centran en los siguientes aspectos:

  1. Durante la fase de reajuste de la oscilación, las señales de cruce de MA pueden ser demasiado frecuentes, lo que genera problemas de frecuencia de transacción excesiva.
  2. El retraso entre dos líneas de paridad puede haber perdido el punto de inflexión de los precios y no haber detenido los pérdidas a tiempo.
  3. La falta de filtración eficaz de las brechas falsas puede generar pérdidas innecesarias.
  4. La MA es muy lenta a la hora de reaccionar a los precios, y no puede seguir los movimientos de los mismos.

Estos riesgos pueden ser mejorados y optimizados por medio de ajustes en los parámetros de MA, la adición de condiciones de filtración y la optimización de la lógica de stop loss.

Dirección de optimización

Las estrategias de doble línea pueden ser optimizadas en los siguientes aspectos:

  1. Se añaden filtros como el volumen de transacciones o los indicadores de fluctuación para evitar la construcción frecuente de bases de operaciones durante los temblores y las falsas rupturas.
  2. El ciclo y la combinación de MA se pueden diversificar para adaptarse a las características de diferentes ciclos y variedades;
  3. Puede probar diferentes tipos de MA, como EMA, LWMA, etc., para seleccionar la forma de MA más sensible a la reacción al precio;
  4. La introducción de algoritmos de aprendizaje automático para optimizar los parámetros MA y los parámetros más altos, como la amplitud de deterioro.
  5. Se pueden probar diferentes métodos de parada, como parada de salto, parada de seguimiento, parada promedio, etc.

Con estas optimizaciones y mejoras, se puede mejorar significativamente la probabilidad de éxito, la rentabilidad y la rentabilidad del riesgo de la estrategia.

Resumir

La estrategia de ruptura de doble línea es una estrategia de seguimiento de tendencias que es fácil de implementar y optimizar en general. Tiene ventajas como la simplicidad de operación, la flexibilidad de ajuste y el control de riesgos, y es muy adecuada como estrategia de entrada para el comercio cuantitativo. A través de pruebas y optimización continuas, esta estrategia puede mejorar continuamente y tiene el potencial de ser una estrategia de optimización cualitativa.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-10 00:00:00
end: 2023-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)

maFastSource   = input(defval = ohlc4, title = "Fast MA Source")
maFastLength   = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource   = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit   = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

useTimeLimit    = input(defval = true, title = "Use Start Time Limiter?")
startYear       = input(defval = 2018, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() =>
    inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
    timeOk = time > inputTime ? true : false
    r = (useTimeLimit and timeOk) or not useTimeLimit

maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)

fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)

aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

if( startTimeOk() )
    enterLong = not tradeDirection[1] and tradeDirection
    exitLong = tradeDirection[1] and not tradeDirection
    strategy.entry( id = "Long", long = true, when = enterLong )
    //strategy.close( id = "Long", when = exitLong )
    
    enterShort = tradeDirection[1] and not tradeDirection
    exitShort = not tradeDirection[1] and tradeDirection
    strategy.entry( id = "Short", long = false, when = enterShort )
    //strategy.close( id = "Short", when = exitShort )
    
    strategy.exit("Exit Long", from_entry = "Long",  profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
    strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)