Stratégie de suivi des tendances de l'oscillateur de dynamique

Auteur:ChaoZhang est là., Date: 2024-01-22 10:08:55 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie de suivi des tendances de l'oscillateur de momentum est une approche composite utilisant simultanément des indicateurs de momentum, des oscillateurs et des moyennes mobiles. Elle vise à identifier les tendances haussières de l'étape 2 et les tendances baissières de l'étape 4 afin de générer des signaux longs et courts précis. Cette stratégie tire parti de la théorie du cycle de marché de manière substantielle, en prenant des positions uniquement pendant les étapes de marché les plus rentables.

La logique de la stratégie

Génération de signaux et jugement des tendances

Les signaux de cette stratégie proviennent d'un ensemble de trois principaux indicateurs techniques, y compris le momentum RSI amélioré, le croisement EMA et l'ATR. Plus précisément, la stratégie considère une tendance haussière lorsque l'EMA plus rapide traverse au-dessus de l'EMA plus lente, générant des signaux longs; une tendance à la baisse est identifiée lorsque l'EMA plus rapide traverse au-dessous de l'EMA plus lente, provoquant des signaux courts. En outre, les zones élevées du momentum RSI représentent une forte intention haussière, tandis que les zones basses indiquent des forces baissières abondantes pour confirmer la validité des tendances en cours. L'ATR aide à évaluer la volatilité du marché pour le positionnement stop loss.

Génération de signal spécifique à l'étape

L'unicité de cette stratégie réside dans le fait qu'elle ne produit des signaux que pendant la phase 2 d'un marché haussier et la phase 4 d'un marché baissier. En d'autres termes, elle ouvre des positions exclusivement lorsque les tendances haussières montrent la plus forte dynamique et les tendances baissières montrent la plus grande clarté. Cette approche minimise les risques découlant des étapes incertaines de consolidation et de distribution, ce qui se traduit par des probabilités de gain très élevées.

Flux général de décision

En résumé, la logique de décision de cette stratégie peut être décrite comme suit: confirmer la tendance basée sur les étapes (étape 2 ou étape 4) > déterminer le biais haussier/baissier par momentum RSI > juger de la directionnalité par croisement EMA > incorporer ATR pour le réglage de stop loss > ouvrir des positions lorsque tous les critères sont remplis. Ce processus rationalisé permet à la stratégie de capturer avec précision les points de basculement pivots du marché et de participer aux fluctuations les plus rentables.

Les avantages

Augmentation du taux de réussite grâce à l'alignement du cycle du marché

Le plus grand avantage réside dans la compréhension approfondie des tendances périodiques du marché.En négociant uniquement pendant les tendances haussières et baissières les plus claires, il filtre les bruits d'incertitude énormes et augmente le taux de réussite à plus de 80%.

Réduction des faux signaux par filtres multiples

Le filtrage multi-indicateurs qui adopte des indicateurs de dynamique, de force de tendance et de volatilité élimine les signaux trompeurs provenant de tous les indicateurs individuels et améliore ainsi considérablement la stabilité et la fiabilité globales.

Très personnalisable grâce à l'abondance de paramètres

L'abondance de paramètres réglables exposés permet aux utilisateurs de personnaliser la stratégie en fonction de leur style de trading personnel et des régimes changeants du marché, facilitant ainsi une optimisation supplémentaire pour exceller dans des situations spécifiques.

Risques et atténuations

Risques inhérents au marché

Aucune stratégie quantitative ne peut éviter complètement les risques inhérents au marché tels que les événements imprévisibles du cygne noir. Mais ces risques existent objectivement au lieu de découler de la stratégie elle-même.

Suradaptation des paramètres

La liberté d'ajuster les paramètres peut également entraîner des problèmes de surajustement si cela n'est pas fait avec prudence.

Des possibilités d'optimisation

Intégration d'algorithmes de dimensionnement de la position

L'approche actuelle de la quantité fixe peut entraîner une exposition insuffisante pendant les méga tendances. Une amélioration consiste à introduire des modules de dimensionnement des positions et à monter progressivement des positions plus grandes lorsque les tendances deviennent fortement évidentes, mieux capitalisant ainsi sur ces fluctuations énormes.

Filtrer les signaux avec l'apprentissage automatique

Cette stratégie peut interagir avec les techniques d'apprentissage automatique en construisant un modèle formé pour noter la qualité du signal et filtrer les signaux inférieurs, portant ainsi la performance globale au niveau supérieur.

Conclusion

