Esta estrategia se basa en las señales de cruz dorada y cruz muerta de las líneas de media móvil ALMA doble, combinadas con las señales largas y cortas del indicador MACD, para lograr posiciones largas y cortas automáticas.
La estrategia utiliza líneas rápidas y lentas construidas a partir de ALMA para construir el doble promedio móvil. La longitud de la línea rápida es de 20 y la línea lenta es de 40, ambas adoptando un desplazamiento de 0.9 y una desviación estándar de 5.
Al mismo tiempo, la estrategia incorpora la señal del histograma del indicador MACD. Sólo cuando el histograma MACD es positivo (ascendente), la señal larga es válida; sólo cuando el histograma MACD es negativo (caída), la señal corta es válida.
La estrategia también establece las condiciones de toma de ganancias y stop loss.
La estrategia combina el juicio de tendencia de la media móvil doble y el juicio de energía del indicador MACD, que puede filtrar eficazmente las señales falsas y mejorar la precisión de la entrada.
Los datos de backtest se adoptan desde 2017, cubriendo múltiples ciclos de conversión de toros y osos. La estrategia todavía tiene un buen rendimiento a través de los períodos. Esto demuestra que la estrategia se adapta a las características lineares y no lineares del mercado.
La estrategia tiene los siguientes riesgos:
Soluciones:
La estrategia también puede optimizarse en los siguientes aspectos:
La estrategia combina con éxito el juicio de tendencia de las medias móviles y el juicio auxiliar del MACD, y establece ganancias razonables y pérdidas de parada, que pueden obtener retornos estables en diversas condiciones de mercado.
/*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')