Mục lục bài viết

Bằng chứng và phạm vi

Nguồn chính thức hỗ trợ công thức kênh, dịch dữ liệu và thời điểm mô phỏng lệnh. Không suy từ lịch sử trend following ra lợi nhuận của cấu hình trong bài.

Dữ liệu và thị trườngOHLC của từng công cụ và phiên giao dịch; futures cần quy định hợp đồng, cổ phiếu cần thống nhất điều chỉnh split.
Khung thời gian nghiên cứuN=20 trên H1 hoặc ngày là ví dụ nghiên cứu, không phải khuyến nghị dùng chung.
Giá dao động giữa 99 và 105 rồi đóng trên 105 với volume tăng, sau đó tiếp diễn trong ví dụ tự tạo.Mở hình kích thước đầy đủ
Đường giá và volume tổng hợp cho nhánh breakout. Hai mức thể hiện snapshot trước trigger; không phải kênh rolling tính lại trên mọi điểm của hình.

Quy trình thực hành

Sơ đồ quy trình Donchian rolling: đỉnh đáy quá khứ cho breakout và sweep
Các bước được mô tả đầy đủ bên dưới. Tại mỗi bước, dữ liệu thiếu hoặc điều kiện sai phải có lý do loại bỏ.
  1. Đủ N nếnLấy cửa sổ hoàn tất trước nến hiện tại.
  2. Chốt U và DGhi cả giá và tuổi cực trị.
  3. Phân loại sự kiệnClose vượt mức khác với xuyên rồi reclaim.
  4. Áp volumeFeature phải sẵn có đúng lúc gửi lệnh.
  5. Mô phỏng lệnhEntry, stop, hết hạn theo phiên bản đã chọn.

Biên cửa sổ không phải swing

Donchian lấy cực trị của N nến; TradingView mô tả hai biên cùng đường giữa [1]. Không cần giá quay đầu để biết biên. Vì vậy detector có thể dùng ngay từ đầu nến tiếp theo, sớm hơn một pivot cần nến bên phải. Đổi lại, biên cao có thể liên tục tăng trong xu hướng mà không tạo kháng cự giữ được.

Thiết kế đề xuất: U[t]=max(H[t−N:t]), D[t]=min(L[t−N:t]), M[t]=(U[t]+D[t])/2. Dấu ngoặc biểu diễn cửa sổ kết thúc ở t−1. Dùng đúng N nến đã đóng và bỏ nến t khỏi tham chiếu. Nếu đưa H[t] vào U[t], điều kiện H[t]>U[t] trở thành bất khả thi.

Tạo mức trước rồi mới xét sự kiện

Trong pandas, phép dịch giá trị giúp tách dữ liệu tham chiếu khỏi hàng đang xét [2]. Một cách triển khai là high.shift(1).rolling(N).max(); không dùng shift với freq để thay việc dịch giá trị. Baseline dưới đây chọn close vượt mức với buffer b=max(2 tick,0,1 ATR[t−1]); N=20 và 0,1 là tham số nghiên cứu.

Nếu chỉ cần breakout tức thời, tính mức mới mỗi nến. Nếu cần theo dõi sweep rồi reclaim trong ba nến, phải chốt U và D khi sự kiện bắt đầu. Nếu không, chính nến xuyên mức sẽ đi vào cửa sổ ngày sau và đẩy biên chạy theo sự kiện đang được đánh giá.

U = max(H[t-N:t]); D = min(L[t-N:t])
b = max(2*tick, 0.1*ATR[t-1])
if no_active_setup and C[t] > U+b:
    emit('up_breakout', signal_at=t, frozen_level=U)
if no_active_setup and H[t] > U+b and C[t] < U:
    emit('upper_reclaim', signal_at=t, frozen_level=U)
# Hai nhãn thuộc hai giả thuyết khác nhau.
# Lệnh close-confirmed chỉ có thể được xử lý sau close t.

Một biên, hai kết quả khác nhau

Ví dụ tổng hợp: 20 nến trước có U=105, D=99 và ATR=1; tick=0,01 nên b=0,10. Nến t có H=106, C=105,4 tạo breakout tăng. Nếu chiến lược mua open kế tiếp 105,5, stop đề xuất 103,9 và target 108,7, khoảng rủi ro là 1,6 điểm và target bằng 2R trước chi phí.

Trường hợp thất bại: nến sau mở 105,5 rồi giảm về 103,8. Stop bị chạm dù close trigger đúng công thức. Nếu nến t có H=106 nhưng C=104,7 thì không có breakout close; có thể là upper reclaim cho một chiến lược short khác. Không đổi nhãn từ breakout sang sweep sau khi đã biết lệnh thua.

Một lỗi tinh vi: đỉnh 105 rời cửa sổ sau N nến khiến U giảm về 104. Giá 104,5 lúc này vượt kênh dù không tạo đỉnh giá mới. Đây là kết quả hợp lệ của rolling window. Nếu không muốn giao dịch kiểu tín hiệu này, thêm điều kiện nguồn gốc mức và kiểm định như một biến thể riêng.

