Mục lục bài viết
- Bằng chứng và phạm vi
- Hình minh họa
- Quy trình
- Noise Bands đo biên độ bình thường theo giờ
- Thiết kế dữ liệu và xử lý gap
- Khóa semantics vào lệnh và thoát lệnh
- Volatility sizing là lớp exposure riêng
- Hai diễn biến tự tạo sau một tín hiệu
- Đối chiếu ngoài mẫu và các phép thử cần làm
- Sai lầm thường gặp
- Checklist thực hành
- Câu hỏi thường gặp
- Nguồn nghiên cứu
Bằng chứng và phạm vi
Nguồn 05/2007–04/2024 báo +1.985%, IRR 19,6%, Sharpe 1,33, MDD 25%; commission $0,0035 và slippage $0,001/cổ phiếu. Hit ratio 43% là theo ngày; 37% là theo lệnh. [1]
Quy trình thực hành
- Chuẩn bị nền14 phiên trước cùng giờ và daily volatility.
- Tạo bandNeo open/previous close; giữ quy ước corporate actions.
- Cập nhật VWAPChỉ dùng volume phiên đã nhận.
- Quyết định định kỳTarget long/short/flat sau bar đóng.
- Khớp và thanh lýTính turnover đủ, cuối phiên về flat.
- Tách đóng gópSo band, VWAP và sizing ngoài mẫu.
Noise Bands đo biên độ bình thường theo giờ
Một biến động 0,4% sau mở cửa 15 phút và sau năm giờ không đại diện cùng mức bất thường. Ý tưởng của band theo giờ là dùng lịch sử tại cùng thời điểm để tạo chuẩn so sánh. Gọi d là phiên hiện tại, k là phút từ mở cửa và O là giá mở. Trung bình độ lệch tuyệt đối |P/O−1| không phải độ lệch chuẩn của return; tên biến sigma không thay đổi ý nghĩa phép tính.
Cấu hình nguồn dùng 14 phiên: σ(d,k)=mean(|P(d−j,k)/O(d−j)−1|). U=max(O,C_previous)×(1+σ), L=min(O,C_previous)×(1−σ). VWAP kết hợp band; sizing=min(4,2%/daily-vol14). [1]
Đây là vùng tham chiếu động, không phải khoảng tin cậy 95%. Band có thể rộng hoặc hẹp theo giờ tùy mẫu lịch sử. Một hệ thống nhân quả tính lịch band của hôm nay từ các phiên đã hoàn tất, sau đó cập nhật VWAP từ giao dịch trong phiên; không dùng đường giá còn lại của hôm nay để ước lượng biên.
Thiết kế dữ liệu và xử lý gap
Chỉ số k nên là phút tính từ mở cửa theo lịch sàn, không phải chuỗi timestamp đã chuyển múi giờ thiếu ngày nghỉ. Phiên rút ngắn cần chính sách rõ: không kéo dài volume hoặc giá đóng của nó sang buổi chiều không tồn tại. Với thiếu dữ liệu tại một k, bỏ phiên khỏi mẫu có thể làm số quan sát thay đổi; cấu hình đề xuất yêu cầu đủ 14 giá hợp lệ trước khi sử dụng điểm đó.
Nếu hôm qua đóng 500, hôm nay mở 505 và σ lúc 10:00 bằng 0,003, U=506,515 còn L=498,50. Gap không bị coi là biến động nội phiên thông thường quanh một neo duy nhất. Đây là ví dụ tự tạo để kiểm tra công thức, không phải mức giao dịch SPY hiện tại.
Corporate actions cũng tác động C_previous và O. Cần một quy ước nhất quán cho giá dùng tính return, band và giá có thể khớp; tránh ghép close đã điều chỉnh với open chưa điều chỉnh. Lưu phiên bản dữ liệu để lần cập nhật nhà cung cấp không âm thầm thay đổi kết quả.
Khóa semantics vào lệnh và thoát lệnh
Code công khai của tác giả kiểm tra giá vượt đồng thời band và VWAP, dịch exposure một nến; toàn notebook còn có chiến lược gap mean reversion. [2] Vì thế chỉ lấy phần momentum khi muốn đối chiếu phương pháp này.
Đặc tả triển khai đề xuất bên dưới chọn một máy trạng thái được đánh giá ở các mốc nửa giờ. Ở giữa các mốc, giữ vị thế; cuối phiên luôn flat. Đây là lựa chọn cần ghi rõ, không đánh đồng với stop broker hoạt động liên tục. Nếu muốn stop bảo vệ liên tục, phải tạo một biến thể khác và mô phỏng thời điểm update/cancel/replace.
Tại mỗi mốc, long nếu C>max(U,VWAP), short nếu C<min(L,VWAP), còn lại flat. Quyết định chỉ có hiệu lực sau khi bar đóng và xử lý xong. Khi đổi long sang short, khối lượng giao dịch gồm đóng long và mở short; chi phí phải tính trên tổng số cổ phiếu giao dịch.
before_session(d):
bands = build_from_completed_sessions(d, lookback=14)
daily_vol = sample_std(previous_14_daily_returns)
if data_incomplete or not isfinite(daily_vol) or daily_vol <= 0:
disable_session(); return
multiplier = min(4, 0.02 / daily_vol)
shares = floor(previous_equity * multiplier / session_open)
on_completed_bar(k):
if is_liquidation_deadline(k):
cancel_pending_entries(); submit_flat(); return
if session_disabled: return
update_session_vwap()
if is_decision_time(k):
target = 1 if close > max(upper[k], vwap) else (
-1 if close < min(lower[k], vwap) else 0)
submit_target_after_available_at(target * shares)
Volatility sizing là lớp exposure riêng
Nếu daily-vol quá khứ là 1%, công thức cho hệ số 2; nếu là 4%, hệ số 0,5. Nó không đảm bảo ngày tới biến động đúng bằng mức mục tiêu và cũng không đảm bảo lỗ tối đa 2%. Ngày xuất hiện tin đột ngột có thể đi xa hơn lịch sử.
Cấu hình nghiên cứu của bài này đóng băng shares theo equity phiên trước và open hiện tại. Nếu engine cân lại shares mỗi mốc theo giá mới, đó là biến thể khác có turnover khác. Phải ghi cả số cổ phiếu, notional tại thời điểm khớp và giới hạn margin thực tế.
Muốn biết VWAP hữu ích hay lợi nhuận chỉ tăng do exposure, hãy so cùng một lịch tín hiệu với size 1×, rồi so hai bộ tín hiệu ở cùng ngân sách volatility. Kiểm tra cả mean return, drawdown và tail risk; lấy tổng lợi nhuận lớn nhất sẽ ưu tiên phương án vay nhiều hơn một cách máy móc.
Hai diễn biến tự tạo sau một tín hiệu
Giả sử tại 10:00, U=506,515, VWAP=506,20, close=506,80. Điều kiện long có hiệu lực khi bar đã hoàn tất; lệnh khớp tiếp theo 506,86. Tại 10:30 giá vẫn trên cả hai ngưỡng, vị thế giữ nguyên. Cuối phiên bán 509,00 cho chênh lệch giá 2,14/cổ phiếu trước chi phí.
Kịch bản thất bại bắt đầu bằng đúng tín hiệu đó, nhưng 10:30 close=506,30 trong khi U=506,60, VWAP=506,50; target chuyển flat, bán thực tế 506,24. Lỗ giá 0,62/cổ phiếu. Nếu giá từng rơi sâu giữa hai mốc rồi hồi, phiên bản đánh giá nửa giờ có thể vẫn giữ, còn phiên bản stop liên tục đã thoát. Không thể chọn cách xử lý sau khi xem diễn biến.
Volume tăng mạnh ở mức giá thấp có thể kéo VWAP xuống, làm đường thoát thay đổi mà band lịch sử vẫn giữ cách tính cũ. Vì vậy cần lưu cả tử số và mẫu số VWAP để phân biệt biến động giá với thay đổi trọng số volume.
Đối chiếu ngoài mẫu và các phép thử cần làm
README tái lập độc lập của Paz Serpa báo Sharpe 1,34 trong mẫu 2015–2024 và 0,39 từ 05/2024–03/2026; dữ liệu đầy đủ có giấy phép, không kèm repo. [3] Bài này đã đọc README, chưa chạy mã hay kiểm toán kết quả.
Kết quả ngoài mẫu thấp hơn là lý do nghiên cứu độ bền, không tự chứng minh nguyên nhân là overfit hay thị trường thay đổi. Hai bản dùng lịch dữ liệu, thời gian quyết định hoặc VWAP khác nhau có thể tạo lệnh khác nhau. Trước khi giải thích kinh tế, đối chiếu vài ngày ở mức bar: band, VWAP, signal, exposure và fill.
Kế hoạch đề xuất gồm band-only, thêm VWAP entry, thêm VWAP exit và thêm sizing. Giữ chi phí cùng quy ước, thử độ trễ một bar, chia năm và chế độ biến động xác định từ quá khứ. Ghi mọi biến thể đã thử; một cửa sổ sau công bố chỉ là test sạch nếu chưa dùng nó để chọn lại quy tắc.
Sai lầm thường gặp
Gộp notebook thành một chiến lược
Phần mean reversion gap có thể thay kết quả. Tách sổ lệnh và equity theo strategy_id.
Xem volatility target là stop-loss
Sizing không giới hạn gap hoặc lỗ nội phiên; stress dữ liệu khi volatility tăng đột ngột.
Giữ giá đóng vừa tạo tín hiệu làm giá khớp chắc chắn
Một báo cáo tốt cần giá khả thi sau available_at; next open cũng chỉ là giả định cần kiểm tra.
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.
Câu hỏi thường gặp
Noise Bands có giống Bollinger Bands?
Không. Ở đây nền là độ lệch tuyệt đối từ open của các phiên trước tại cùng giờ; Bollinger thông thường dùng trung bình và độ lệch chuẩn trong một cửa sổ giá.
Vì sao 43% và 37% đều xuất hiện?
Nguồn báo 43% số ngày có lãi và 37% số lệnh có lãi. Một ngày có nhiều lệnh nên hai mẫu số khác nhau.
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.
- Beat the Market: An Effective Intraday Momentum Strategy for S&P500 ETF (SPY)Zarattini, Aziz, Barbon — bản 03/02/2025. Đọc PDF; bảng 3 trang 15 và bảng 4 trang 16. Kết quả nguồn, không tái chạy. Đối chiếu: .
- Designing a Profitable Intraday Strategy Using Python and AlpacaConcretum Group. Đọc hướng dẫn và code; có thêm chiến lược gap ngoài momentum. Đối chiếu: .
- Out-of-Sample Evaluation of an Intraday Momentum Strategy for SPYSheimy Paz Serpa. Chỉ đọc README và thông tin dữ liệu; chưa kiểm tra toàn bộ PDF hoặc chạy lại mã. Đố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