Chiến lược xu hướng thích nghi kênh Donchian

Tác giả:ChaoZhang, Ngày: 2023-10-26 15:58:52
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số kênh Donchian để theo dõi theo xu hướng thị trường cho giao dịch xu hướng. Nó theo xu hướng khi giá vượt qua kênh Donchian và cắt giảm lỗ khi giá giảm trở lại kênh.

Chiến lược logic

  1. Tính toán mức cao nhất và thấp nhất trong một khoảng thời gian nhất định để tạo thành kênh Donchian.

  2. Mở vị trí dài khi giá vượt qua dải trên của kênh Mở vị trí ngắn khi giá vượt qua dải dưới.

  3. Sau khi mở các vị trí, stop loss theo dõi đường giữa của kênh.

  4. Giảm lỗ và đóng các vị trí khi giá giảm trở lại kênh.

Phân tích lợi thế

  1. Chiến lược này sử dụng kênh Donchian để xác định hướng xu hướng và nhanh chóng nắm bắt sự đột phá.

  2. Sử dụng đường giữa kênh để dừng lỗ bảo vệ lợi nhuận.

  3. Mục tiêu lợi nhuận được khuếch đại theo tỷ lệ lợi nhuận được xác định bởi người dùng.

  4. Nó thích nghi với các điều kiện thị trường khác nhau như củng cố, phá vỡ, rút lại, v.v., và điều chỉnh kích thước vị trí một cách linh hoạt.

  5. Logic giao dịch đơn giản và rõ ràng, dễ hiểu và nắm vững.

Phân tích rủi ro

  1. Chiến lược chỉ giao dịch thoát và không thể xử lý hiệu quả việc củng cố.

  2. Có nguy cơ tín hiệu đột phá sai, các chỉ số khác cần để xác minh.

  3. Các thiết lập dừng lỗ và lấy lợi nhuận không đúng có thể dẫn đến việc thoát khỏi quá sớm hoặc lợi nhuận không đủ.

  4. Cài đặt khoảng thời gian kênh sai ảnh hưởng đến độ chính xác của tín hiệu giao dịch.

  5. Định dạng vị trí quá mức làm tăng rủi ro biến động thị trường.

  6. Rủi ro gián đoạn robot bất ngờ tồn tại, đảm bảo độ tin cậy của hệ thống.

Hướng dẫn cải thiện

  1. Thêm các chỉ số âm lượng để tránh đuổi theo những sự đột phá sai.

  2. Tăng các bộ lọc chỉ số xu hướng để cải thiện độ chính xác tín hiệu đầu vào.

  3. Tối ưu hóa các thuật toán dừng lỗ động và lấy lợi nhuận.

  4. Điều chỉnh chiến lược định hình vị trí dựa trên điều kiện thị trường thời gian thực.

  5. Nghiên cứu qua đêm và dữ liệu trước khi thị trường để có thời gian nhập khẩu tốt hơn.

  6. Kiểm tra các khoảng thời gian tham số khác nhau để tìm kết hợp tối ưu.

  7. Thêm xác nhận mô hình để ngăn ngừa quá phù hợp.

Kết luận

Nói chung, đây là một chiến lược thích nghi xu hướng đơn giản và thực tế. Nó có những ưu điểm như nhanh chóng nắm bắt các đột phá xu hướng và bảo vệ lợi nhuận. Nó cũng có những nhược điểm như không hiệu quả trong quá trình hợp nhất và tổn thất từ các đột phá sai. Những cải tiến trong tương lai nằm trong việc kết hợp nhiều bộ lọc tín hiệu hơn, dừng mất mát / lấy lợi nhuận năng động, để thích nghi với nhiều điều kiện thị trường hơn.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy(title = "Noro's Donchian Strategy", shorttitle = "Donchian str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
tp = input(defval = 10, minval = 1, title = "Take profit")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
pclen = input(50, minval = 1, title = "Price Channel Length")
showll = input(true, defval = true, title = "Show lines")
showbg = input(false, defval = false, title = "Show Background")
showof = input(true, defval = true, title = "Show Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Price Channel
h = highest(high, pclen)
l = lowest(low, pclen)
center = (h + l) / 2
tpl = h * (100 + tp) / 100
tps = l * (100 - tp) / 100

//Lines
tpcol = showll ? color.lime : na
pccol = showll ? color.blue : na
slcol = showll ? color.red : na
offset = showof ? 1 : 0
plot(tpl, offset = offset, color = tpcol, title = "TP Long")
plot(h, offset = offset, color = pccol, title = "Channel High")
plot(center, offset = offset, color = slcol, title = "Cannel Center")
plot(l, offset = offset, color = pccol, title = "Channel Low")
plot(tps, offset = offset, color = tpcol, title = "TP Short")

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(bgcol, transp = 70)

//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
mo = 0
mo := strategy.position_size != 0 ? 0 : high >= center and low <= center ? 1 : mo[1]
if h > 0
    strategy.entry("Long", strategy.long, lot, stop = h, when = strategy.position_size <= 0 and needlong and truetime and mo)
    strategy.exit("TP Long", "Long", limit = tpl, stop = center)
    strategy.entry("Short", strategy.short, lot, stop = l, when = strategy.position_size >= 0 and needshort and truetime and mo)
    strategy.exit("TP Short", "Short", limit = tps, stop = center)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Thêm nữa