Esta estratégia baseia-se nos sinais de cruz de ouro e cruz morta das linhas médias móveis duplas ALMA, combinados com os sinais longos e curtos do indicador MACD, para alcançar posições longas e curtas automáticas.
A estratégia usa linhas rápidas e lentas construídas a partir do ALMA para construir a média móvel dupla. O comprimento da linha rápida é de 20 e a linha lenta é de 40, ambas adotando um deslocamento de 0,9 e um desvio padrão de 5.
Ao mesmo tempo, a estratégia incorpora o sinal do histograma do indicador MACD. Somente quando o histograma MACD é positivo (ascendente), o sinal longo é válido; somente quando o histograma MACD é negativo (caindo), o sinal curto é válido.
A estratégia também define as condições de take profit e stop loss. O take profit longo é 2 vezes e o stop loss é 0,2 vezes; o short take profit é 0,05 vezes e o stop loss é 1 vez.
A estratégia combina o julgamento da tendência da média móvel dupla e o julgamento da energia do indicador MACD, que pode efetivamente filtrar falsos sinais e melhorar a precisão da entrada.
Os dados do backtest são adotados desde 2017, cobrindo vários ciclos de conversão de touros e ursos. A estratégia ainda tem um bom desempenho em todos os períodos. Isso prova que a estratégia se adapta às características de linearidade e não linearidade do mercado.
A estratégia apresenta os seguintes riscos:
Soluções:
A estratégia pode também ser otimizada nos seguintes aspectos:
A estratégia combina com sucesso o julgamento da tendência das médias móveis e o julgamento auxiliar do MACD, e define lucros razoáveis e stop losses, que podem obter retornos estáveis em várias condições 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')