Câu hỏi được đăng ẩn danh, còn câu trả lời là từ anh
@Đinh Toàn đăng trên group facebook Anh Em
TraderViet Thiện Lành
Nguồn bài viết
tại đây và
tại đây
***
Câu hỏi: Nhờ các tư vấn giúp em. E backtest
phương pháp giao dịch của mình thì cho lợi nhuận. Nhưng cứ khi giao dịch thật thì lại lỗ. Đó là em rất nhất quán với quy tắc phương pháp rồi. Phải chăng giữa backtest và tk thật có độ lệch sai số gì ko ạ. Nhờ các bác thông não chút ạ
Trả lời:
Trả lời thớt
1, Nhiệm vụ của backtest không phải là để xem hệ thống nó lời hay lỗ, nhất là với các
hệ thống giao dịch thuật toán. Cái này là bài học chung cho anh em chạy thuật toán/EA, vì cái khối dữ liệu lịch sử của anh em chỉ là một kịch bản, còn tương lai nó có vô hạn các khả năng có thể diễn ra trong một hình nón phân phối như ảnh ví dụ. Nếu
hệ thống giao dịch được curve fit cho một kịch bản duy nhất thì khả năng nó thích ứng với n kịch bản khác là cực thấp. Trường hợp này ta nói nó bị quá khớp (overfit).
Trái ngược với tư tưởng của anh em là test sao thì đánh vậy, vai trò của backtest (đặc biệt với giao dịch thuật toán) thực ra là để xem hệ thống làm ra có lỗi lầm gì ko, chứ ko phải là xem tính sinh lời nó bao nhiêu. Muốn kiểm tra tính sinh lời của hệ thống thì phải xem cái phân phối xác suất của mức returns nó như thế nào. Giả sử nếu returns của anh em tuân theo phân phối Gauss, thì phải xem khoảng từ -2 đến 2 sigma của nó có cho kỳ vọng dương không, nếu có thì mới kết luận được là nó lãi.
[PREVIEW]https://
traderviet.org/t/quant-la-cai-giong-gi.50406/[/PREVIEW]
2, Muốn backtest thì phải đảm bảo được môi trường backtest là chính xác hoặc ít nhất là tiệm cận với điều kiện trading thực tế. Cái này bao gồm chất lượng dữ liệu phải tốt, độ dài dữ liệu phải đủ lớn, và trong bài test phải bao gồm các yếu tố y hệt như khi đang trading thật, ví dụ slippage, latency, spread, commission... Nếu không phản án được các yếu tố này vào bài test thì kết quả test là không đáng tin cậy.
Một phương pháp để làm việc này mà mình đang áp dụng là mình viết một cái script, ghi lại toàn bộ biến động của cái broker của các bác, từ latency, đến biến động spread, com, trượt giá... cứ mỗi 30 giây nó ghi một bản. Kỹ thuật này gọi là lấy mẫu (sampling). Mình cho nó ghi sample liên tục trong khoảng 1 tháng, rồi xào nó lên và ghi đè lên khối dữ liệu quá khứ, như vậy mình có thể đảm bảo là data 10 15 năm trước vẫn có khả năng dùng được mà không bị lỗi thời với môi trường trading hiện tại. Mình gọi cách làm này là rửa dữ liệu.
2.5, Cái này cho các bác đánh thủ công, ko dùng bot, là các bác cố gắng dành tiền mua được cái phần mềm backtest nào mà nó chạy được cả tick, và mua data ngon cho nó. Cái các bác cần làm không phải là xây dựng hệ thống, mà là luyện tập, vậy nên em nhắc lại, cái các bác cần nhất là một môi trường backtest phản ánh đúng và đủ những gì đang diễn ra trong thực tế. Đừng test theo kiểu nhìn vào chart rồi quăng ba cái công cụ tính RR của tradingview vào rồi coi như xong. Nếu đã test thủ công để luyện tập cảm giác vào lệnh, nhất định phải nhìn vào cái cái chart sống, xem nến nó chạy, tick nó nhảy, indi nó ngọ nguậy. Và hơn hết là phải thành thật với chính mình.
3, Phải đảm bảo số mẫu là đủ lớn. Một bài backtest của mình có cỡ mẫu trung bình khoảng 3000 - 5000 lệnh, khối lượng data khoảng 10 năm. Các bài test kiểu backtest gọi chung là kiểm tra định lượng. Để một bài kiểm tra định lượng có ý nghĩa thì khối mẫu của bác phải đủ lớn, nếu chỉ lác đác vài lệnh thì thà không test nữa cho xong
4, Backtest chỉ là một trong số rất nhiều bài test mà các bác phải làm khi phát triển
hệ thống giao dịch, và nó KHÔNG CÓ KHẢ NĂNG thay thế vai trò của các bài test khác.
[PREVIEW]https://
traderviet.org/t/lap-trinh-robot-cho-giao-dich-thuat-toan-cua-rieng-ban-nhung-khai-niem-co-ban.35947/[/PREVIEW]