Kênh Donchian và Chiến lược chỉ số giao dịch lớn của Larry Williams


Ngày tạo: 2024-04-12 17:27:25 sửa đổi lần cuối: 2024-04-12 17:27:25
sao chép: 7 Số nhấp chuột: 2820
1
tập trung vào
1617
Người theo dõi

Kênh Donchian và Chiến lược chỉ số giao dịch lớn của Larry Williams

Tổng quan

Chiến lược này kết hợp ba chỉ số của kênh Đồng Chi, Chỉ số giao dịch lớn Larry Williams (LWTI) và Đường trung bình chuyển động giao dịch để giao dịch. Khi giá phá vỡ đường dẫn lên kênh Đồng Chi, LWTI là màu xanh lá cây, giao dịch lớn hơn đường trung bình chuyển động; Khi giá phá vỡ đường dẫn xuống kênh Đồng Chi, LWTI là màu đỏ, giao dịch lớn hơn đường trung bình chuyển động.

Nguyên tắc chiến lược

  1. Đường thông Dongxian: tạo ra tín hiệu đa khi giá phá vỡ đường dẫn lên đường và tạo ra tín hiệu trống khi phá vỡ đường dẫn xuống.
  2. Chỉ số giao dịch lớn của Larry Williams: LWTI chỉ cho phép làm nhiều khi màu xanh lá cây và chỉ cho phép làm trống khi màu đỏ.
  3. Số lượng giao dịch: Chỉ khi số lượng giao dịch hiện tại lớn hơn số lượng giao dịch trên đường trung bình di chuyển, thì bạn mới được phép mở một vị trí.
  4. Máy đếm giao dịch: ngăn chặn việc mở vị trí lặp lại trong cùng một hướng xu hướng và chỉ cho phép mở vị trí một lần nữa khi giá phá vỡ đường trung tâm của đường Đông Dương.
  5. Giảm lỗ dừng: Khi mở vị trí, khoảng cách dừng lỗ được tính theo ATR, khoảng cách dừng là khoảng cách dừng lỗ nhân tỷ lệ lợi nhuận rủi ro.

Lợi thế chiến lược

  1. Kết hợp nhiều chỉ số cùng xác nhận tín hiệu giao dịch, có thể lọc hiệu quả các tín hiệu giả và cải thiện chất lượng tín hiệu.
  2. Động thái dừng lỗ - Động thái điều chỉnh khoảng cách dừng lỗ theo biến động của tỷ lệ, có thể thích ứng tốt hơn với sự thay đổi của thị trường.
  3. Kiểm soát tần suất giao dịch bằng cách sử dụng bộ đếm giao dịch để ngăn chặn việc mở nhiều lần trong cùng một xu hướng.
  4. Hạn chế lợi nhuận so với rủi ro - Thiết lập vị trí dừng dựa trên lợi nhuận so với rủi ro để có thể kiếm được lợi nhuận nhiều hơn rủi ro.

Rủi ro chiến lược

  1. Rủi ro tham số - Các thiết lập tham số khác nhau có ảnh hưởng lớn đến hiệu suất chiến lược và cần được tối ưu hóa theo các đặc điểm và chu kỳ thị trường khác nhau.
  2. Rủi ro thị trường lắc lư - Trong môi trường thị trường lắc lư, sự biến động thường xuyên có thể dẫn đến việc chiến lược thường xuyên tháo lỗ và hoạt động kém.
  3. Rủi ro xu hướng - Nếu xu hướng không bền vững, có thể xảy ra việc tháo lỗ thường xuyên, dẫn đến tổn thất lớn hơn.
  4. Rủi ro thiên nga đen - chỉ số có thể thất bại trong các trường hợp cực đoan và chiến lược không hoạt động tốt.

Hướng tối ưu hóa chiến lược

  1. Tối ưu hóa các tham số cho các giống và chu kỳ khác nhau để tìm ra sự kết hợp tham số tối ưu.
  2. Tăng các điều kiện lọc xu hướng, chẳng hạn như sử dụng đường trung bình hoặc chỉ số động lực, chỉ mở vị trí khi xu hướng rõ ràng, giảm số lần giao dịch trong môi trường xung đột.
  3. Các chiến lược phá vỡ phạm vi có thể được sử dụng cho môi trường thành phố bị chấn động.
  4. Tối ưu hóa logic dừng dừng, giới thiệu các phương pháp như dừng di động hoặc dừng theo dõi.
  5. Các biện pháp như quản lý quỹ cố định và giới hạn thu hồi tối đa có thể được xem xét để đối phó với các tình huống cực đoan.

Tóm tắt

Chiến lược chỉ số giao dịch lớn của kênh Đường Giang và Larry Williams là một chiến lược giao dịch theo dõi xu hướng cổ điển. Bằng cách nắm bắt hướng xu hướng thông qua kênh Đường Giang, sử dụng các chỉ số như LWTI, khối lượng giao dịch và các tín hiệu lọc, dừng dừng động động, kiểm soát rủi ro nghiêm ngặt, tổng thể là một khung chiến lược có lợi nhuận ổn định. Tuy nhiên, cần lưu ý rằng chiến lược này rất nhạy cảm với tham số, hoạt động kém trong môi trường thị trường bất ổn và được đề xuất sử dụng trong thị trường xu hướng. Trong ứng dụng thực tế, cần tối ưu hóa thêm các tham số và logic giao dịch dựa trên các chỉ số và đặc điểm của thị trường và kết hợp với quản lý vốn nghiêm ngặt để có được lợi nhuận ổn định tốt.

Mã nguồn chiến lược
/*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)