Đặt lệnh, vô hiệu và thời hạn

Tài liệu broker emulator phân biệt tạo lệnh sau close và fill ở tick tiếp theo [3]. Với baseline close-confirmed, mô phỏng next open cùng spread/trượt giá. Buy stop đặt sẵn trên U là phiên bản khác: nó có thể khớp trong nến rồi bị đảo chiều trước close, nên không được loại trade chỉ vì close không vượt biên.

Quy tắc thoát có thể là stop ban đầu dưới vùng retest, trailing bằng D của cửa sổ ngắn hơn, hoặc time exit. Chọn một cấu hình đơn giản trước. Nếu chờ retest, ghi no-fill khi thị trường chạy luôn; không chuyển ngầm sang đuổi giá. Một nến chạm cả stop và target cần dữ liệu nhỏ hơn hoặc giả định bất lợi rõ ràng.

Volume xác nhận hay chi phí cao hơn

Thử lọc breakout với RVOL≥1,5 tính từ baseline cùng giờ phiên. Đặt feature tại nến close trigger; nếu lệnh buy stop đã đặt từ trước, chỉ dùng volume lũy kế đến lúc đặt lệnh. Volume toàn nến sau khi fill không thể trở thành điều kiện khiến lệnh trước đó được phép tồn tại.

Chia kết quả thành không lọc, lọc thanh khoản tối thiểu và lọc volume bất thường. Nhóm RVOL cao có thể dịch chuyển tốt hơn nhưng cũng gap nhiều hơn. So sánh sau spread và slippage, đồng thời báo tỷ lệ cơ hội bị loại; một win rate cao hơn trên rất ít trade chưa chứng minh tổng hệ thống tốt hơn.

Đánh giá đúng loại breakout

Đăng ký vài N như 10,20,40 trên development. Ghi mức biên, nến tạo cực trị và tuổi mức khi trigger để phân biệt breakout đỉnh mới với breakout do biên cũ hết hạn. Tách phiên có tin, mở cửa và cuối phiên nếu dữ liệu cho phép, nhưng không tối ưu hàng chục nhóm sau khi xem test.

Kiểm thử nhân quả bằng cách sửa H[t] và xác nhận U[t] không đổi; sửa H[t−1] phải có thể đổi U[t]. Kiểm tra thiếu nến, phiên nghỉ và gap. Chỉ sau khi detector đúng mới dùng đánh giá ngoài mẫu có phí, turnover, exposure, drawdown và độ nhạy với giá fill.

Sai lầm thường gặp

Tự đuổi theo mức

Reclaim so với kênh cập nhật có thể mang ý nghĩa khác reclaim mức bị phá ban đầu.

Nhầm chạm với vượt

Giá bằng U không nhất thiết là breakout; tie và tick phải quy định.

Kênh quá ngắn

N nhỏ có thể tăng turnover và để chi phí chi phối kết quả.

Checklist trước khi dùng phương pháp

Tự đánh dấu khi đã kiểm tra trên dữ liệu của bạn. Trạng thái lưu trong trình duyệt này; đây không phải chứng nhận chiến lược có lãi.

0/8 mục

Câu hỏi thường gặp

Chạm upper band có nên bán không?

Không có kết luận chung. Bán hồi quy và mua breakout là hai giả thuyết đối nghịch cần kiểm định riêng.

Có thể dùng Donchian thay pivot không?

Có thể làm mức tham chiếu cho breakout, nhưng nó không cung cấp xác nhận đảo chiều và thứ tự swing như pivot.

Nguồn nghiên cứu

Các nguồn dưới đây hỗ trợ phần định nghĩa hoặc bằng chứng được ghi bên cạnh. Mã giả, ví dụ minh họa và tham số đề xuất trong bài cần được kiểm định riêng.

  1. Donchian ChannelsTradingView. Đã đọc công thức kênh và cách dùng mô tả. Đối chiếu: .
  2. pandas.Series.shiftpandas. Đã mở API để đối chiếu phép dịch dữ liệu. Đối chiếu: .
  3. Pine Script: StrategiesTradingView. Đã đọc tạo lệnh, next available tick và stop order. Đối chiếu: .

Đọc tiếp theo phương pháp

Lưu ý rủi ro

Nội dung phục vụ giáo dục và thiết kế nghiên cứu, không phải lời khuyên tài chính. Backtest là mô phỏng lịch sử, không bảo đảm hiệu quả tương lai và không đặt lệnh giao dịch thật. Các phương pháp trong thư viện không mặc nhiên là tính năng đã có trong ứng dụng. Xem phương pháp tính và trung tâm học.

Kiểm tra quy tắc trước khi dùng vốn thật

Đối chiếu khả năng hỗ trợ của ứng dụng, dữ liệu và từng giao dịch mô phỏng; các detector nâng cao có thể cần triển khai riêng.

Tải Backtest trên App Store