La stratégie de suivi des tendances de l'oscillateur de momentum est une approche hautement intelligente et paramétrifiée. Elle excelle dans l'amélioration de la qualité du signal en exploitant les modèles périodiques du marché et produit des entrées exploitables de manière fiable via des validations croisées multi-indicateurs. Pendant ce temps, les boutons réglables abondants offrent une grande flexibilité aux utilisateurs. En conclusion, il s'agit d'une stratégie composite avancée crédible et recommandée qui démontre un avantage pratique pour prospérer sur les marchés modernes ultra-efficaces et fournir un alpha cohérent.


/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JS_TechTrading

//@version=5
strategy('The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', shorttitle='The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', overlay=true,initial_capital = 1000)
//// author -  JS-TechTrading

// MOM Rsi indicator 
group_mom_rsi = "Rsi Of Momentum "
len = input.int(10, minval=1, title="Length Mom-Rsi", group =group_mom_rsi ,tooltip = 'This ind calculate Rsi value of Momentum we use this ind to determine power of trend')
src2 = close
mom = src2 - src2[len]
rsi_mom = ta.rsi(mom, len)
mom_rsi_val = input.int(60, minval=1, title="Mom-Rsi Limit Val", group =group_mom_rsi, tooltip = "When our Mom-Rsi value more then this we open LONG or Short, with help of this indicator we we determine the status of the trend")

// Super Trend Ind
group_supertrend = "SuperTrend indicator"
atrPeriod = input(10, "ATR Length SuperTrend", group = group_supertrend)
factor = input.float(3.0, "Factor SuperTrend", step = 0.01, group = group_supertrend)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

// Ema Indicator
group_most = "Ema indicator"
src = input(close, 'Source Ema Ind',group = group_most)
AP2 = input.int(defval=12, title='Length Ema Ind', minval=1,group = group_most)
Trail1 = ta.ema(src, AP2) //Ema func
AF2 = input.float(defval=1, title='Percent Ema Ind', minval=0.1,group = group_most) / 100
SL2 = Trail1 * AF2  // Stoploss Ema
Trail2 = 0.0
iff_1 = Trail1 > nz(Trail2[1], 0) ? Trail1 - SL2 : Trail1 + SL2
iff_2 = Trail1 < nz(Trail2[1], 0) and Trail1[1] < nz(Trail2[1], 0) ? math.min(nz(Trail2[1], 0), Trail1 + SL2) : iff_1
Trail2 := Trail1 > nz(Trail2[1], 0) and Trail1[1] > nz(Trail2[1], 0) ? math.max(nz(Trail2[1], 0), Trail1 - SL2) : iff_2

//EMA50/150/200
group_50_150_200="EMA50/150/200"
show_emas=input.bool(defval = true, title = "SHOW EMAS", group = group_50_150_200)
ema50= ta.ema(src, 50)
ema150 = ta.ema(src, 150)
ema200 = ta.ema(src, 200)
ema50_color=input.color(defval = color.purple, title = "EMA50 COLOR",group = group_50_150_200)
ema50_linewidth=input.int(defval = 2, title = "EMA50 LINEWIDTH", group = group_50_150_200)
ema150_color=input.color(defval = color.blue, title = "EMA150 COLOR", group = group_50_150_200)
ema150_linewidth=input.int(defval = 2, title = "EMA150 LINEWIDTH", group = group_50_150_200)
ema200_color=input.color(defval = color.black, title = "EMA200 COLOR", group = group_50_150_200)
ema200_linewidth=input.int(defval = 2, title = "EMA200 LINEWIDTH", group = group_50_150_200)
plot(show_emas ? ema50 : na, color = ema50_color, linewidth = ema50_linewidth)
plot(show_emas ? ema150 : na, color=ema150_color, linewidth = ema150_linewidth)
plot(show_emas ? ema200 : na, color = ema200_color, linewidth = ema200_linewidth)

//Bull = ta.barssince(Trail1 > Trail2 and close > Trail2 and low > Trail2) < ta.barssince(Trail2 > Trail1 and close < Trail2 and high < Trail2)

//TS1 = plot(Trail1, 'ExMov', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(33, 149, 243, 100) : color.rgb(255, 235, 59, 100), linewidth=2)
//TS2 = plot(Trail2, 'ema', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(76, 175, 79, 30) : color.rgb(255, 82, 82, 30), linewidth=2)
//fill(TS1, TS2, Bull  ? color.green : color.red, transp=90)


