Saluran Donchian dan Strategi Indeks Perdagangan Besar Larry Williams


Tanggal Pembuatan: 2024-04-12 17:27:25 Akhirnya memodifikasi: 2024-04-12 17:27:25
menyalin: 7 Jumlah klik: 2820
1
fokus pada
1617
Pengikut

Saluran Donchian dan Strategi Indeks Perdagangan Besar Larry Williams

Ringkasan

Strategi ini menggabungkan tiga indikator untuk melakukan perdagangan yaitu Channel Dongxian, Larry Williams Large Trading Index (LWTI) dan Trading Volume Moving Average. Berdaganglah lebih banyak ketika harga menembus Channel Dongxian ke atas, dengan LWTI berwarna hijau dan trading volume lebih besar dari Moving Average; dan kosongkan posisi saat harga menembus Channel Dongxian ke bawah, dengan LWTI berwarna merah dan trading volume lebih besar dari Moving Average. Strategi ini dilakukan setelah membuka posisi, ketika harga mencapai posisi stop loss atau stop loss, atau ketika harga kembali ke dalam orbit Channel Dongxian.

Prinsip Strategi

  1. Saluran Tongxian: menghasilkan sinyal multipel saat harga menembus saluran naik, menghasilkan sinyal kosong saat menembus saluran turun.
  2. Indeks Large Trading Larry Williams: LWTI hanya diperbolehkan melakukan over jika warna hijau, dan hanya diperbolehkan melakukan over jika warna merah.
  3. Volume transaksi: Hanya diperbolehkan untuk membuka posisi jika volume transaksi saat ini lebih besar dari volume transaksi moving average.
  4. Penghitung perdagangan: mencegah terjadinya pembukaan posisi berulang dalam arah tren yang sama, dan hanya diizinkan untuk membuka posisi lagi setelah harga menembus rel tengah saluran Dongxian.
  5. Stop Loss: Stop Loss distance dihitung berdasarkan ATR saat membuka posisi. Stop Loss distance adalah stop loss distance dikalikan dengan risk to gain ratio.

Keunggulan Strategis

  1. Kombinasi dari beberapa indikator yang bersama-sama mengkonfirmasi sinyal perdagangan, dapat secara efektif memfilter sinyal palsu, meningkatkan kualitas sinyal.
  2. Dinamis Stop Loss - Mengatur stop loss jarak secara dinamis sesuai dengan fluktuasi tingkat, dapat lebih baik beradaptasi dengan perubahan pasar.
  3. Mengontrol frekuensi perdagangan dengan mencegah pembukaan posisi berulang dalam tren yang sama melalui counter perdagangan.
  4. Stop profit-risk - Set stop profit-risk position berdasarkan default, sehingga ruang untung lebih besar dari risiko.

Risiko Strategis

  1. Risiko Parameter - Berbagai pengaturan parameter sangat berpengaruh pada kinerja strategi dan perlu dioptimalkan sesuai dengan karakteristik dan siklus pasar yang berbeda.
  2. Risiko pasar yang bergoyang - Dalam lingkungan pasar yang bergoyang, fluktuasi yang sering terjadi dapat menyebabkan strategi sering melakukan shorting dan berkinerja buruk.
  3. Risiko tren - Jika tren tidak konsisten, kemungkinan akan terjadi seringnya posisi terbuka, yang menyebabkan peningkatan kerugian.
  4. Risiko Black Swan - indikator dapat gagal dalam situasi ekstrem, dan strategi tidak bekerja dengan baik.

Arah optimasi strategi

  1. Optimalkan parameter untuk varietas dan siklus yang berbeda untuk menemukan kombinasi parameter yang optimal.
  2. Meningkatkan kondisi penyaringan tren, seperti menggunakan garis rata-rata atau indikator momentum, hanya membuka posisi saat tren jelas, mengurangi jumlah transaksi dalam lingkungan goyah.
  3. Strategi penembusan jangkauan dapat dipertimbangkan untuk lingkungan kota yang bergolak.
  4. Optimalkan stop loss logis dengan cara seperti stop mobile atau stop loss tail.
  5. Untuk situasi yang ekstrim, pertimbangan dapat diberikan untuk memperkenalkan pengelolaan dana tetap dan pembatasan penarikan maksimum.

Meringkaskan

Strategi indeks perdagangan Dongguan dan Larry Williams adalah strategi perdagangan yang mengikuti tren klasik. Strategi ini menangkap arah tren melalui saluran Dongguan, menggunakan indikator filter sinyal seperti LWTI, volume transaksi, stop loss dinamis, kontrol risiko yang ketat, dan secara keseluruhan merupakan kerangka strategi dengan keuntungan yang stabil. Namun perlu dicatat bahwa strategi ini sangat sensitif terhadap parameter, tidak berkinerja baik di lingkungan pasar yang bergolak, dan disarankan untuk digunakan di pasar yang sedang tren.

Kode Sumber Strategi
/*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)