Estrategia cuantitativa de cruces dorados y cruces muertos con doble media móvil


Fecha de creación: 2023-12-05 10:24:34 Última modificación: 2023-12-05 10:24:34
Copiar: 0 Número de Visitas: 704
1
Seguir
1619
Seguidores

Estrategia cuantitativa de cruces dorados y cruces muertos con doble media móvil

Descripción general

Esta estrategia se basa en la señal de la horquilla dorada de las medias móviles ALMA dobles, en combinación con la señal de la horquilla de la MACD, para realizar automáticamente más tomas de vacío. La estrategia se aplica a períodos de tiempo de 4 horas o más, los datos de prueba son BNB/USDT, el período de tiempo es de 2017 a la fecha, la tarifa se establece en 0.03%.

Principio de estrategia

La estrategia utiliza ALMA para construir una media móvil doble de línea rápida y lenta. La longitud de la línea rápida es de 20 y la longitud de la línea lenta es de 40, y cada una de ellas tiene un desplazamiento de 0.9, con una diferencia estándar de 5. Se genera una señal múltiple cuando la línea rápida atraviesa la línea lenta y una señal de vacío cuando la línea rápida atraviesa la línea lenta.

Al mismo tiempo, la estrategia combina la señal de diagrama recto con el indicador MACD. La señal de recto es válida solo cuando el diagrama MACD es positivo (aumento) y la señal de recto es válida solo cuando el diagrama MACD es negativo (descenso) y la señal de recto es válida.

La estrategia también establece las condiciones de stop-loss. Hacer un stop-loss de más es 2 veces, el stop-loss es de 0,2 veces; hacer un stop-loss de más es 0.05 veces, el stop-loss es de 1 veces.

Análisis de las ventajas

Esta estrategia, combinada con el juicio de tendencia de las medias móviles dobles y el juicio de energía del indicador MACD, puede filtrar eficazmente las falsas señales y mejorar la precisión de la entrada. La configuración de stop loss es razonable, maximiza el bloqueo de ganancias y evita grandes pérdidas.

Los datos retrospectivos adoptados desde 2017, que incluyen varias conversiones de bulls y bears, demuestran que la estrategia sigue funcionando bien en condiciones de ciclo transversal, lo que demuestra que la estrategia se adapta a las características lineales y no lineales del mercado.

Análisis de riesgos

La estrategia tiene los siguientes riesgos:

  1. El propio promedio móvil doble está atrasado y puede perder oportunidades de línea corta.
  2. La estrategia no generará una señal si el MACD es cero
  3. El Stop Loss Ratio está preestablecido y puede diferir de la realidad.

La solución:

  1. Reducir adecuadamente el ciclo de las medias móviles y aumentar la sensibilidad a las líneas cortas
  2. Optimización de los parámetros MACD para que el diagrama fluctue con mayor frecuencia
  3. Ajuste dinámico de la configuración de la parada de frenado

Dirección de optimización

La estrategia también puede ser optimizada en los siguientes aspectos:

  1. Experimentar con diferentes tipos de medias móviles en busca de un mejor efecto de suavización
  2. Optimización de los parámetros de las medias móviles y MACD para adaptarse a diferentes variedades y períodos
  3. Añadir condiciones adicionales, como cambios en el volumen de transacciones, para filtrar señales
  4. Ajuste en tiempo real de la proporción de stop loss para una estrategia más adaptable

Resumir

Esta estrategia combina con éxito la determinación de tendencias de las medias móviles y la determinación auxiliar del MACD, y establece un stop-loss razonable que permite obtener ganancias estables en una variedad de situaciones. La estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más mediante la configuración de parámetros de optimización continua y la adición de condiciones de filtración adicionales.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-04 00:00:00
end: 2023-12-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99

//@version=4
strategy(title = "Full Crypto Swing Strategy ALMA Cross", overlay = true,  pyramiding=1,initial_capital = 1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.03)

//time condition
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2010, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2031, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate

UseHAcandles    = input(false, title="Use Heikin Ashi Candles in Algo Calculations")

haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
haOpen  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
haHigh  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
haLow   = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low

//alma fast and slow
src = haClose
windowsize = input(title="Length Size Fast", type=input.integer, defval=20)
windowsize2 = input(title="Length Size Slow", type=input.integer, defval=40)
offset = input(title="Offset", type=input.float, defval=0.9, step=0.05)
sigma = input(title="Sigma", type=input.float, defval=5)
outfast=alma(src, windowsize, offset, sigma)
outslow=alma(src, windowsize2, offset, sigma)

//macd
fast_length = input(title="Fast Length", type=input.integer, defval=6)
slow_length = input(title="Slow Length", type=input.integer, defval=25)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)

// Calculating
fast_ma = ema(src, fast_length)
slow_ma =  ema(src, slow_length)
macd = fast_ma - slow_ma
signal = ema(macd, signal_length)
hist = macd - signal

long=crossover(outfast,outslow) and hist > hist[1] and time_cond
short=crossunder(outfast,outslow) and hist < hist[1] and time_cond

takeProfit_long=input(2.0, step=0.005)
stopLoss_long=input(0.2, step=0.005)
takeProfit_short=input(0.05, step=0.005)
stopLoss_short=input(1.0, step=0.005)

strategy.entry("long",1,when=long)
strategy.entry("short",0,when=short)

strategy.exit("short_tp/sl", "long", profit=close * takeProfit_long / syminfo.mintick, loss=close * stopLoss_long / syminfo.mintick, comment='LONG EXIT',  alert_message = 'closeshort')
strategy.exit("short_tp/sl", "short", profit=close * takeProfit_short / syminfo.mintick, loss=close * stopLoss_short / syminfo.mintick, comment='SHORT EXIT',  alert_message = 'closeshort')