
Esta estratégia é baseada no sinal de forquilha dourada da média móvel dupla ALMA, combinado com o sinal de forquilha do MACD, para realizar o fechamento automático. A estratégia é válida para períodos de 4 horas ou mais, os dados de teste são BNB/USDT, o período de 2017 até o presente, a taxa de taxa de pagamento é de 0,03% .
A estratégia usa a linha rápida e a linha lenta ALMA para construir uma média móvel dupla. A linha rápida tem 20 e a linha lenta tem 40, cada uma com um deslocamento de 0,9 e um diferencial padrão de 5 . Quando a linha rápida atravessa a linha lenta, é gerado um sinal múltiplo. Quando a linha rápida atravessa a linha lenta, é gerado um sinal de vazio.
Ao mesmo tempo, a estratégia combina o sinal de retângulo do indicador MACD. O sinal de retângulo é válido somente quando o retângulo MACD é positivo (ascendente) e o sinal de retângulo é válido somente quando o retângulo MACD é negativo (decrescente).
A estratégia simultaneamente estabelece um stop loss condicional. Fazer um stop loss de 2 vezes, o stop loss é de 0,2 vezes; fazer um stop stop de 0,05 vezes, o stop loss é de 1 vez.
Esta estratégia, combinada com o julgamento de tendências de médias móveis duplas e o julgamento de energia do indicador MACD, pode filtrar efetivamente os falsos sinais e melhorar a precisão da entrada. A configuração de stop loss é razoável, maximizando o lucro e evitando grandes perdas.
Os dados retrospectivos adotados desde 2017 incluem várias conversões de alta e baixa, o que demonstra que a estratégia se adapta às características lineares e não-lineares do mercado.
A estratégia tem os seguintes riscos:
Solução:
A estratégia também pode ser melhorada em alguns aspectos:
Esta estratégia combina com sucesso o julgamento de tendências de médias móveis e o julgamento auxiliar do MACD, e configura um stop loss razoável, que permite obter ganhos estáveis em vários cenários. A estabilidade e a lucratividade da estratégia podem ser ainda melhoradas por meio de configurações de parâmetros de otimização contínua e adição de condições de filtragem adicionais.
/*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')