Saluran Donchian dan Larry Williams Strategi Indeks Perdagangan Besar

Penulis:ChaoZhang, Tarikh: 2024-04-12 17:27:25
Tag:

img

Ringkasan

Strategi ini menggabungkan tiga penunjuk - Saluran Donchian, Indeks Perdagangan Besar Larry Williams (LWTI), dan Purata Bergerak Volume untuk menjana isyarat perdagangan. Ia memasuki kedudukan panjang apabila harga memecahkan di atas jalur atas Saluran Donchian, LWTI hijau, dan jumlahnya lebih besar daripada purata bergerak. Ia memasuki kedudukan pendek apabila harga memecahkan di bawah jalur bawah Saluran Donchian, LWTI merah, dan jumlahnya lebih besar daripada purata bergerak. Strategi keluar kedudukan apabila harga mencapai tahap stop loss atau mengambil keuntungan, atau apabila harga kembali ke jalur tengah Saluran Donchian. Untuk mengelakkan kemasukan berulang dalam arah trend yang sama, strategi menggunakan kaunter perdagangan yang hanya membenarkan kemasukan baru selepas harga melintasi jalur tengah Saluran Donchian.

Prinsip Strategi

  1. Saluran Donchian: Isyarat panjang dihasilkan apabila harga memecahkan band atas, dan isyarat pendek dihasilkan apabila harga memecahkan band bawah.
  2. Indeks Perdagangan Besar Larry Williams: Posisi panjang hanya dibenarkan apabila warna LWTI hijau, dan kedudukan pendek hanya dibenarkan apabila ia merah.
  3. Volume: Entri hanya dibenarkan apabila jumlah semasa lebih besar daripada purata bergerak jumlah.
  4. Kaunter Perdagangan: Untuk mengelakkan kemasukan berulang dalam arah trend yang sama, kemasukan baru hanya dibenarkan selepas harga melintasi jalur tengah Saluran Donchian.
  5. Stop Loss dan Take Profit: Apabila masuk, jarak stop loss dan take profit dikira berdasarkan ATR, dengan jarak take profit adalah jarak stop loss dikalikan dengan nisbah risiko-balasan.

Kelebihan Strategi

  1. Gabungan beberapa penunjuk untuk mengesahkan isyarat perdagangan dapat menapis isyarat palsu dengan berkesan dan meningkatkan kualiti isyarat.
  2. Stop loss dan mengambil keuntungan dinamik - Penyesuaian jarak stop loss dan mengambil keuntungan berdasarkan turun naik membolehkan strategi menyesuaikan diri dengan perubahan pasaran.
  3. Kaunter perdagangan menghalang entri berulang dalam trend yang sama, mengawal kekerapan perdagangan.
  4. Nisbah risiko-balasan berdasarkan mengambil keuntungan - Menetapkan tahap mengambil keuntungan berdasarkan nisbah risiko-balasan yang telah ditentukan membolehkan potensi keuntungan melebihi risiko.

Risiko Strategi

  1. Risiko parameter - Prestasi strategi sangat dipengaruhi oleh tetapan parameter yang berbeza, yang memerlukan pengoptimuman berdasarkan ciri pasaran dan jangka masa yang berbeza.
  2. Risiko pasaran yang bergelombang - Dalam keadaan pasaran yang bergelombang, turun naik yang kerap boleh menyebabkan strategi memasuki dan keluar kedudukan dengan kerap, mengakibatkan prestasi yang buruk.
  3. Risiko trend - Jika trend tidak berterusan, masuk dan keluar yang kerap boleh berlaku, yang membawa kepada peningkatan kerugian.
  4. Risiko angsa hitam - Dalam keadaan pasaran yang melampau, penunjuk mungkin gagal, mengakibatkan prestasi strategi yang lemah.

Arahan Pengoptimuman Strategi

  1. Mengoptimumkan parameter untuk instrumen dan jangka masa yang berbeza untuk mencari kombinasi parameter yang terbaik.
  2. Tambahkan keadaan penapisan trend, seperti menggunakan purata bergerak atau penunjuk momentum, untuk memasuki kedudukan hanya apabila trend jelas, mengurangkan bilangan dagangan dalam persekitaran yang bergelombang.
  3. Pertimbangkan untuk menggunakan strategi penembusan julat untuk keadaan pasaran yang bergolak.
  4. Mengoptimumkan stop loss dan mengambil keuntungan logik dengan memperkenalkan trailing berhenti atau kaedah lain.
  5. Untuk keadaan pasaran yang melampau, pertimbangkan untuk memperkenalkan pengurusan wang tetap dan had pengambilan maksimum.

Ringkasan

Strategi Indeks Perdagangan Besar Donchian Channel dan Larry Williams adalah strategi perdagangan klasik yang mengikuti trend. Ia menangkap arah trend menggunakan Saluran Donchian, menapis isyarat menggunakan LWTI, jumlah, dan penunjuk lain, dan menggunakan stop loss dinamik dan mengambil keuntungan dengan kawalan risiko yang ketat. Secara keseluruhan, ini adalah kerangka strategi dengan potensi pulangan yang mantap.


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

Lebih lanjut