Donchian Channel und Larry Williams Große Handelsindexstrategie

Schriftsteller:ChaoZhang, Datum: 2024-04-12 17:27:25
Tags:

img

Übersicht

Diese Strategie kombiniert drei Indikatoren - Donchian Channel, Larry Williams Large Trade Index (LWTI) und Volume Moving Average, um Handelssignale zu generieren. Sie tritt in eine Long-Position ein, wenn der Preis über den oberen Band des Donchian Channel bricht, LWTI ist grün und das Volumen größer als der gleitende Durchschnitt. Sie tritt in eine Short-Position ein, wenn der Preis unter den unteren Band des Donchian Channel bricht, LWTI ist rot und das Volumen größer als der gleitende Durchschnitt. Die Strategie tritt aus den Positionen aus, wenn der Preis den Stop-Loss- oder Take-Profit-Level erreicht oder wenn der Preis in das mittlere Band des Donchian Channel zurückkehrt. Um wiederholte Einträge in die gleiche Trendrichtung zu verhindern, verwendet die Strategie einen Handelszähler, der nur neue Einträge zulässt, nachdem der mittlere Preis das Band des Donchian Channel überschritten hat.

Strategieprinzip

  1. Donchian Channel: Ein langes Signal wird erzeugt, wenn der Preis über das obere Band bricht, und ein kurzes Signal wird erzeugt, wenn der Preis unter das untere Band bricht.
  2. Larry Williams Large Trade Index: Long-Positionen sind nur zulässig, wenn die LWTI-Farbe grün ist, und Short-Positionen nur zulässig, wenn sie rot ist.
  3. Volumen: Einträge sind nur zulässig, wenn das aktuelle Volumen größer ist als der gleitende Volumendurchschnitt.
  4. Handelszähler: Um wiederholte Einträge in die gleiche Trendrichtung zu vermeiden, sind neue Einträge erst zulässig, wenn der Preis das mittlere Band des Donchian-Kanals überschritten hat.
  5. Stop-Loss- und Take-Profit-Distanzen: Bei Eintritt werden Stop-Loss- und Take-Profit-Distanzen auf der Grundlage des ATR berechnet, wobei die Take-Profit-Distanz die Stop-Loss-Distanz multipliziert mit dem Risiko-Rendite-Verhältnis ist.

Strategische Vorteile

  1. Die Kombination mehrerer Indikatoren zur Bestätigung von Handelssignalen kann falsche Signale effektiv filtern und die Signalqualität verbessern.
  2. Dynamische Stop-Loss- und Take-Profit-Anpassung - Die Anpassung der Stop-Loss- und Take-Profit-Distanzen an die Volatilität ermöglicht es der Strategie, sich besser an Marktveränderungen anzupassen.
  3. Der Handelszähler verhindert wiederholte Einträge in demselben Trend und kontrolliert die Handelshäufigkeit.
  4. Risiko-Rendite-Verhältnis-basierte Gewinnspanne - Die Festlegung der Gewinnspanne auf der Grundlage einer vorgegebenen Risiko-Rendite-Verhältnis ermöglicht, dass das Gewinnpotenzial das Risiko übersteigt.

Strategische Risiken

  1. Parameterrisiko - Die Strategieergebnisse werden stark von verschiedenen Parameter-Einstellungen beeinflusst, was eine Optimierung aufgrund verschiedener Marktmerkmale und Zeitrahmen erfordert.
  2. Unbeständiges Marktrisiko - In unbeständigen Marktbedingungen können häufige Schwankungen dazu führen, dass die Strategie häufig Positionen ein- und ausführt, was zu schlechten Ergebnissen führt.
  3. Trendrisiko - Wenn der Trend nicht anhält, kann es zu häufigen Ein- und Ausstiegen kommen, was zu erhöhten Verlusten führt.
  4. Schwarzes Schwanenrisiko - In extremen Marktbedingungen können Indikatoren versagen, was zu schlechten Strategieergebnissen führt.

Strategieoptimierungsrichtlinien

  1. Optimieren von Parametern für verschiedene Instrumente und Zeitrahmen, um die besten Parameterkombinationen zu finden.
  2. Hinzufügen von Trendfilterbedingungen, wie z. B. Verwendung gleitender Durchschnitte oder Dynamikindikatoren, um nur Positionen einzugeben, wenn der Trend klar ist, wodurch die Anzahl der Trades in unruhigen Umgebungen reduziert wird.
  3. Überlegen Sie, ob Sie bei unruhigen Marktbedingungen eine Breakout-Strategie verwenden.
  4. Optimieren Sie die Stop-Loss- und Take-Profit-Logik durch Einführung von Trailing-Stops oder anderen Methoden.
  5. Bei extremen Marktbedingungen sollten Sie eine feste Geldverwaltung und Höchstgrenzen für die Auszahlung in Betracht ziehen.

Zusammenfassung

Die Donchian Channel und Larry Williams Large Trade Index Strategie ist eine klassische Trendfolgestrategie. Sie erfasst die Trendrichtung mit Hilfe des Donchian Channels, filtert Signale mit Hilfe von LWTI, Volumen und anderen Indikatoren und verwendet dynamischen Stop-Loss und Take-Profit mit strenger Risikokontrolle. Insgesamt ist es ein Strategierahmen mit dem Potenzial für eine stabile Rendite. Es ist jedoch wichtig zu beachten, dass die Strategie für Parameter empfindlich ist und in unruhigen Marktbedingungen schlecht abschneidet.


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

Mehr