Les canaux Donchian et la stratégie de l'indice Big Trade de Larry Williams


Date de création: 2024-04-12 17:27:25 Dernière modification: 2024-04-12 17:27:25
Copier: 7 Nombre de clics: 2820
1
Suivre
1617
Abonnés

Les canaux Donchian et la stratégie de l’indice Big Trade de Larry Williams

Aperçu

La stratégie combine trois indicateurs pour effectuer des transactions: le canal de Dongguan, le LWTI et la moyenne mobile de la transaction. Lorsque le prix franchit le canal de Dongguan, le LWTI est vert et la transaction est supérieure à la moyenne mobile.

Principe de stratégie

  1. Le canal de Dongxian: produit un signal de multiplication lorsque le prix franchit le canal et un signal de rupture lorsque le prix franchit le canal.
  2. L’indice de trading Larry Williams: LWTI ne permet de faire plus que lorsque la couleur est verte, et de faire moins que lorsque la couleur est rouge.
  3. Volume de transaction: la position est ouverte lorsque le volume de transaction actuel est supérieur à la moyenne mobile.
  4. Compteur de transactions: empêche la répétition d’ouvertures de positions dans la même direction de tendance et ne permet de nouvelles ouvertures de positions qu’après que le prix a franchi le milieu de la voie de Dongxian.
  5. Stop loss: la distance de stop loss est calculée en fonction de l’ATR lors de l’ouverture de la position.

Avantages stratégiques

  1. La combinaison de plusieurs indicateurs pour confirmer les signaux de transaction peut filtrer efficacement les faux signaux et améliorer la qualité des signaux.
  2. Stop-loss dynamique - la distance de stop-loss est ajustée dynamiquement en fonction de la volatilité pour mieux s’adapter aux fluctuations du marché.
  3. Le compteur de transactions permet de contrôler la fréquence des transactions et d’éviter que les positions ne soient ouvertes plusieurs fois dans la même tendance.
  4. Stop-loss - Réglage de la position de stop-loss en fonction de l’option de stop-loss prédéfinie, de sorte que l’espace de gain est plus grand que le risque.

Risque stratégique

  1. Risque paramétrique - Les paramètres de la stratégie sont très influençables et doivent être optimisés en fonction des caractéristiques et des cycles du marché.
  2. Risque de marché volatile - Dans un environnement de marché volatile, des fluctuations fréquentes peuvent entraîner des stratégies de cours bas fréquents et une mauvaise performance.
  3. Risque de tendance - Si la tendance est peu soutenue, il peut y avoir une ouverture fréquente de positions négatives, entraînant une augmentation des pertes.
  4. Le risque d’un écran noir - dans des situations extrêmes, l’indicateur peut ne pas fonctionner et la stratégie ne fonctionne pas.

Orientation de l’optimisation de la stratégie

  1. Optimisation des paramètres pour différentes variétés et cycles afin de trouver la meilleure combinaison de paramètres.
  2. Augmenter les conditions de filtrage de tendance, comme l’utilisation de la moyenne ou de l’indicateur de dynamique, ouvrir des positions uniquement lorsque la tendance est claire, réduire le nombre de transactions dans un environnement de choc.
  3. Pour les environnements urbains en crise, il est possible d’envisager des stratégies de rupture de champs.
  4. Optimisation de la logique d’arrêt des pertes par l’introduction de méthodes telles que l’arrêt mobile ou l’arrêt de la perte de traînée.
  5. Pour des situations extrêmes, des mesures telles que la gestion des fonds fixes et la limitation des retraits maximaux peuvent être envisagées.

Résumer

La stratégie de suivi des tendances est une stratégie classique de suivi des tendances. La stratégie de suivi des tendances est capturée par la stratégie de suivi des tendances de la chaîne de la chaîne de la chaîne de la chaîne de la chaîne de la chaîne de la chaîne de la chaîne de la chaîne de la chaîne de la chaîne de la chaîne de la chaîne de la chaîne.

