Stratégie de suivi des tendances de Donichan


Date de création: 2024-01-31 16:53:31 Dernière modification: 2024-01-31 16:53:31
Copier: 0 Nombre de clics: 647
1
Suivre
1617
Abonnés

Stratégie de suivi des tendances de Donichan

Aperçu

La stratégie de suivi de la tendance de la boîte noire est une stratégie de suivi de la tendance développée sur la base du principe du canal de la boîte noire décrit dans l’article Black Box Trend Following Lifting the Veil . Cette stratégie utilise le canal de la boîte noire pour déterminer la tendance des prix et créer des positions en hausse ou en baisse en fonction de la hausse ou de la baisse des prix.

Principe de stratégie

La stratégie est basée sur l’indicateur de la chaîne de Dony pour déterminer la direction de la tendance. La chaîne de Dony est composée d’une chaîne à cycle plus long et d’une chaîne à cycle plus court.

Plus précisément, la longueur des canaux à périodes plus longues est de 50 jours ou 20 jours, et la longueur des canaux à périodes plus courtes est de 50 jours, 20 jours ou 10 jours. Si le prix est égal au prix le plus élevé en 50 jours, un ordre est ouvert; si le prix est égal au prix le plus bas en 50 jours, un ordre est ouvert.

De cette façon, par une combinaison de deux canaux de donjon de différentes périodes, il est possible de déterminer la direction de la position au début de la tendance et de l’arrêter à la fin de la tendance.

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. La capacité de capture des tendances est élevée. Le début et la fin de la tendance peuvent être déterminés en brisant le canal de la glande thyroïde, ce qui permet de suivre efficacement la tendance.

  2. Le contrôle des risques est en place. Le stop mobile est utilisé pour contrôler les pertes individuelles.

  3. Adaptation des paramètres est flexible. La combinaison de cycles des canaux peut être librement choisie pour s’adapter à différentes variétés et environnements de marché.

  4. Une logique de transaction simple et claire.

Analyse des risques

La stratégie présente également les risques suivants:

  1. L’incapacité à s’adapter à une situation de choc. Lorsque la tendance n’est pas évidente, il y aura plusieurs ajustements mineurs, entraînant des pertes de stop loss.

  2. Risque d’échec de la rupture. Après la rupture du canal, le prix peut être recalqué à nouveau, ce qui entraîne un arrêt.

  3. Le risque de sélection des cycles. Si les cycles de passage sont mal définis, cela entraînera un trading in noise.

  4. Risque de baisse du ratio Sharp. Si vous augmentez votre position sans modifier votre stop loss, vous risquez de baisse du ratio Sharp.

La réponse:

  1. Optimiser les paramètres et sélectionner la combinaison de cycles de passage appropriée.
  2. Ajustez votre position et votre marge de manœuvre pour maîtriser le risque.
  3. Cette stratégie est utilisée pour les variétés et les marchés qui sont en forte tendance.

Direction d’optimisation

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

  1. Augmentation des conditions de filtrage pour éviter les whipsaws.

  2. Optimiser la composition et le contrôle des positions sur le cycle de la chaîne, améliorer le ratio de profit et de perte. Un mécanisme d’arrêt des pertes adaptatif peut être introduit.

  3. Essayez d’optimiser le point de rupture pour trouver la meilleure combinaison de paramètres.

  4. Ajout d’algorithmes d’apprentissage automatique pour optimiser et ajuster dynamiquement les paramètres.

Résumer

La stratégie de suivi des tendances de Don Quichotte est une stratégie de suivi des tendances très pratique. Elle permet de déterminer le début et la fin de la tendance des prix par deux voies, d’adopter une méthode de trading de suivi des tendances et de contrôler efficacement les pertes individuelles. La stratégie est flexible et facile à mettre en œuvre.

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

//@version=5
strategy(title="Donchian", overlay=true,
     pyramiding=0, initial_capital=1000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=2, slippage=2)

// =============================================================================
// VARIABLES
// =============================================================================

donch_string = input.string(title="Length", options = ['20/10','50/20', '50/50', '20/20', '100/100'], defval='50/50')
permit_long  = input.bool(title = 'Permit long', defval = true)
permit_short  = input.bool(title = 'Permit short', defval = true)
risk_percent = input.float(title="Position Risk %", defval=0.5, step=0.25)
stopOffset = input.float(title="ATR mult", defval=2.0, step=0.5)
atrLen = input.int(title="ATR Length", defval=20)
close_in_end  = input.bool(title = 'Close in end', defval = true)
permit_stop  = input.bool(title = 'Permit stop', defval = false)

// =============================================================================
// CALCULATIONS
// =============================================================================

