Cette stratégie utilise le croisement de la ligne de moyenne mobile fluide de l'élan (ALMA) et de deux lignes de moyenne mobile exponentielle (EMA) avec des paramètres différents pour générer des signaux de trading.
La stratégie utilise ALMA comme indicateur principal pour juger de la tendance des prix. ALMA a la fonction de lisser les données des prix et peut filtrer les fluctuations aléatoires des prix. En ajustant la période, la valeur de compensation et les paramètres sigma d'ALMA, il peut être rendu plus sensible ou stable. Lorsque les prix augmentent, ALMA affichera en vert, et lorsque les prix baissent, ALMA affichera en rouge.
La stratégie utilise deux lignes EMA de longueurs différentes. Lorsque la ligne EMA rapide traverse au-dessus de la ligne EMA lente, un signal d'achat est généré. Lorsque la ligne EMA rapide traverse au-dessous de la ligne EMA lente, un signal de vente est généré. Le croisement EMA a une bonne capacité de jugement des tendances. Les périodes des EMA rapides et lentes peuvent être ajustées à travers des paramètres pour s'adapter à différentes variétés et cycles de trading.
Le rôle de l'indicateur stochastique RSI est d'éviter d'émettre des signaux de trading dans des zones de surachat et de survente. Il combine les avantages de l'indicateur RSI et de l'indicateur stochastique, et peut mieux déterminer les zones de pic et de creux.
La stratégie utilise pleinement le croisement EMA pour déterminer la direction de la tendance des prix, combiné à l'indicateur ALMA pour localiser les principales opportunités longues et courtes de mise en œuvre du trading de tendance.
Les périodes des paramètres EMA et ALMA offrent un espace réglable. Les utilisateurs peuvent optimiser les paramètres en fonction de leurs besoins pour que la stratégie s'adapte mieux aux différents environnements de marché.
L'utilisation d'un stop loss flottant peut réduire la probabilité d'un stop loss poursuivi; les paramètres de prise de profit peuvent bloquer les profits et éviter de les éliminer.
Dans les marchés complexes, les lignes EMA et ALMA peuvent émettre des signaux erronés.
Si les paramètres sont définis de manière incorrecte, les lignes EMA et ALMA ne peuvent pas fonctionner correctement, ce qui augmentera les risques de négociation.
Testez et optimisez les paramètres de l'EMA et de l'ALMA pour sélectionner les paramètres optimaux.
Incorporer d'autres indicateurs pour filtrer les signaux et éviter les pertes causées par des signaux erronés. tels que MACD, KDJ, etc.
Optimiser l'ampleur du stop loss pour trouver un équilibre entre le contrôle des risques et la rentabilité.
Tester différentes variétés et paramètres de cycle pour appliquer la stratégie à un plus grand nombre de marchés.
Dans l'ensemble, il s'agit d'une stratégie de suivi de tendance simple et pratique. Elle utilise le croisement EMA pour déterminer la direction de la tendance, l'indicateur ALMA pour localiser les points d'ajout, le RSI stochastique pour éviter les risques de surachat et de survente, tout en définissant un stop loss et un profit pour contrôler les risques. Grâce à l'ajustement des paramètres et à l'optimisation des indicateurs, cette stratégie peut obtenir de bons résultats.
/*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)