
La stratégie utilise une moyenne mobile dynamique lisse (ALMA) et une moyenne mobile indicielle lisse (EMA) avec deux paramètres différents pour générer un signal de négociation. La stratégie est également combinée avec une moyenne mobile lisse indicielle aléatoire (RSI stochastique) pour éviter les achats et les ventes excessifs.
Les stratégies utilisent ALMA comme indicateur principal pour déterminer les tendances des prix. ALMA a la fonction de lisser les données de prix et peut filtrer les fluctuations aléatoires des prix.
La stratégie utilise deux lignes EMA de différentes longueurs. Lorsque la ligne EMA rapide traverse la ligne EMA lente vers le haut, elle génère un signal d’achat. Lorsque la ligne EMA rapide traverse la ligne EMA lente vers le bas, elle génère un signal de vente.
Le rôle de l’indicateur RSI stochastique est d’éviter d’émettre des signaux de négociation dans les zones de survente. Il combine les avantages des deux indicateurs RSI et stochastique pour mieux juger les zones de sommet et de basse vallée.
La stratégie exploite pleinement les avantages de l’intersection des EMA pour déterminer la direction de la tendance des prix, en collaboration avec l’indicateur ALMA pour localiser les principales opportunités d’excédent et d’excédent, pour réaliser des transactions en cours.
Les cycles EMA, les paramètres ALMA, etc. offrent un espace d’ajustement, permettant à l’utilisateur d’optimiser les paramètres en fonction de ses besoins, afin de mieux adapter la stratégie à différents environnements de marché.
La stratégie a un paramètre d’arrêt de perte intégré. L’utilisation d’un stop-loss flottant réduit la probabilité que le stop-loss soit poursuivi. Le paramètre de prise de profit permet de verrouiller les bénéfices et d’éviter de les gaspiller.
Dans des situations complexes, les lignes EMA et ALMA peuvent émettre des signaux erronés. Dans ce cas, il faut compter sur le stop-loss pour contrôler les pertes.
Si les paramètres sont mal configurés, les lignes EMA et ALMA ne peuvent pas fonctionner correctement, ce qui augmente le risque de transaction. Il faut tester et optimiser pour choisir la meilleure combinaison de paramètres.
Tester l’optimisation des paramètres de l’EMA et de l’ALMA, en sélectionnant le paramètre le plus optimal.
Il peut être combiné avec d’autres indicateurs pour filtrer les signaux et éviter les pertes de signaux erronés, tels que MACD, KDJ, etc.
Optimiser la marge de stop loss et trouver un équilibre entre la maîtrise des risques et les gains.
Test des variétés différentes et des paramètres cycliques pour adapter la stratégie à un plus grand nombre de marchés
Cette stratégie est une stratégie de suivi de tendance simple et pratique. Elle utilise les EMA pour déterminer la direction de la tendance, les ALMA pour positionner les points de mise et le RSI stochastique pour éviter le risque de survente, tout en définissant des arrêts de perte et des arrêts pour contrôler les risques.
/*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)