Donchian Channels und Larry Williams Big Trade Index Strategie


Erstellungsdatum: 2024-04-12 17:27:25 zuletzt geändert: 2024-04-12 17:27:25
Kopie: 7 Klicks: 2820
1
konzentrieren Sie sich auf
1617
Anhänger

Donchian Channels und Larry Williams Big Trade Index Strategie

Überblick

Die Strategie kombiniert drei Indikatoren für den Tangxian-Kanal, den Larry Williams Big Trading-Index (LWTI) und den Transaktionsvolumen-Moving Average zum Handel. Wenn der Preis den Tangxian-Kanal aufwärts durchbricht, ist der LWTI grün und der Transaktionsvolumen größer als der Moving Average; wenn der Preis den Tangxian-Kanal abwärts durchbricht, ist der LWTI rot und der Transaktionsvolumen größer als der Moving Average.

Strategieprinzip

  1. Dongxian-Kanal: Mehrwertsignale werden erzeugt, wenn der Preis den Kanal überschreitet, und ein Fehlwertsignal wird erzeugt, wenn der Preis den Kanal überschreitet.
  2. Der LWTI-Index: Der LWTI-Index erlaubt nur Überschläge, wenn die Farbe grün ist, und nur Leerpositionen, wenn die Farbe rot ist.
  3. Der Umsatz: Der Umsatz ist größer als der Moving Average.
  4. Handelszähler: Verhindert die Wiederholung von Positionen in derselben Trendrichtung und erlaubt die erneute Eröffnung von Positionen nur, wenn der Preis die mittlere Linie des Tangxian-Kanals durchbricht.
  5. Stop-Loss: Die Stop-Loss-Distanz wird nach dem ATR berechnet, wenn die Position eröffnet wird. Die Stop-Loss-Distanz ist die Stop-Loss-Distanz multipliziert mit dem Risiko-Gewinn-Verhältnis.

Strategische Vorteile

  1. In Kombination mit mehreren Indikatoren kann das Handelssignal gemeinsam bestätigt werden, wodurch falsche Signale effizient gefiltert und die Signalqualität verbessert wird.
  2. Dynamische Stop-Loss - Die Stop-Loss-Distanz wird dynamisch an die Volatilität angepasst, um besser an Marktveränderungen anzupassen.
  3. Die Frequenz der Transaktionen wird durch einen Handelszähler gesteuert, um die Wiederholung von Positionen in derselben Tendenz zu verhindern.
  4. Stopp-Risiko-Gewinn-Verhältnis - Setzen Sie einen Stopp-Risiko-Gewinn-Verhältnis auf Basis der vorgegebenen Position, so dass der Gewinnraum größer ist als das Risiko.

Strategisches Risiko

  1. Parameterrisiken - Die unterschiedlichen Parameter-Sets beeinflussen die Strategie-Performance erheblich und müssen entsprechend der unterschiedlichen Markteigenschaften und -Perioden optimiert werden.
  2. Schwankungsrisiko - Häufige Schwankungen in einem schwankenden Marktumfeld können dazu führen, dass die Strategie häufig schwächer abschneidet.
  3. Trendrisiko - wenn die Tendenz nicht nachhaltig ist, kann es zu häufigen Ausgleichspositionen kommen, was zu einem erhöhten Verlust führt.
  4. Das Risiko eines schwarzen Svanes - In extremen Situationen können die Indikatoren fehlschlagen und die Strategie nicht funktioniert.

Richtung der Strategieoptimierung

  1. Parameteroptimierung für verschiedene Sorten und Perioden, um die optimale Kombination von Parametern zu finden.
  2. Erhöhen Sie die Trendfilterbedingungen, z. B. durch Verwendung von Durchschnittslinien oder Dynamikindikatoren, und eröffnen Sie nur dann Positionen, wenn der Trend eindeutig ist, um die Anzahl der Geschäfte in einem wackligen Umfeld zu reduzieren.
  3. Eine Strategie zum Durchbruch der Reichweite kann für die Umgebung von Städten mit Erschütterungen in Betracht gezogen werden.
  4. Optimierung der Stopp-Stopp-Logik durch Einführung von Methoden wie Bewegungsstopp oder Schleppschadenstop.
  5. Für extreme Situationen können Maßnahmen wie die Einführung von Fixed-Funds-Verwaltung und maximale Rücknahmebeschränkungen in Betracht gezogen werden.

Zusammenfassen

Die Tangxian-Kanal- und Larry-Williams-Großhandel-Index-Strategie ist eine klassische Trend-Tracking-Handelsstrategie. Durch die Tangxian-Kanal-Erfassung der Trendrichtung, die Verwendung von LWTI, Transaktionsmengen und anderen Indikatoren Filtersignale, dynamische Stop-Loss-Stopps, Risikokontrolle strenge, insgesamt ist ein Strategie-Framework mit einem stabilen Ertrag. Es ist jedoch zu beachten, dass die Strategie ist sehr empfindlich auf die Parameter, die in einem unruhigen Markt Umgebung schlechte Leistung und empfohlen, in einem Trendmarkt.

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