Momentum Stratégie de croisement de la moyenne mobile lisse et de la moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-11-27 17h35 et 09 min
Les étiquettes:

img

Résumé

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.

Principe de stratégie

Ligne de mouvement ALMA

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.

Croisement rapide et lent de l'EMA

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.

RSI stochastique

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.

Analyse des avantages

Opérations selon les tendances

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.

Paramètres réglables

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é.

Mécanisme de stop-loss et de prise de profit

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.

Analyse des risques

Une mauvaise appréciation de la tendance

Dans les marchés complexes, les lignes EMA et ALMA peuvent émettre des signaux erronés.

Réglage des paramètres incorrect

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.

Optimisation de la stratégie

  1. Testez et optimisez les paramètres de l'EMA et de l'ALMA pour sélectionner les paramètres optimaux.

  2. Incorporer d'autres indicateurs pour filtrer les signaux et éviter les pertes causées par des signaux erronés. tels que MACD, KDJ, etc.

  3. Optimiser l'ampleur du stop loss pour trouver un équilibre entre le contrôle des risques et la rentabilité.

  4. Tester différentes variétés et paramètres de cycle pour appliquer la stratégie à un plus grand nombre de marchés.

Résumé

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)


Plus de