Esta estratégia usa o cruzamento da Linha de Média Móvel Limpa de Momento (ALMA) e duas Linhas de Média Móvel Exponencial (EMA) com configurações de parâmetros diferentes para gerar sinais de negociação.
A estratégia usa o ALMA como o principal indicador para julgar a tendência de preços. O ALMA tem a função de suavizar os dados de preços e pode filtrar flutuações aleatórias nos preços. Ao ajustar o período, o valor de compensação e os parâmetros sigma do ALMA, ele pode ser mais sensível ou estável.
A estratégia usa duas linhas EMA com comprimentos diferentes. Quando a linha EMA rápida cruza acima da linha EMA lenta, um sinal de compra é gerado. Quando a linha EMA rápida cruza abaixo da EMA lenta, um sinal de venda é gerado. O cruzamento da EMA tem boa capacidade de julgamento de tendências. Os períodos das EMA rápidas e lentas podem ser ajustados através de parâmetros para se adaptar a diferentes variedades e ciclos de negociação.
O papel do indicador Stochastic RSI é evitar a emissão de sinais de negociação em áreas de sobrecompra e sobrevenda. Ele combina as vantagens de ambos os indicadores RSI e Stochastic, e pode determinar melhor as áreas de pico e de baixa.
A estratégia faz pleno uso do crossover da EMA para determinar a direcção da tendência dos preços, combinado com o indicador ALMA para localizar as principais oportunidades longas e curtas de implementação da negociação de tendências.
Os períodos dos parâmetros EMA e ALMA fornecem espaço ajustável. Os usuários podem otimizar os parâmetros de acordo com suas necessidades para tornar a estratégia melhor adaptada a diferentes ambientes de mercado.
A estratégia tem configurações de stop loss e take profit embutidas.
Em mercados complexos, as linhas EMA e ALMA podem emitir sinais errados.
Se os parâmetros forem definidos incorretamente, as linhas EMA e ALMA não poderão funcionar corretamente, o que aumentará os riscos de negociação.
Teste e otimize as definições dos parâmetros da EMA e da ALMA para selecionar os parâmetros ideais.
Incorporar outros indicadores para filtrar sinais e evitar perdas causadas por sinais errados, como MACD, KDJ, etc.
Otimizar a magnitude do stop loss para encontrar um equilíbrio entre controlo de risco e rentabilidade.
Testar diferentes variedades e parâmetros do ciclo para aplicar a estratégia a mais mercados.
Em geral, esta é uma estratégia de rastreamento de tendências simples e prática. Ele usa o cruzamento EMA para determinar a direção da tendência, o indicador ALMA para localizar pontos adicionais, o RSI estocástico para evitar riscos de sobrecompra e sobrevenda, enquanto define stop loss e take profit para controlar riscos. Através do ajuste de parâmetros e otimização de indicadores, esta estratégia pode alcançar bons resultados. É fácil de entender e usar, e também tem uma certa adaptabilidade.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 ////Arranged by @ClassicScott //Strategy Created by @CheatCode1 strategy('ALMA/EMA Strategy', shorttitle='ALMA/EMA Strategy', overlay=true ) ////Source Selection & ALMA Variables //Dominant Momentum ALMA dsource = input.source(close, title='Source', group='Dominant ALMA') dperiod = input.int(title='Period', defval=130, group='Dominant ALMA') doffset = input.float(title='Offset', step=0.025, defval=0.775, group='Dominant ALMA') dsigma = input.float(title='Sigma', step=0.5, defval=4.5, group='Dominant ALMA') dalma = ta.alma(dsource, dperiod, doffset, dsigma) dalma_up_color = input.color(#66bb6a, 'Going Up!', group='Dominant ALMA', inline = '1') dalma_down_color = input.color(#ef5350, 'Going Down :(', group='Dominant ALMA', inline = '1') dcolor = close[1] > dalma ? dalma_up_color : dalma_down_color ////ALMA Plots plot(dalma, color=dcolor, style=plot.style_stepline, linewidth=2, title='Dominant Momentum MA') //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 cheatcode = input.bool(true, '-----------CHEATC0DE1------------', group = 'Strategy Inputs', confirm = true) //Variable Declerations/Plot Assingments inp1 = input.int(49, 'Slow Ema Length', 1, 100, group = 'Strategy Inputs', confirm = true) inp2 = input.int(9, 'Fast Ema Length', 1, 200, group = 'Strategy Inputs', confirm = true) inp3 = int(200) sma1 = ta.sma(close, inp3) ema1 = ta.ema(close, inp1) ema2 = ta.ema(close, inp2) eplot1 = plot(ema1, 'Slow Ema', color.aqua, 1, plot.style_linebr) eplot2 = plot(ema2, 'Fast Ema', color.yellow, 1, plot.style_linebr) splot1 = plot(sma1, 'Long MA', close[1] < sma1 ? color.red:color.green, 1, plot.style_line, display = display.none) cross1 = ta.crossover(ema1, ema2) cross2 = ta.crossunder(ema1, ema2) plotchar(cross1, '', '↑', location.belowbar, close[1] > dalma and dalma > sma1 ? na:color.green, size = size.normal, editable = false) plotchar(cross2, '', '↓', location.abovebar, close[1] < dalma and dalma < sma1 ? na:color.red, size = size.normal, editable = false) bgcolor(cross1 and close[1] > dalma ? color.new(color.green, 80):cross2 and close[1] < dalma ? color.new(color.red, 80):na) valueL = ta.valuewhen(cross1 and close[1] > dalma, close, 0) valueS = ta.valuewhen(cross2 and close[1] < dalma, close, 0) //Entries if cross1 and close[2] > dalma[2] and close[1] > dalma[1] strategy.entry('Long', strategy.long) if cross2 and close[2] < dalma[2] and close[1] < dalma[1] strategy.entry('Short', strategy.short) //StochRsi smoothK = input.int(3, "K", minval=1) smoothD = input.int(15, "D", minval=1) lengthRSI = input.int(14, "RSI Length", minval=1) lengthStoch = input.int(8, "Stochastic Length", minval=1) src = input(close, title="RSI Source") rsi1 = ta.rsi(src, lengthRSI) k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = ta.sma(k, smoothD) //Cancellations if k > 75 strategy.cancel('Long') if k < 25 strategy.cancel('Short') //Closures if ta.crossunder(k, d) and k > 92 strategy.close('Long') if ta.crossover(k,d) and k < 8 strategy.close('Short') //Exit Percents takeP = input.float(3, title='Take Profit', group = 'Take Profit and Stop Loss') / 100 stopL = input.float(5.49, title = 'Stop Loss', group = 'Take Profit and Stop Loss')/100 // Pre Directionality Stop_L = strategy.position_avg_price * (1 - stopL) Stop_S = strategy.position_avg_price * (1 + stopL) Take_S= strategy.position_avg_price * (1 - takeP) Take_L = strategy.position_avg_price * (1 + takeP) //Post Excecution if strategy.position_size > 0 strategy.exit("Flat", limit=Take_L, stop = Stop_L) if strategy.position_size < 0 strategy.exit("Flat", limit=Take_S, stop = Stop_S)