Donchian Channel et Larry Williams Stratégie du grand indice du commerce

Auteur:ChaoZhang est là., Date: 2024-04-12 17h27 et 25h
Les étiquettes:

img

Résumé

Cette stratégie combine trois indicateurs - le canal de Donchian, l'indice de grand commerce Larry Williams (LWTI) et la moyenne mobile de volume pour générer des signaux de trading. Elle entre dans une position longue lorsque le prix dépasse la bande supérieure du canal de Donchian, le LWTI est vert et le volume est supérieur à la moyenne mobile. Elle entre dans une position courte lorsque le prix dépasse la bande inférieure du canal de Donchian, le LWTI est rouge et le volume est supérieur à la moyenne mobile.

Principe de stratégie

  1. Canal de Donchian: Un signal long est généré lorsque le prix dépasse la bande supérieure, et un signal court est généré lorsque le prix dépasse la bande inférieure.
  2. Larry Williams Large Trade Index: Les positions longues ne sont autorisées que lorsque la couleur LWTI est verte et les positions courtes uniquement lorsque celle-ci est rouge.
  3. Volume: Les entrées ne sont autorisées que lorsque le volume actuel est supérieur à la moyenne mobile du volume.
  4. Compteur commercial: Afin d'éviter des entrées répétées dans le même sens de tendance, de nouvelles entrées ne sont autorisées qu'après que le prix ait franchi la bande médiane de la Manche de Donchian.
  5. Stop Loss et Take Profit: à l'entrée, les distances stop loss et take profit sont calculées sur la base de l'ATR, la distance take profit étant la distance stop loss multipliée par le ratio risque-rendement.

Les avantages de la stratégie

  1. La combinaison de plusieurs indicateurs pour confirmer les signaux de négociation peut filtrer efficacement les faux signaux et améliorer la qualité des signaux.
  2. L'opération de prise de profit et de stop loss dynamique - L'ajustement des distances de prise de profit et de stop loss en fonction de la volatilité permet à la stratégie de mieux s'adapter aux changements du marché.
  3. Le compteur de transactions empêche les entrées répétées dans la même tendance, contrôlant la fréquence des transactions.
  4. Ratio risque-rendement basé sur le bénéfice net - La fixation du niveau de bénéfice net basé sur un ratio risque-rendement prédéterminé permet au potentiel de profit de dépasser le risque.

Risques stratégiques

  1. Risque par paramètre - La performance de la stratégie est fortement affectée par différents paramètres, ce qui nécessite une optimisation en fonction des différentes caractéristiques et des délais du marché.
  2. Risque de marché instable - Dans des conditions de marché instables, les fluctuations fréquentes peuvent entraîner l'entrée et la sortie fréquentes des positions de la stratégie, ce qui entraîne de mauvaises performances.
  3. Risque de tendance - Si la tendance n'est pas persistante, des entrées et des sorties fréquentes peuvent survenir, entraînant une augmentation des pertes.
  4. Risque de cygne noir - Dans des conditions de marché extrêmes, les indicateurs peuvent échouer, ce qui entraîne un mauvais rendement de la stratégie.

Directions d'optimisation de la stratégie

  1. Optimiser les paramètres pour différents instruments et périodes afin de trouver les meilleures combinaisons de paramètres.
  2. Ajoutez des conditions de filtrage des tendances, telles que l'utilisation de moyennes mobiles ou d'indicateurs de dynamique, pour n'entrer dans les positions que lorsque la tendance est claire, ce qui réduit le nombre de transactions dans des environnements instables.
  3. Considérez l'utilisation de stratégies de rupture de gamme pour les conditions de marché instables.
  4. Optimiser le stop loss et la logique de prise de profit en introduisant des trailing stops ou d'autres méthodes.
  5. Pour les conditions de marché extrêmes, envisagez d'introduire une gestion de fonds fixes et des limites maximales de tirage.

Résumé

La stratégie Donchian Channel et Larry Williams Large Trade Index est une stratégie de trading classique de suivi des tendances. Elle capture la direction de la tendance en utilisant la chaîne Donchian, filtre les signaux en utilisant LWTI, le volume et d'autres indicateurs, et emploie un stop loss dynamique et un profit avec un contrôle strict des risques. Dans l'ensemble, il s'agit d'un cadre stratégique avec un potentiel de rendement régulier.


/*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)

Plus de