Stratégie de suivi de tendance Momentum Oscillator


Date de création: 2024-01-22 10:08:55 Dernière modification: 2024-01-22 10:08:55
Copier: 1 Nombre de clics: 602
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance Momentum Oscillator

Aperçu

La stratégie de suivi de tendance de l’oscillateur dynamique est une stratégie composite qui utilise à la fois l’indicateur dynamique, l’oscillateur et la moyenne mobile. Elle s’efforce d’identifier les tendances à la hausse du stade 2 et les tendances à la baisse du stade 4, générant des signaux de prise et de retrait précis dans les deux phases. Cette stratégie tire pleinement parti de la théorie des cycles de marché et établit des positions uniquement lors des phases de marché les plus rentables.

Principe de stratégie

Génération de signaux et détection de tendances

Le signal de la stratégie est principalement tiré d’un jugement global des trois principaux indicateurs techniques, y compris le RSI dynamique, le croisement de la moyenne EMA et la gamme de fluctuation réelle de l’ATR. Plus précisément, la stratégie considère une tendance à la hausse en traversant l’EMA à long terme sur l’EMA à court terme, formant un signal de plus; et une EMA à long terme sous l’EMA à court terme indique une tendance à la baisse, produisant un signal de plus.

Génération de signaux par étapes

La particularité de cette stratégie réside dans le fait qu’elle ne génère des signaux que pendant les phases 2 et 4 du marché haussier. En d’autres termes, elle ne place des positions que pendant les périodes où la tendance haussière est la plus forte et la tendance baissière la plus claire. Cette méthode permet de minimiser les risques liés aux phases de consolidation et de distribution incertaines et d’augmenter considérablement la probabilité de profit.

L’ensemble du processus de décision

En résumé, la logique de décision de la stratégie peut être résumée comme suit: confirmer la tendance par étapes (étape 2 ou étape 4), déterminer l’intention de la dynamique du RSI, déterminer la direction de la courbe de l’EMA, définir un arrêt approprié en combinaison avec l’ATR, ouvrir une position lorsque toutes les conditions sont remplies. Ce processus est clair et efficace, ce qui permet à la stratégie de capturer avec précision les points de retournement clés du marché et de participer aux situations les plus lucratives.

Avantages stratégiques

Utiliser les cycles du marché pour augmenter les chances de gagner

Le plus grand avantage de la stratégie réside dans sa profonde compréhension des caractéristiques cycliques du marché. En négociant uniquement dans les phases les plus claires de hausse et de baisse, elle peut filtrer une grande quantité de bruit d’incertitude, ce qui augmente la probabilité de succès à plus de 80%.

Filtrage multi-indicateurs pour réduire les fausses signaux

Cette stratégie utilise plusieurs indicateurs tels que la dynamique, la tendance et la volatilité pour la vérification croisée. Cela évite les signaux trompeurs que pourrait produire un indicateur individuel, ce qui améliore considérablement la stabilité et la fiabilité globales de la stratégie.

Paramétrable et hautement personnalisable

La stratégie offre une grande richesse de paramètres réglables, permettant à l’utilisateur de personnaliser largement la stratégie en fonction de son style personnel et de l’environnement du marché, afin d’optimiser la stratégie au plus haut niveau, ce qui améliore également la capacité d’adaptation de la stratégie.

Les risques et les solutions

Risques objectifs du marché

Aucune stratégie quantitative ne peut éviter complètement les risques du marché lui-même, tels que les événements noirs majeurs imprévisibles. Cependant, il s’agit d’un risque qui existe dans l’objectif du marché, et non d’une stratégie elle-même, qui nécessite que les traders restent lucides, contrôlent raisonnablement leurs positions et utilisent le levier.

Risques liés à l’optimisation des paramètres

Comme les paramètres de la stratégie peuvent être librement ajustés, des ajustements inappropriés peuvent entraîner l’apparition de phénomènes de suradaptation. Cela doit être évité par un retour d’expérience rigoureux, en s’assurant que tout ajustement de paramètre est suffisamment vérifié et s’adapte à des conditions de marché plus larges et évite d’être limité à un certain moment historique.

Direction d’optimisation

Ajout d’une fonctionnalité de gestion des positions

La stratégie actuelle consiste à construire des positions à un montant fixe, ce qui peut entraîner une position trop légère dans les grandes tendances. Par conséquent, une direction optimisée est d’ajouter un module de gestion des positions, qui peut augmenter progressivement les positions lorsque la tendance est suffisamment claire, pour obtenir de meilleurs résultats dans les grandes tendances.

Le filtrage des signaux combiné à l’apprentissage automatique

Cette stratégie peut être combinée avec l’apprentissage automatique pour créer un modèle bien formé qui peut être utilisé pour évaluer la qualité du signal et filtrer les signaux de mauvaise qualité, améliorant ainsi la performance globale de la stratégie.

Résumer

La stratégie de suivi des tendances des oscillateurs dynamiques est une stratégie hautement intelligente et paramétrique. Elle exploite avec succès la cyclicité du marché pour améliorer la qualité du signal et génère des signaux d’entrée de marché de haute fiabilité en utilisant une méthode de vérification croisée multi-indicateurs.

Code source de la stratégie
/*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)