Code source de la stratégie
/*backtest
start: 2024-04-04 00:00:00
end: 2024-04-11 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 
//at https://mozilla.org/MPL/2.0/
// © DillonGrech
//
//This is a Donchian Channel Trading Strategy which was found through the 
//YouTube channel TradingLab. 
//
//This Strategy uses the Donchian Channel, Larry Williams Large Trade Index,
//and Volume with Moving Average indicators for long and short trades.
//
//Strategy will enter based off indicator entry conditions and will not
//re-enter a trade until the price crosses through the Donchian Channel
//basis line (to prevent re-entering trades in same trend). Strategy will
//exit at stop loss or take profit, or when price crosses donchian basis.
//
//The strategy has been coded by Dillon Grech as part of his YouTube channel
//and a detailed video can be found on his channel at:
//https://www.youtube.com/c/DillonGrech
//https://www.youtube.com/watch?v=5IFe2Vjf61Y
//Source code and template files can be found on his GitHub at:
//https://github.com/Dillon-Grech
//==============================================================================
//@version=5
strategy("Donchian Channel Strategy [DillonGrech]", overlay=true, margin_long=100, margin_short=100)

//==============================================================================
//DONCHIAN CHANNEL
//==============================================================================
//Allow user to select whether they would like to use indicator
Don_Input = input(true, title='Use Donchian Channel?', group = "Donchian Settings")

//Indicator
don_length = input.int(96, minval = 1, group = "Donchian Settings")
don_lower  = ta.lowest(don_length)
don_upper  = ta.highest(don_length)
don_basis  = math.avg(don_upper, don_lower)
plot(don_basis,     "Don Basis", color = #FF6D00)
u = plot(don_upper, "Don Upper", color = #2962FF)
l = plot(don_lower, "Don Lower", color = #2962FF)
fill(u, l, color = color.rgb(33, 150, 243, 95), title = "Background")

//Conditions - Enter trades when there is a cross of price and previous donchian channel value
Ind_1_L = Don_Input == false ? false : ta.crossover(close,don_upper[1])
Ind_1_S = Don_Input == false ? false : ta.crossunder(close,don_lower[1])

//==============================================================================
//LARRY WILLIAMS LARGE TRADE INDEX (LWTI) - LOXX
//==============================================================================
//Allow user to select whether they would like to use indicator
LWTI_Input = input(true, title='Use LWTI?', group = "LWTI Settings")

//Indicator
greencolor = #2DD204
redcolor = #D2042D 

variant(type, src, len) =>
    sig = 0.0
    if type == "SMA"
        sig := ta.sma(src, len) 
    else if type == "EMA"
        sig := ta.ema(src, len) 
    else if type == "WMA"
        sig := ta.wma(src, len)   
    else if type == "RMA"
        sig := ta.rma(src, len)  
    sig
    
LWTI_per = input.int(25, "Period", group = "LWTI Settings")
LWTI_smthit = input.bool(false, "Smooth LWPI?", group = "LWTI Settings")
LWTI_type = input.string("SMA", "Smoothing Type", options = ["EMA", "WMA", "RMA", "SMA"], group = "LWTI Settings")
LWTI_smthper = input.int(20, "Smoothing Period", group = "LWTI Settings")

LWTI_ma = ta.sma(close - nz(close[LWTI_per]), LWTI_per)
LWTI_atr = ta.atr(LWTI_per)
LWTI_out = LWTI_ma/LWTI_atr * 50 + 50
LWTI_out := LWTI_smthit ? variant(LWTI_type, LWTI_out, LWTI_smthper) : LWTI_out

LWTI_colorout = LWTI_out > 50 ? greencolor : redcolor

//Conditions - Enter on color of indicator
Ind_2_L = LWTI_Input == false ? true : LWTI_colorout == greencolor
Ind_2_S = LWTI_Input == false ? true : LWTI_colorout == redcolor

//==============================================================================
//VOLUME INDICATOR
//==============================================================================
//Allow user to select whether they would like to use indicator
Vol_Input = input(true, title='Use Volume?', group = "Volume Settings")

//Indicator
Vol_Ma_Period = input.int(30,"Volume MA Period", group = "Volume Settings")
Vol_Ma = ta.sma(volume,Vol_Ma_Period)

//Conditions - Enter when volume is greater than moving average
Ind_3_L = Vol_Input == false ? true : volume > Vol_Ma
Ind_3_S = Vol_Input == false ? true : volume > Vol_Ma

//==============================================================================
//DONCHIAN CHANNEL TRADE COUNTER
//==============================================================================
//Stores whether a trade has been taken, and resets when there is a cross of price and donchain basis
Trade_Counter = float(0)
Don_Basis_Cross = ta.cross(don_basis[1], close)
if strategy.position_size!=0
    Trade_Counter := 1
else if Don_Basis_Cross
    Trade_Counter := 0
else 
    Trade_Counter := Trade_Counter[1]

Plot_Trade_Counter = input.bool(false, "Plot Trade Position Counter?", group = "Plot Settings")
plotchar(Plot_Trade_Counter and Trade_Counter == 0 ? true : false, color = na, text = '0')
plotchar(Plot_Trade_Counter and Trade_Counter == 1 ? true : false, color = na, text = '1')

//==============================================================================
//ENTRY CONDITIONS
//==============================================================================
entry_long  = strategy.position_size<=0 and Ind_1_L and Ind_2_L and Ind_3_L and Trade_Counter[1] == 0
entry_short = strategy.position_size>=0 and Ind_1_S and Ind_2_S and Ind_3_S and Trade_Counter[1] == 0

if(entry_long)
    strategy.entry("Long Entry", strategy.long)
if(entry_short)
    strategy.entry("Short Entry", strategy.short)

//==============================================================================
// TAKE PROFIT AND STOP LOSS CONDITIONS
//==============================================================================
Stop_Input   = input(true, title='Use Stop Loss?', group = "Risk Settings")
Profit_Input = input(true, title='Use Take Profit?', group = "Risk Settings")
Profit_RR = input.float(2.0,"Risk Reward Profit Target", group = "Risk Settings")

//Store Price on new entry signal
Entry_Price = strategy.opentrades.entry_price(strategy.opentrades - 1)

//Store Donchain Channel Basis value on new entry signal
Entry_Don_Basis = float(0.0)
if strategy.position_size == 0 or entry_long or entry_short
    Entry_Don_Basis := don_basis
else
    Entry_Don_Basis := Entry_Don_Basis[1]

//Get stop loss distance
Stop_Distance = math.abs(Entry_Price - Entry_Don_Basis)*1.02

//For Long Trades, find the stop loss level
Stop_L = float(0.0)
if Stop_Input == true
    Stop_L := Entry_Price - Stop_Distance
else
    na

//For Long Trades, find the profit level
Profit_L = float(0.0)
if Profit_Input == true
    Profit_L := Entry_Price + Stop_Distance*Profit_RR
else
    na

//For Short Trades, find the stop loss level
Stop_S = float(0.0)
if Stop_Input == true
    Stop_S   := Entry_Price + Stop_Distance
else
    na

//For Short Trades, find the profit level
Profit_S = float(0.0)
if Profit_Input == true
    Profit_S := Entry_Price - Stop_Distance*Profit_RR
else
    na

//Plot profit and stop loss levels for long and short trades
plot(strategy.position_size > 0 ? Profit_L : na, color=color.lime, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size > 0 ? Stop_L : na,   color=color.red,  style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 ? Profit_S : na, color=color.lime, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 ? Stop_S : na,   color=color.red,  style=plot.style_linebr, linewidth=2)

//==============================================================================
//EXIT ORDERS
//==============================================================================
//Exit long trades
if Stop_Input
    strategy.exit(id = 'Exit Long', from_entry ='Long Entry', comment='Long Stop',  stop = Stop_L)

if Profit_Input
    strategy.exit(id = 'Exit Long', from_entry ='Long Entry', comment='Long Profit', limit = Profit_L)

//Exit short trades
if Stop_Input
    strategy.exit(id = 'Exit Short', from_entry ='Short Entry', comment='Short Stop', stop = Stop_S)

if Profit_Input
    strategy.exit(id = 'Exit Short', from_entry ='Short Entry', comment='Short Profit', limit = Profit_S)

//==============================================================================
//CLOSE ORDERS
//==============================================================================
exit_long  = close < don_basis
exit_short = close > don_basis

if(exit_long)
    strategy.close("Long Entry", comment='Long Close', qty_percent=100)
if(exit_short)
    strategy.close("Short Entry", comment='Short Close', qty_percent=100)