donch_len_big = 
 donch_string == '50/20' ? 50 : 
 donch_string == '50/50' ? 50 : 
 donch_string == '20/20' ? 20 : 
 donch_string == '20/10' ? 20 : 
 donch_string == '100/100' ? 100 : 
 na
donch_len_small = 
 donch_string == '50/20' ? 20 : 
 donch_string == '50/50' ? 50 : 
 donch_string == '20/20' ? 20 : 
 donch_string == '20/10' ? 10 : 
 donch_string == '100/100' ? 100 : 
 na

big_maxclose = ta.highest(close, donch_len_big)
big_minclose = ta.lowest(close, donch_len_big)
small_maxclose = ta.highest(close, donch_len_small)
small_minclose = ta.lowest(close, donch_len_small)

atrValue = ta.atr(atrLen)[1]

tradeWindow  = true

// =============================================================================
// NOTOPEN QTY
// =============================================================================

risk_usd = (risk_percent / 100) * strategy.equity
atr_currency = (atrValue * syminfo.pointvalue)
notopen_qty = risk_usd / (stopOffset * atr_currency)

// =============================================================================
// LONG STOP
// =============================================================================

long_stop_price = 0.0
long_stop_price := 
 strategy.position_size > 0 and na(long_stop_price[1]) ? strategy.position_avg_price - stopOffset * atrValue : 
 strategy.position_size > 0 and strategy.openprofit > risk_usd ? strategy.position_avg_price:
 strategy.position_size > 0 ? long_stop_price[1] : 
 na

// =============================================================================
// SHORT STOP
// =============================================================================

short_stop_price = 0.0
short_stop_price := 
 strategy.position_size < 0 and na(short_stop_price[1]) ? strategy.position_avg_price + stopOffset * atrValue : 
 strategy.position_size < 0 and strategy.openprofit > risk_usd ? strategy.position_avg_price :
 strategy.position_size < 0 ? short_stop_price[1] : 
 na

// =============================================================================
// PLOT VERTICAL COLOR BAR
// =============================================================================

cross_up = strategy.position_size <= 0 and close == big_maxclose and close >= syminfo.mintick and tradeWindow and permit_long
cross_dn =  strategy.position_size >= 0 and close == big_minclose and close >= syminfo.mintick and tradeWindow and permit_short
bg_color = cross_up ? color.green : cross_dn ? color.red : na
bg_color := color.new(bg_color, 70)
bgcolor(bg_color)

// =============================================================================
// PLOT DONCHIAN LINES
// =============================================================================

s1 = cross_up ? na : cross_dn ? na : strategy.position_size != 0 ? strategy.position_avg_price : na
s2 = cross_up ? na : cross_dn ? na : strategy.position_size > 0 ? small_minclose : strategy.position_size < 0 ? small_maxclose : na
s3 = cross_up ? na : cross_dn ? na : not permit_stop ? na : 
 strategy.position_size > 0 ? long_stop_price : strategy.position_size < 0 ? short_stop_price : na

plot(series=big_maxclose, style=plot.style_linebr, color=color.black, linewidth=1, title="Donch Big Maxclose Black")
plot(series=big_minclose, style=plot.style_linebr, color=color.black, linewidth=1, title="Donch Big Minclose Black")

plot(series=s1, style=plot.style_linebr, color=color.yellow, linewidth=2, title="Entry Yellow")
plot(series=s2, style=plot.style_linebr, color=color.red, linewidth=1, title="Donch Small Red")
plot(series=s3, style=plot.style_linebr, color=color.fuchsia, linewidth=2, title="Stop Fuchsia")

// =============================================================================
// ENTRY ORDERS
// =============================================================================

if strategy.position_size <= 0 and close == big_maxclose and close >= syminfo.mintick and tradeWindow and permit_long
    strategy.entry("Long", strategy.long, qty=notopen_qty)

if strategy.position_size >= 0 and close == big_minclose and close >= syminfo.mintick and tradeWindow and permit_short
    strategy.entry("Short", strategy.short, qty=notopen_qty)

// =============================================================================
// EXIT ORDERS
// =============================================================================

if strategy.position_size > 0 and permit_stop
    strategy.exit(id="Stop", from_entry="Long", stop=long_stop_price)

if strategy.position_size < 0 and permit_stop
    strategy.exit(id="Stop", from_entry="Short", stop=short_stop_price)

// ==========

if strategy.position_size > 0 and close == small_minclose and not barstate.islast
    strategy.close(id="Long", comment='Donch')

if strategy.position_size < 0 and close == small_maxclose and not barstate.islast
    strategy.close(id="Short", comment='Donch')

// ==========

if close_in_end
    if not tradeWindow
        strategy.close_all(comment='Close in end')

// =============================================================================
// END
// =============================================================================