Stratégie de suivi de tendance basée sur l'indicateur OBV


Date de création: 2024-02-20 15:35:08 Dernière modification: 2024-02-20 15:35:08
Copier: 0 Nombre de clics: 904
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance basée sur l’indicateur OBV

Aperçu

La stratégie utilise une double éma moyenne pour juger de la tendance à la hausse de l’indicateur OBV, en fonction de la direction de la tendance. Dans ce cas, l’indicateur OBV peut refléter plus clairement la relation entre les prix et la quantité de transaction, juger de la volonté des acteurs du marché et peut donc être utilisé pour capturer les tendances du marché. La stratégie, combinée à un traitement lisse de l’indicateur avec des moyennes mobiles, peut filtrer efficacement le bruit du marché et capturer les principales tendances.

Principe de stratégie

Cette stratégie est principalement basée sur l’indicateur OBV pour juger si le début de la période de multiples têtes est dans une tendance à la hausse. Plus précisément, il est calculé que l’OBV a une EMA de 6 jours et une EMA de 24 jours, générant un signal de multiples têtes lorsque le 6ème jour passe par le 24ème jour.

La clé de cette stratégie pour déterminer les tendances réside dans l’indicateur OBV. L’indicateur OBV reflète la volonté collective des grandes capitales et peut refléter efficacement l’attitude des acteurs du marché. En combinaison avec le traitement des moyennes mobiles, il est possible d’éliminer une partie du bruit, ce qui rend le signal plus clair et plus fiable. La stratégie utilise des lignes EMA rapides et des lignes EMA lentes pour construire des signaux de négociation, ce qui permet de fluidifier les données de prix, tout en captant plus sensiblement les changements de tendance.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’indicateur OBV, basé sur le volume des transactions, permet de juger clairement de la volonté des acteurs du marché et le signal est plus fiable.

  2. Le traitement homogène par double EMA permet d’éliminer une partie du bruit et de rendre le signal plus clair.

  3. La combinaison des lignes EMA rapides et lentes permet de maintenir à la fois une fluctuation des prix et une évolution des tendances de capture.

  4. Les stratégies sont simples et faciles à mettre en œuvre.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. L’indicateur OBV émet parfois des signaux erronés, ce qui peut entraîner des pertes.

  2. Dans les cas extrêmes, le traitement des lignes EMA est retardé et peut manquer les points d’entrée optimaux.

  3. Les paramètres fixes de stop-loss peuvent être trop rigides pour s’adapter aux changements du marché.

La réponse:

  1. La confirmation est effectuée en combinaison avec d’autres indicateurs afin d’éviter de faux signaux.

  2. Optimisation des paramètres pour rendre les lignes EMA plus sensibles

  3. Définition de l’arrêt dynamique.

Direction d’optimisation

Cette stratégie peut être optimisée dans les directions suivantes:

  1. Optimiser la combinaison des paramètres EMA pour trouver le paramètre de la ligne moyenne qui correspond le mieux.

  2. L’ajout d’autres indicateurs pour la confirmation du signal, tels que le MACD, le RSI, etc., améliore la précision du signal.

  3. Il est possible de définir un stop-loss dynamique qui permet d’ajuster le point de stop-loss en temps réel en fonction des fluctuations du marché.

  4. Optimiser les combinaisons de paramètres pour trouver la combinaison optimale.

Résumer

Cette stratégie est globalement une stratégie de suivi de tendance simple et fiable. Elle combine l’indicateur OBV et l’équilibre double EMA pour permettre le jugement de la tendance. L’avantage est la simplicité d’utilisation, la clarté du signal et la capacité de suivre efficacement la tendance; L’inconvénient est que des signaux erronés peuvent survenir et que le traitement de la ligne EMA est retardé.

Code source de la stratégie
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OBV EMA X BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

/////////////// OBV /////////////// 
src = close
atr = atr(input(title="ATR Period", defval=3, minval=1))
atrmult = input(title="ATR Mult", defval=1, minval=0)
obv = cum(change(src) > 0 ? volume * (volume / atr) : change(src) < 0 ? -volume * (volume / atr) : 0 * volume / atr)
e1 = ema(obv, input(24))
e2 = ema(obv, input(6))

///////////////  Strategy  /////////////// 
long = crossover(e2, e1)
short = crossunder(e2, e1)

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

//////////////// Stop loss /////////////// 
sl_inp = input(3.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
plot(e1, color = e1 > e1[1] ? color.lime : e1 < e1[1] ? color.red : color.white, linewidth = 2, offset = 0)
plot(e2, color = e2 > e2[1] ? color.lime : e2 < e2[1] ? color.red : color.white, linewidth = 1)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)