Chiến lược thoát khỏi kênh Donchian

Tác giả:ChaoZhang, Ngày: 2023-09-14 14:44:44
Tags:

Chiến lược logic

Chiến lược phá vỡ kênh Donchian là một chiến lược theo xu hướng dựa trên kênh Donchian. Nó sử dụng mức cao nhất và thấp nhất trong các khoảng thời gian cụ thể để xác định các điểm nhập và dừng lỗ cho các vị trí dài và ngắn.

Các quy tắc nhập là: đi dài khi giá vượt quá mức cao nhất trong một khoảng thời gian nhìn lại (ví dụ 20 ngày), và đi ngắn khi giá vượt qua mức thấp nhất trong một khoảng thời gian nhìn lại khác (ví dụ 10 ngày).

Các quy tắc EXIT là: Các vị trí dài được dừng ở dải giữa hoặc dưới của kênh; các vị trí ngắn được dừng ở dải giữa hoặc trên. Dải giữa là trung bình của mức cao nhất và thấp nhất trong một khoảng thời gian nhất định (ví dụ: 10 ngày).

Ví dụ, giao dịch BTCUSDT với các thông số sau:

  • Khoảng thời gian truy cập dài: 20 ngày
  • Thời gian xem lại lỗ dừng dài: 10 ngày
  • Stop loss ở dải giữa: Có
  • Thời gian xem lại ngắn hạn: 10 ngày
  • Thời gian xem lại lỗ dừng ngắn: 20 ngày
  • Stop loss ở dải giữa: Có

Các quy tắc nhập và dừng sẽ là:

  • Đi dài khi giá phá vỡ trên mức cao 20 ngày
  • Đặt lỗ dừng dài ở giữa điểm cao nhất và thấp nhất 10 ngày
  • Đi ngắn khi giá phá vỡ dưới mức thấp 10 ngày
  • Đánh giá giá giá trị giá trị giá trị giá trị

Bằng cách điều chỉnh năng động các khoảng thời gian xem lại, chiến lược có thể được tối ưu hóa trên các chu kỳ thị trường để nắm bắt xu hướng với lợi nhuận / rủi ro tốt hơn.

Ưu điểm

  • Breakouts có thể xác định hướng xu hướng sớm
  • Ngăn lỗ gần giá giúp quản lý rủi ro
  • Các tham số linh hoạt cho phép tối ưu hóa cho các chu kỳ khác nhau

Rủi ro

  • Bị đột quỵ dễ bị chọc, cần xác nhận tính hợp lệ.
  • Các khoản lỗ dừng đóng có khả năng bị rung chuyển trong các thị trường hỗn loạn
  • Điều chỉnh tham số kém có thể dẫn đến giao dịch quá mức hoặc dừng không đủ

Tóm lại

Sự đột phá kênh Donchian sử dụng sự đột phá để xác định xu hướng, với các điểm giữa kênh / băng tần là điểm dừng để kiểm soát rủi ro. Tối ưu hóa thời gian xem lại có thể cải thiện việc nắm bắt xu hướng trong các động thái mạnh mẽ. Tuy nhiên, cần thận trọng về tính hợp lệ của sự đột phá và rung chuyển. Nhìn chung chiến lược này phù hợp với giao dịch xu hướng trung và dài hạn, nhưng có thể gặp khó khăn trong các thị trường hỗn loạn.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Donchian Channel Strategy", overlay=true, default_qty_type= strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 20, commission_type=strategy.commission.percent, commission_value=0.036)

//Long optopns
buyPeriodEnter = input(10, "Channel Period for Long enter position")
buyPeriodExit = input(10, "Channel Period for Long exit position")
isMiddleBuy = input(true, "Is exit on Base Line? If 'no' - exit on bottom line")
takeProfitBuy = input(2.5, "Take Profit (%) for Long position")
isBuy = input(true, "Allow Long?")

//Short Options
sellPeriodEnter = input(20, "Channel Period for Short enter position")
sellPeriodExit = input(20, "Channel Period for Short exit position")
isMiddleSell = input(true, "Is exit on Base Line? If 'no' - exit on upper line")
takeProfitSell = input(2.5, "Take Profit (%) for Short position")
isSell = input(true, "Allow Short?")

// Test Start
startYear = input(2005, "Test Start Year")
startMonth = input(1, "Test Start Month")
startDay = input(1, "Test Start Day")
startTest = timestamp(startYear,startMonth,startDay,0,0)

//Test End
endYear = input(2050, "Test End Year")
endMonth = input(12, "Test End Month")
endDay = input(30, "Test End Day")
endTest = timestamp(endYear,endMonth,endDay,23,59)

timeRange = time > startTest and time < endTest ? true : false

// Long&Short Levels
BuyEnter = highest(buyPeriodEnter)
BuyExit = isMiddleBuy ? ((highest(buyPeriodExit) + lowest(buyPeriodExit)) / 2): lowest(buyPeriodExit)

SellEnter = lowest(sellPeriodEnter)
SellExit = isMiddleSell ? ((highest(sellPeriodExit) + lowest(sellPeriodExit)) / 2): highest(sellPeriodExit)

// Plot Data
plot(BuyEnter, style=plot.style_line, linewidth=2, color=color.blue, title="Buy Enter")
plot(BuyExit, style=plot.style_line, linewidth=1, color=color.blue, title="Buy Exit", transp=50)
plot(SellEnter, style=plot.style_line, linewidth=2, color=color.red, title="Sell Enter")
plot(SellExit, style=plot.style_line, linewidth=1, color=color.red, title="Sell Exit", transp=50)

// Calc Take Profits
TakeProfitBuy = 0.0
TakeProfitSell = 0.0
if strategy.position_size > 0
    TakeProfitBuy := strategy.position_avg_price*(1 + takeProfitBuy/100)
    
if strategy.position_size < 0
    TakeProfitSell := strategy.position_avg_price*(1 - takeProfitSell/100)

// Long Position    
if isBuy and timeRange
    strategy.entry("Long", strategy.long, stop = BuyEnter, when = strategy.position_size == 0) 
    
strategy.exit("Long Exit", "Long", stop=BuyExit, limit = TakeProfitBuy, when = strategy.position_size > 0)

// Short Position
if isSell and timeRange
    strategy.entry("Short", strategy.short, stop = SellEnter, when = strategy.position_size == 0) 
    
strategy.exit("Short Exit", "Short", stop=SellExit, limit = TakeProfitSell, when = strategy.position_size < 0)

// Close & Cancel when over End of the Test
if time > endTest
    strategy.close_all()
    strategy.cancel_all()


Thêm nữa