Stratégie de suivi des tendances du canal Donchian


Date de création: 2024-01-22 12:30:05 Dernière modification: 2024-01-22 12:30:05
Copier: 0 Nombre de clics: 645
1
Suivre
1617
Abonnés

Stratégie de suivi des tendances du canal Donchian

Aperçu

La stratégie de suivi des tendances des canaux donchiens est une stratégie de suivi des tendances basée sur les indicateurs des canaux donchiens. Elle utilise des canaux donchiens de différentes longueurs pour identifier les tendances des prix et générer des signaux de transaction lorsque les prix franchissent les canaux.

L’idée principale de cette stratégie est d’utiliser les canaux Donchiens à long terme pour déterminer la direction de la tendance générale, en utilisant les canaux Donchiens à court terme comme signaux d’entrée et d’arrêt. Elle vise à capturer les tendances de prix des lignes moyennes et longues et à éviter d’être confondues par les fluctuations à court terme du marché.

Principe de stratégie

  1. Le calcul des prix de clôture maximaux et minimaux sur une longue période (par exemple 50 jours) construit le canal Donchian. Il est plus élevé lorsque le prix franchit le canal et plus bas lorsque le prix franchit le canal. C’est la base pour juger de la grande tendance.

  2. Calculer le prix de clôture le plus élevé et le prix de clôture le plus bas sur une période courte (par exemple 20 jours) comme critères d’entrée et de clôture. Lorsque le prix franchit le canal long, l’entrée est plus / vide si le prix de clôture franchit également le canal court.

  3. Lorsqu’on détient une position sur plusieurs positions, la perte s’arrête si le prix dépasse la ligne courte. Lorsqu’on détient une position sur une position vide, la perte s’arrête si le prix dépasse la ligne courte.

  4. Le point d’arrêt est réglé sur N fois l’ATR. Cela peut être ajusté automatiquement en fonction de la volatilité du marché, ce qui contribue à réduire la possibilité que le stop loss soit activé.

  5. Vous pouvez choisir d’effacer votre position avant la fin de la transaction, ou de la conserver jusqu’à ce que la perte soit arrêtée.

Cette stratégie prend en compte à la fois le jugement de la tendance et la perte de profit, capte les tendances des prix et maîtrise les risques, et convient aux opérations sur les lignes moyennes et longues.

Analyse des avantages

  1. Identifier efficacement les tendances à long terme et éviter d’être dérangé par le bruit du marché à court terme.

  2. Le système de prévention automatique peut limiter les pertes individuelles.

  3. L’arrêt ATR peut être ajusté en fonction de la volatilité du marché, réduisant ainsi la probabilité que le stop-loss soit impacté.

  4. Il est possible de régler automatiquement la position en cas d’impossibilité de négocier et de gérer le risque de la transaction.

  5. La logique de la stratégie est simple, claire et compréhensible.

Analyse des risques

  1. Dans les marchés où la tendance n’est pas claire, la stratégie génère plus de transactions, ce qui augmente les coûts de transaction et la possibilité de réaliser des pertes.

  2. Bien qu’il existe un mécanisme de stop-loss, dans des circonstances exceptionnelles, les écarts de prix peuvent se transformer en pertes majeures, allant directement au-delà du point de stop-loss.

  3. ATR est calculé uniquement sur la base de données historiques et ne permet pas de prédire avec précision les tendances et la volatilité futures, et la distance réelle d’arrêt peut être trop grande ou trop petite.

  4. Dans le monde réel, il n’y a pas de garantie que les ordres de stop-loss seront exécutés. Dans des cas extrêmes, ils peuvent être ignorés et causer des pertes.

Direction d’optimisation

  1. Adapter les paramètres du canal Donchian pour optimiser l’efficacité de la détection des tendances

  2. La combinaison de signaux de confirmation de transactions avec d’autres indicateurs, tels que MACD, KDJ, etc., améliore la stabilité de la stratégie.

  3. Augmenter le stop-loss mobile pour que le point stop-loss se déplace avec le prix, limitant ainsi davantage les pertes.

  4. Tester l’impact des différentes périodes de détention sur l’efficacité globale et déterminer la période de détention optimale.

  5. Envisagez d’ajuster dynamiquement la taille de votre position et d’augmenter la taille de votre position en cas de tendance.

Résumer

La stratégie de suivi des tendances de la chaîne de Donchian intègre le jugement de la tendance et le contrôle du risque, permettant d’obtenir un rendement excessif grâce à la reconnaissance de la tendance, tout en contrôlant le risque de la traîne par le mécanisme de stop-loss. La stratégie est adaptée pour identifier et capturer les tendances des prix des lignes moyennes et longues, permettant d’obtenir des rendements positifs stables après l’optimisation des paramètres et la complétion du mécanisme.

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, calc_on_every_tick=true)

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

donch_string = input.string(title="Lenght", options = ['20/10','50/20', '50/50', '20/20', '100/100'], defval='20/10')
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 = true)


// =============================================================================
// 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 BG VERTICAL COLOR
// =============================================================================

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 HORIZONTAL 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='In end')

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