Vì Sao Vào Lệnh Quá Nhiều Âm Thầm Giết Một Chiến Lược
· #systematic-trading #trading-psychology #trading-costs #backtesting #risk-management
Một trong những thất bại hữu ích nhất của dự án này lúc đầu không trông giống thất bại chút nào. Mình có một chiến lược chọn lọc, kiểu chiến lược ngồi yên phần lớn thời gian trong ngày. Mình tối ưu nó. Bản tối ưu bắt đầu vào lệnh nhiều hơn hẳn, và trong một khoảng thời gian mình đọc điều đó như là tiến bộ.
Đó không phải tiến bộ. Đó là chiến lược đang đánh mất đúng thứ đã làm nó hoạt động.
Vì sao vào lệnh nhiều hơn lại có cảm giác như đang tiến bộ?
Đây là phần chạm mạnh nhất với bất kỳ ai từng trade tay. Đang có vị thế thì cảm giác như đang làm việc. Đứng ngoài thì cảm giác như đang bỏ lỡ. Tâm trí âm thầm quy đổi hoạt động thành năng suất, và nhiều tín hiệu thành nhiều cơ hội.
Mình đã cảm nhận điều đó khi còn trade tay, và hơi bất ngờ khi thấy thiên kiến đó vẫn sống sót sau khi chuyển sang code. Nó không biến mất khi bạn tự động hóa. Nó chỉ đổi chỗ. Nó chuyển vào lựa chọn của bạn về thứ cần tối ưu, và nấp ở đó, khoác lên mình lớp áo của một quyết định kỹ thuật.
Đó là phiên bản thành thật của chuyện đã xảy ra. Không ai trong dự án này quyết định sẽ over-trade. Mình chọn một mục tiêu, chạy optimizer, và optimizer trả về đúng thứ mình yêu cầu, chỉ là nó không phải thứ mình thực sự muốn.
Những lệnh thêm vào đã tốn bao nhiêu?
Mỗi fill đều phải trả một cái giá. Spread, slippage, commission. Tách riêng ra thì đây là những dòng chi phí nhàm chán mà không ai viết bài dài về chúng.
Cách diễn đạt cuối cùng làm mình thấy rõ vấn đề: với một hệ thống vào vài lệnh mỗi ngày, chi phí là một loại thuế. Với một hệ thống over-trade, chi phí là toàn bộ câu chuyện. Thuế thì bạn hấp thụ được nếu edge mỗi lệnh đủ lớn. Còn câu chuyện thì bạn không cãi lại được.
Những lệnh thêm vào có chất lượng thấp hơn nhóm gốc, mà vẫn trả đủ phí như nhau. Nên tài khoản bị rút máu qua dòng chi phí trong khi các con số bề mặt vẫn trông tử tế.
Trước đây mình đối xử với fill như thể chúng gần như miễn phí, nếu không phải trên spreadsheet thì cũng là trong đầu. Tick data thật chấm dứt ảo tưởng đó rất nhanh. Trong các backtest của dquants, mỗi fill giờ đều bị trừ commission, spread và slippage trước khi mình đọc bất kỳ con số lãi lỗ nào. Chi phí đi vào trước, không phải sau. Nếu một kết quả chỉ sống sót khi bạn mô phỏng fill một cách dễ dãi, thì đó không phải kết quả.
Broker là đối tác ở mỗi lệnh. Hãy model điều đó, hoặc nó sẽ model bạn.
Vì sao win-rate cao vẫn có thể che giấu một hệ thống thua?
Chi tiết khó chịu là win-rate gần như không đổi. Nó vẫn trông ổn.
Win-rate cho bạn biết bạn đúng bao nhiêu lần. Nó không nói gì về độ lớn của những lần sai. Một hệ thống có thể thắng phần lớn số lệnh mà vẫn mất tiền nếu các lệnh thua đủ lớn và đủ thường xuyên, và chi phí làm phép tính đó tệ hơn theo cách rất dễ bỏ sót, bởi vì nó không bao giờ xuất hiện như một sự kiện kịch tính. Nó xuất hiện như một sự bào mòn chậm và không có gì đáng chú ý.
Đó là lý do mình không còn đọc win-rate như một con số tiêu đề. Đứng một mình, nó gần với trang trí hơn là bằng chứng.
Vậy edge thật sự nằm ở đâu?
Khi đào sâu, câu trả lời gần như quá gọn. Thứ làm chiến lược gốc hoạt động lại chính là thứ mà quá trình tối ưu đã loại bỏ.
Sự kỷ luật của nó. Khả năng không làm gì trong phần lớn thời gian.
Mình đã tối ưu mất sự kiên nhẫn đó, rồi gọi nó là nâng cấp. Đôi khi nhiều tín hiệu hơn chỉ là ít edge hơn, xuất hiện thường hơn.
Mình thấy điều này thực sự đáng ngồi lại suy nghĩ, vì nó đảo ngược trực giác. Tính chọn lọc không phải một giới hạn của chiến lược mà một bản tốt hơn sẽ nới lỏng. Tính chọn lọc chính là chiến lược. Những lần từ chối vào lệnh mới là phần đang làm việc.
Điều này thay đổi cách mình tối ưu ra sao?
Chủ yếu là thay đổi thứ mà mình cho phép optimizer tưởng thưởng. Một hàm mục tiêu âm thầm ưu ái hoạt động nhiều hơn sẽ tìm ra hoạt động nhiều hơn, và trông rất khoa học trong lúc làm việc đó. Số lệnh giờ là thứ mình kiểm tra ở mọi bộ tham số, thay vì phát hiện ra sau, và một cú nhảy lớn về tần suất vào lệnh được đọc như một cảnh báo chứ không phải một tính năng.
Bài học rộng hơn không nằm ở một thiết lập cụ thể nào. Nó là: optimizer không có gu. Nó không phân biệt được đâu là edge và đâu là sản phẩm phụ của mục tiêu mà bạn đưa cho nó. Phần phán đoán đó vẫn thuộc về người viết ra mục tiêu ấy.
Có gì mình vẫn chưa được quyền tuyên bố?
Có hai ghi chú thành thật cần nằm trong bài này, vì bỏ chúng ra sẽ làm câu chuyện gọn gàng hơn thực tế.
Thứ nhất là vấn đề nhãn dữ liệu. Một phần phương pháp của mình dựa trên volume profile, nhưng feed retail mà mình có đo quote activity, tức là giá được cập nhật thường xuyên tới đâu, không phải khối lượng giao dịch thật. Hai thứ đó không giống nhau, và đối xử cái này như cái kia là một claim mình chưa kiếm được. Nên mình đổi nhãn lại cho thành thật và giữ vậy cho tới khi có nguồn thứ hai xác nhận cấu trúc đó vẫn đứng vững. Workflow nghiên cứu MasterVP đọc level từ cấu trúc volume profile đó, nên gọi đúng nhãn không phải chuyện học thuật. Nó là một phần nền móng mà sản phẩm đứng lên.
Thứ hai là nguồn dữ liệu. Toàn bộ tick data của mình đến từ feed của một broker duy nhất. Như vậy đủ để nghiên cứu timing và spread. Nhưng chưa đủ để tuyên bố một edge là phổ quát. Một pattern có thật trên một feed nhưng biến mất trên feed khác là artifact của nguồn dữ liệu, không phải sự thật của thị trường, và mình sẽ không đưa ra claim cross-broker cho tới khi kiểm tra qua nhiều broker. Một nguồn dữ liệu là một ý kiến mạnh, chưa phải sự thật.
Tự tin, hay chắc chắn?
Mình tự tin vào quy trình. Mình không chắc chắn về bất kỳ chiến lược đơn lẻ nào, và đó là hai cảm giác khác nhau, nên giữ chúng khác nhau.
Tự tin đến từ độ nghiêm khắc của kiểm định. Chắc chắn thì cần quyền truy cập vào một tương lai mà không ai có. Ai bán cho bạn sự chắc chắn về thị trường thường đang bán một thứ gì đó.
Hãy tin phương pháp đủ để đi theo nó, và nghi ngờ mọi dự báo đủ để quản trị rủi ro. Chuyện over-trading là một ví dụ nhỏ và cụ thể về điều xảy ra khi vế thứ hai im tiếng: hệ thống ngừng từ chối, chi phí cộng dồn, và các con số vẫn lịch sự cho tới lúc chúng không thể lịch sự được nữa.
MasterVP tồn tại để làm cấu trúc đó hiện rõ trên biểu đồ, để một setup có thể được xem xét bình tĩnh thay vì bị phản ứng theo cảm xúc. Nó không loại bỏ nhu cầu phải suy nghĩ, và nó không có lịch sử giao dịch live nào để đem ra khoe. Thứ nó có là một quy trình nghiên cứu sẵn sàng công bố cả những thất bại của chính mình, và đây là một trong số đó.
Bài viết này được tổng hợp từ loạt build-log của KenKem. Chỉ nhằm mục đích giáo dục. Không phải lời khuyên đầu tư. Kết quả quá khứ không đảm bảo kết quả tương lai.