Cette stratégie utilise le croisement de deux moyennes mobiles pour déterminer les changements dans les tendances du marché et prend des décisions d'achat/vente en fonction de la direction de la tendance.
Le noyau de cette stratégie est constitué de deux moyennes mobiles: un MA rapide (période de défaut 32) et un MA lent (également période de défaut 32, réglable via des paramètres). Lorsque le prix de clôture traverse au-dessus/en dessous du canal formé par ces deux MA, il indique un renversement de tendance et la stratégie génère des signaux d'achat/vente en conséquence:
Grâce à cette méthode de croisement MA, la stratégie peut suivre la tendance, en détenant des positions longues dans les tendances haussières et des positions courtes dans les tendances baissières, jusqu'à ce qu'un signal d'inversion apparaisse.
Pour faire face à ces risques, il peut être envisagé d'ajouter des filtres appropriés, tels que les filtres ATR ou de la plage réelle moyenne, afin de réduire le surtrading sur les marchés de plage; de fixer des stop-loss raisonnables pour contrôler les pertes d'un seul commerce; et d'optimiser continuellement les paramètres pour s'adapter au marché.
Les optimisations ci-dessus peuvent améliorer la capacité de la stratégie à gérer des marchés complexes, mais il faut veiller à éviter une optimisation excessive qui peut entraîner un ajustement de la courbe et de mauvaises performances futures.
La double MA tendance suivant la stratégie capture les tendances à travers les croisements MA. Il est simple, facile à utiliser et largement applicable. Cependant, il fonctionne mal sur les marchés variés, répond de manière inadéquate aux mouvements extrêmes et fait face à des difficultés dans l'optimisation des paramètres.
La stratégie peut être optimisée en introduisant plus d'indicateurs de filtrage, de stop-losses dynamiques, de dimensionnement des positions, d'analyse sur plusieurs délais et de paramètres adaptatifs.
Dans l'ensemble, cette stratégie peut servir de stratégie de base de suivi des tendances, mais elle est difficile à mettre en œuvre seule et convient mieux à un ensemble de stratégies.
/*backtest start: 2023-03-16 00:00:00 end: 2024-03-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //study(title="Demo - SSL Basic", shorttitle="Demo - SSL Basic", overlay=true) strategy(title='Demo - SSL Basic', shorttitle='Demo - SSL Basic', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.15) // Backtest Date Range start_date_long = input(title='Backtest Long Start Date', defval=timestamp('01 Jan 2018 00:00 +0530')) end_date_long = input(title='Backtest Long End Date', defval=timestamp('25 Jan 2030 00:00 +0530')) backtest_range = true // Inputs maType = input.string(title='SSL MA Type', options=['SMA', 'EMA', 'WMA'], defval='SMA') sslLen = input(title='SSL Length', defval=32) showCross = input(title='Show Crossover?', defval=true) showEntry = input(title='Show Entry?', defval=true) showTrend = input(title='Show Trend Colors?', defval=true) // Calc MA for SSL Channel calc_ma(close, len, type) => float result = 0 if type == 'SMA' // Simple result := ta.sma(close, len) result if type == 'EMA' // Exponential result := ta.ema(close, len) result if type == 'WMA' // Weighted result := ta.wma(close, len) result result // Add SSL Channel maHigh = calc_ma(high, sslLen, maType) maLow = calc_ma(low, sslLen, maType) Hlv = int(na) Hlv := close > maHigh ? 1 : close < maLow ? -1 : Hlv[1] sslDown = Hlv < 0 ? maHigh : maLow sslUp = Hlv < 0 ? maLow : maHigh ss1 = plot(sslDown, title='Down SSL', linewidth=2, color=showTrend ? na : color.red) ss2 = plot(sslUp, title='Up SSL', linewidth=2, color=showTrend ? na : color.lime) // Conditions longCondition = ta.crossover(sslUp, sslDown) shortCondition = ta.crossover(sslDown, sslUp) // Strategy if shortCondition strategy.close('Long', comment='Long Exit', alert_message='JSON') if longCondition strategy.close('Short', comment='Short Exit', alert_message='JSON') if backtest_range and longCondition strategy.entry('Long', strategy.long, comment='Long Entry', alert_message='JSON') if backtest_range and shortCondition strategy.entry('Short', strategy.short, comment= 'Short Entry', alert_message='JSON') // Plots fill(ss1, ss2, color=showTrend ? sslDown < sslUp ? color.new(color.lime, transp=75) : color.new(color.red, transp=75) : na, title='Trend Colors')