// Strategy Sett
group_strategy = "Settings of Strategy"
Start_Time = input(defval=timestamp('01 January 2000 13:30 +0000'), title='Start Time of BackTest', group =group_strategy)
End_Time = input(defval=timestamp('30 April 2030 19:30 +0000'), title='End Time of BackTest', group =group_strategy)
dollar = input.float(title='Dollar Cost Per Position* ', defval=50000, group =group_strategy)
trade_direction = input.string(title='Trade_direction', group =group_strategy, options=['LONG', 'SHORT', 'BOTH'], defval='BOTH')
v1 = input(true, title="Version 1 - Uses SL/TP Dynamically ", group =group_strategy ,tooltip = 'With this settings our stoploss price increase or decrease with price to get better PNL score')

v2 = input(false, title="Version 2 -  Uses SL/TP Statically", group =group_strategy)
v2stoploss_input = input.float(5, title='Static Stop.Loss % Val', minval=0.01, group =group_strategy)/100
v2takeprofit_input = input.float(10, title='Static Take.Prof % Val', minval=0.01, group =group_strategy)/100

v2stoploss_level_long = strategy.position_avg_price * (1 - v2stoploss_input)
v2takeprofit_level_long = strategy.position_avg_price * (1 + v2takeprofit_input)

v2stoploss_level_short = strategy.position_avg_price * (1 + v2stoploss_input)
v2takeprofit_level_short = strategy.position_avg_price * (1 - v2takeprofit_input)

group_line = "Line Settings"
show_sl_tp = input.bool(title='  Show StopLoss - TakeProf Lines',inline = "1", defval=true, group =group_line)
show_trend_line = input.bool(title='  Show Trend Line',inline = '3' ,defval=true, group =group_line)
stoploss_colour = input.color(title='StopLoss Line Colour',inline = '2' ,defval=color.rgb(255, 255, 0), group =group_line)
up_trend_line_colour = input.color(title='Up Trend line Colour',inline = '4' ,defval=color.rgb(0, 255, 0, 30), group =group_line)
down_trend_line_colour = input.color(title='Down Trend line Colour',inline = '4' ,defval=color.rgb(255, 0, 0, 30), group =group_line)

//plot(supertrend ,color = strategy.position_size > 0 and show_sl_tp ? color.rgb(255, 0, 0) :show_sl_tp ? color.rgb(0, 255, 0) : na , style = plot.style_steplinebr,linewidth = 2)
// plot(supertrend ,color = show_sl_tp and v1 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)

// plot(v2stoploss_level_long ,color = strategy.position_size > 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2stoploss_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2takeprofit_level_long  ,color = strategy.position_size > 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2takeprofit_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2)


TS2 = plot(Trail2, 'Ema Strategy', style=plot.style_line, color=show_trend_line and Trail1 < Trail2 ? down_trend_line_colour : show_trend_line ? up_trend_line_colour  : na, linewidth=2)

// bgcolor(buy_signal ? color.rgb(0, 230, 119, 80) : na)
// bgcolor(sell_signal ? color.rgb(255, 82, 82, 80) : na)

Time_interval = true
buy_signal = Trail1 > Trail2 and direction < 0 and rsi_mom > mom_rsi_val and Time_interval
sell_signal =Trail1 < Trail2 and direction > 0 and rsi_mom > mom_rsi_val and Time_interval


// Strategy entries 
stop_long = (close < supertrend and v1) or (v2 and strategy.position_size > 0)
stop_short = (close > supertrend and v1) or (v2 and strategy.position_size < 0)
long_cond = ((close > ema150 ) and (ema50 > ema150) and (ema150 > ema200))
short_cond = ((close < ema150) and (ema50 < ema150) and (ema150 < ema200))
if (not stop_long) and (not short_cond) and long_cond and strategy.opentrades == 0 and (trade_direction == 'LONG' or trade_direction == 'BOTH') and buy_signal
    strategy.entry('Long_0', strategy.long, qty=dollar / close)

if (not stop_short) and (not long_cond) and short_cond and strategy.opentrades == 0 and (trade_direction == 'SHORT' or trade_direction == 'BOTH') and sell_signal
    strategy.entry('Short_0', strategy.short, qty=dollar / close)


if close < supertrend and v1
    strategy.exit('Long_Close',from_entry = "Long_0", stop=supertrend, qty_percent=100)
if  v2 and strategy.position_size > 0
    strategy.exit('Long_Close',from_entry = "Long_0", stop=v2stoploss_level_long,limit= v2takeprofit_level_long  , qty_percent=100)
    
if close > supertrend and v1
    strategy.exit('Short_Close',from_entry = "Short_0", stop=supertrend, qty_percent=100)
if  v2 and strategy.position_size < 0
    strategy.exit('Short_Close',from_entry = "Short_0", stop=v2stoploss_level_short,limit= v2takeprofit_level_short ,qty_percent=100)

Plus de