Những nguyên tắc quant nào đã thật sự thay đổi cách mình xây một trading bot?
· #systematic-trading #quant-books #risk-management #backtesting #trading-bots
Một cuốn sách kinh điển về quant trading đã thay đổi bot của mình ở chín chỗ cụ thể, và không chỗ nào là về việc tìm một tín hiệu thông minh hơn. Tất cả đều là về việc loại bỏ những chỗ mà mình, dữ liệu của mình, hoặc sự lạc quan của mình có thể âm thầm đánh lừa mình. Cuốn sách là Quantitative Trading của Ernest Chan. Mình là kỹ sư tự học, nên mình ghi công ý tưởng cho ông, chỉ giữ lại các nguyên tắc, và kể lại mình đã làm gì với từng ý trong công việc của mình.
Đây là nhật ký xây dựng, không phải lời khuyên. Hệ thống MasterVP không có track record live nào mà mình dẫn ra ở đây, và không có gì bên dưới là một kết quả.
Vì sao rule giao dịch phải là thứ máy chạy được?
Vì bất cứ thứ gì không viết được thật chính xác sẽ bị đọc lại dưới áp lực, theo chiều mà nỗi sợ muốn.
"Trông như đang breakout" không phải là rule. Hai người nhìn cùng một chart sẽ đọc khác nhau, và cùng một người cũng đọc khác nhau giữa ngày tốt và ngày xấu. "Vào khi X cắt Y với điều kiện Z, thoát ở A" mới là rule, và máy chạy nó giống hệt nhau mọi lần.
Nên tiêu chuẩn cho mọi ý tưởng đi vào quy trình nghiên cứu trong Dquants engine mình tự phát triển rất đơn giản: nó chỉ trở thành feature của bot khi là một điều kiện rõ ràng để code MQL5 đánh giá giống nhau ở từng bar. Thứ mình chỉ mô tả được bằng lời thì ở lại dạng ghi chú. Nếu không encode được, mình chưa có hệ thống. Mình chỉ có một linh cảm rất dễ bị bỏ rơi.
Tự động hóa loại bỏ điều gì, và để lại điều gì?
Nó loại bỏ những bước mà nỗi sợ, lòng tham hay sự do dự có thể chen vào. Một Expert Advisor đã cấu hình sẽ đọc dữ liệu, áp dụng setting người dùng chọn, rồi gửi lệnh. Quyết định được đưa ra bình tĩnh từ lúc viết rule, và phần chạy live chỉ thực hiện nó.
Thứ nó để lại là một bài toán khó hơn: giữ tay mình yên. Hệ thống có thể tự chạy gần cả ngày, và cám dỗ mạnh nhất là ngồi nhìn P&L trong ngày rồi can thiệp khi có cú biến động lớn. Cú swing khiến mình muốn "chỉnh một chút" nhiều khi chỉ là nhiễu bình thường mà backtest đã tính tới.
Câu trả lời của mình không phải thêm ý chí, mà là bớt nút override. MasterVP Expert Advisor chạy theo đúng session và risk limit đã cấu hình. Profiler indicator hiển thị cùng một góc đọc và để quyết định đặt lệnh cho người dùng. Hai cánh cửa vào cùng một phương pháp, người dùng chọn cái hợp với ngày của mình.
Vì sao chi phí quan trọng hơn tín hiệu?
Mỗi lệnh đều trả một khoản phí: commission, spread phải vượt qua, tác động của chính lệnh đó, và slippage giữa giá mình muốn với giá mình nhận được. Chiến lược càng giao dịch nhiều thì các khoản này càng chồng lên, và một hệ thống trông rất đẹp trên giấy có thể lật sang thua khi trừ chi phí thực tế.
Một backtest bỏ qua chi phí không chỉ hơi lạc quan. Nó là một chiến lược khác, thứ mình không giao dịch được. Vì vậy backtest trong Dquants engine trừ commission, spread và slippage trên tick thật trước khi một edge được phép trông có vẻ thật. Một curve không ma sát không bao giờ có cơ hội thuyết phục mình đưa nó vào bot.
Mình đã viết về một trường hợp cụ thể trong Vì sao giao dịch quá nhiều âm thầm giết chết một chiến lược.
Survivorship bias là gì, và nó đổi lựa chọn dữ liệu của mình ra sao?
Một số bộ dữ liệu lịch sử âm thầm loại bỏ những công ty đã phá sản, bị hủy niêm yết hoặc bị mua lại. Phần còn lại chỉ là những cái tên sống sót, nên quá khứ trông đẹp hơn thực tế. Bias này đặc biệt nguy hiểm với chiến lược "mua thứ đang rẻ", vì có những mã rẻ chính vì sắp chết.
Mình không giao dịch cổ phiếu riêng lẻ, nên dạng trực tiếp không áp dụng cho bot của mình. Nhưng nguyên tắc thì có. Nghiên cứu chạy trên lịch sử tick thật đầy đủ của đúng sản phẩm bot giao dịch, XAUUSD, thay vì một mẫu đã được làm sạch đến mức quên mất người thua. Trước khi tin bất kỳ backtest nào, mình hỏi một câu nhàm chán: những thất bại đã đi đâu?
Vì sao model đơn giản thường là model sống sót?
Cho một model đủ nhiều núm vặn, mình làm được bất kỳ quá khứ nào trông thật đẹp. Nhưng khi đó mình không fit vào pattern thật. Mình fit vào những tai nạn ngẫu nhiên của một đoạn lịch sử cụ thể, thứ sẽ không lặp lại. Đó là overfitting, nó có thể lẻn vào chỉ với vài threshold chỉnh quá tay và tệ dần theo mỗi rule thêm vào.
Những model còn hoạt động sau khi backtest kết thúc thường là model đơn giản, ít bộ phận và bảo vệ được. Lõi MasterVP được giữ nhỏ có chủ đích, chỉ một số rule Volume Profile mà mình giải thích được. Trong Dquants engine, threshold nào chỉ đẹp ở một lát cắt lịch sử thì bị cắt khỏi bot, không được giữ lại. Mình thà có ít rule hiểu rõ hơn một curve chỉ giỏi nịnh lịch sử.
Có nên tin công thức sizing theo nghĩa đen không?
Không. Kelly criterion cho biết mức size tối đa hóa tăng trưởng dài hạn: đại khái là risk tăng theo edge và giảm theo độ nhiễu. Nó biến câu hỏi "nên risk bao nhiêu" từ cảm tính thành phép tính, điều mình thích.
Nhưng đáp án chỉ tối ưu nếu mình biết chính xác edge và return hành xử như phân phối chuông gọn gàng. Mình không biết chính xác edge của mình, và thị trường thật có những cú move cực đoan hơn nhiều so với giả định của toán. Trader có kinh nghiệm cố ý dùng một nửa con số của công thức, hoặc ít hơn. Tin công thức theo nghĩa đen cũng là một dạng quá tự tin.
Vì vậy sizing và các mức cap của Expert Advisor nằm thấp hơn nhiều so với những gì công thức gợi ý. Giá trị mặc định đổi một chút tăng trưởng lý thuyết lấy khả năng sống sót cao hơn. Bản đầy đủ hơn nằm trong Kelly Criterion và position sizing cho trader hệ thống.
Điều gì thật sự phá hỏng một chiến lược tốt?
Thường không phải chiến lược tệ. Khi các quỹ lớn sụp đổ nhanh, nguyên nhân hay là quá nhiều đòn bẩy hơn là model hỏng từ gốc. Không ai đặt size lớn vào chiến lược họ nghĩ là xấu. Khoảnh khắc nguy hiểm là lúc đang thắng, khi sự tự tin khiến mình tăng size ngay trước một cú biến động hiếm và mạnh.
Đó là lý do Expert Advisor ép mức rủi ro tối đa mỗi ngày và position cap cố định thẳng trong code. Một chuỗi thắng không thể dụ mình vào mức size mà một cú move hiếm có thể phạt nặng. Kẻ thù không phải hệ thống thua mà mình sẽ không bao giờ cấp vốn, mà là hệ thống tốt mình đã tin quá mức.
Nhỏ có phải là bất lợi không?
Ít hơn nghe có vẻ. Một edge không scale vô hạn. Đẩy thêm vốn vào thì chính mình bắt đầu làm thị trường dịch chuyển chống lại mình, nên return trên mỗi đô giảm. Giới hạn đó gọi là capacity, và là lý do một số edge có thật lại quá nhỏ để quỹ lớn bận tâm.
Nhỏ là một lợi thế cấu trúc: mình có thể giảm đòn bẩy gần như ngay lập tức, hoặc đứng hoàn toàn ngoài thị trường. Mình xây MasterVP cho đúng góc đó, làm việc ở khung M5 và M10 trên XAUUSD, những setup chính xác với capacity hạn chế. Mình coi đó là lợi thế để xây trên, không phải điểm yếu cần xin lỗi.
Vì sao edge có chu kỳ bán rã?
Một backtest mười năm rực rỡ có thể hoàn toàn được nâng bởi một market regime không còn tồn tại. Thị trường đi qua nhiều pha, và cạnh tranh ăn mòn edge: nó làm cơ hội mean-reversion mỏng dần và rút ngắn thời gian trend còn sinh lời khi tin tức lan nhanh hơn. Một chiến lược đóng băng parameter mãi mãi đang âm thầm cược rằng thế giới không đổi. Tên lịch sự của hệ quả là alpha decay.
Nên câu hỏi không phải "nó từng hoạt động không", mà là "nó còn hoạt động không, và mình sẽ biết lúc nó dừng bằng cách nào". Mình liên tục re-test rule của MasterVP trên tick data mới trong Dquants engine và theo dõi lúc expectancy bắt đầu mờ đi. Parameter được review bằng bằng chứng, không bị đóng băng rồi quên.
Tóm lại mình đã đổi những gì?
- Ý tưởng phải là rule code được, nếu không thì chỉ là ghi chú.
- Thực thi tự động, và nút override bị loại bỏ thay vì cố cưỡng lại.
- Chi phí được trừ trước, trên tick thật.
- Nghiên cứu dùng lịch sử đầy đủ của đúng sản phẩm mình giao dịch.
- Model đủ nhỏ để bảo vệ được.
- Sizing nằm dưới mức công thức gợi ý.
- Risk cap được hard-code, nên một chuỗi tốt không dụ mình tăng thêm.
- Mình ở trong góc mà nhỏ là lợi thế.
- Mình giả định edge sẽ suy giảm và liên tục re-test.
Không điều nào đảm bảo gì cả. Chúng chỉ làm giảm số cách mình có thể tự đánh lừa mình, và đó là phần việc mình kiểm soát được.
Câu hỏi thường gặp
Đây có phải lời khuyên tài chính không? Không. Đây là mô tả cách một kỹ sư tự học xây phần mềm. Chỉ mang tính giáo dục.
Những ý tưởng này từ cuốn sách nào? Quantitative Trading của Ernest Chan. Mình ghi công nguyên tắc cho ông và không đăng lại trade, parameter hay con số cụ thể của ông.
MasterVP có track record live để cho xem ở đây không? Không trong bài này. Mình đang mô tả phương pháp, và mọi backtest đều đi kèm lưu ý rằng backtest không phải giao dịch thật.
Bạn có giao dịch cổ phiếu riêng lẻ không? Không. MasterVP giao dịch XAUUSD, nên với mình survivorship bias là nguyên tắc vệ sinh dữ liệu chứ không phải rủi ro trực tiếp.
Sao không thêm rule để backtest đẹp hơn? Vì mỗi rule thêm là một chỗ nữa để fit nhiễu. Ít rule bảo vệ được tốt hơn nhiều rule không bảo vệ được.
Tự động hóa nghĩa là không bao giờ nhìn hệ thống? Không. Mình theo dõi để phát hiện hỏng hóc thật, chỉ là không nghi ngờ hệ thống đã cấu hình chỉ vì một con số làm mình sợ.
Vì sao size thấp hơn mức Kelly? Vì công thức giả định mình biết edge thật và return ngoan ngoãn. Cả hai đều không đúng, nên mình đổi một chút tăng trưởng lý thuyết lấy khả năng sống sót.
Nên bắt đầu từ ý nào? Viết rule đủ chính xác để một cái máy chạy được. Mọi thứ khác sẽ dễ test hơn sau đó.
Viết bởi một kỹ sư tự học xây phần mềm giao dịch và chia sẻ quá trình một cách công khai. Soạn từ chuỗi build-log của KenKem. Chỉ mang tính giáo dục. Không phải lời khuyên tài chính. Hiệu suất quá khứ không đảm bảo kết quả tương lai.