Donchian Channel dan Larry Williams Strategi Indeks Perdagangan Besar

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

img

Gambaran umum

Strategi ini menggabungkan tiga indikator - Saluran Donchian, Indeks Perdagangan Besar Larry Williams (LWTI), dan Volume Moving Average untuk menghasilkan sinyal perdagangan. Strategi ini memasuki posisi panjang ketika harga melanggar band atas Saluran Donchian, LWTI hijau, dan volume lebih besar dari rata-rata bergerak. Strategi ini memasuki posisi pendek ketika harga melanggar band bawah Saluran Donchian, LWTI merah, dan volume lebih besar dari rata-rata bergerak. Strategi ini keluar posisi ketika harga mencapai stop loss atau level take profit, atau ketika harga kembali ke band tengah Saluran Donchian. Untuk mencegah entri berulang ke arah tren yang sama, strategi ini menggunakan counter perdagangan yang hanya memungkinkan entri baru setelah harga melintasi band tengah Saluran Donchian.

Prinsip Strategi

  1. Saluran Donchian: Sinyal panjang dihasilkan ketika harga menembus band atas, dan sinyal pendek dihasilkan ketika harga menembus band bawah.
  2. Larry Williams Large Trade Index: Posisi panjang hanya diizinkan ketika warna LWTI hijau, dan posisi pendek hanya diizinkan ketika merah.
  3. Volume: Entri hanya diizinkan jika volume saat ini lebih besar dari rata-rata bergerak volume.
  4. Trading Counter: Untuk mencegah entri berulang dalam arah tren yang sama, entri baru hanya diizinkan setelah harga melintasi pita tengah Saluran Donchian.
  5. Stop Loss dan Take Profit: Pada saat masuk, jarak stop loss dan take profit dihitung berdasarkan ATR, dengan jarak take profit adalah jarak stop loss dikalikan dengan rasio risiko-manfaat.

Keuntungan Strategi

  1. Kombinasi dari beberapa indikator untuk mengkonfirmasi sinyal perdagangan dapat secara efektif menyaring sinyal palsu dan meningkatkan kualitas sinyal.
  2. Stop loss dan take profit yang dinamis - Menyesuaikan jarak stop loss dan take profit berdasarkan volatilitas memungkinkan strategi untuk lebih beradaptasi dengan perubahan pasar.
  3. Trading counter mencegah entri berulang dalam tren yang sama, mengendalikan frekuensi perdagangan.
  4. Rasio risiko-balasan berdasarkan mengambil keuntungan - Menetapkan tingkat mengambil keuntungan berdasarkan rasio risiko-balasan yang telah ditentukan memungkinkan potensi keuntungan melebihi risiko.

Risiko Strategi

  1. Risiko parameter - Kinerja strategi sangat dipengaruhi oleh pengaturan parameter yang berbeda, yang membutuhkan optimalisasi berdasarkan karakteristik pasar dan kerangka waktu yang berbeda.
  2. Risiko pasar yang bergolak - Dalam kondisi pasar yang bergolak, fluktuasi yang sering dapat menyebabkan strategi masuk dan keluar posisi sering, yang mengakibatkan kinerja yang buruk.
  3. Risiko tren - Jika tren tidak bertahan, masuk dan keluar yang sering dapat terjadi, yang mengarah pada peningkatan kerugian.
  4. Risiko angsa hitam - Dalam kondisi pasar yang ekstrim, indikator dapat gagal, yang mengakibatkan kinerja strategi yang buruk.

Arah Optimasi Strategi

  1. Mengoptimalkan parameter untuk instrumen dan kerangka waktu yang berbeda untuk menemukan kombinasi parameter terbaik.
  2. Tambahkan kondisi penyaringan tren, seperti menggunakan rata-rata bergerak atau indikator momentum, untuk hanya memasukkan posisi ketika tren jelas, mengurangi jumlah perdagangan di lingkungan yang bergolak.
  3. Pertimbangkan untuk menggunakan strategi penyebaran kisaran untuk kondisi pasar yang bergolak.
  4. Mengoptimalkan stop loss dan mengambil keuntungan logika dengan memperkenalkan trailing stop atau metode lainnya.
  5. Untuk kondisi pasar yang ekstrim, pertimbangkan untuk memperkenalkan manajemen uang tetap dan batas maksimum penarikan.

Ringkasan

Strategi Donchian Channel dan Larry Williams Large Trade Index adalah strategi perdagangan klasik yang mengikuti tren. Strategi ini menangkap arah tren menggunakan saluran Donchian, menyaring sinyal menggunakan LWTI, volume, dan indikator lainnya, dan menggunakan stop loss dinamis dan mengambil keuntungan dengan pengendalian risiko yang ketat. Secara keseluruhan, ini adalah kerangka strategi dengan potensi pengembalian yang stabil. Namun, penting untuk dicatat bahwa strategi ini sensitif terhadap parameter dan berkinerja buruk dalam kondisi pasar yang bergolak.


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