
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%.
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.
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.
La estrategia tiene los siguientes riesgos:
La solución:
La estrategia también puede ser optimizada en los siguientes aspectos:
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.
/*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')