Quant trading: Backtesting - câu chuyện muôn thuở

Quant trading: Backtesting - câu chuyện muôn thuở

Quant trading: Backtesting - câu chuyện muôn thuở

Đinh Toàn

Active Member
68
139
Chào các cụ, đợt rồi thấy nhiều cụ trên diễn đàn cũng như facebook quan tâm đến chủ đề định lượng quá, nhà em quả thực rất bất ngờ. Nhân dịp tranh thủ một lần hiếm hoi ngoi lên diễn đàn, cũng được cụ @Jewel Nguyen gửi gắm trách nhiệm, nhà em bèn viết tiếp một chủ đề liên quan trực tiếp đến mảng giao dịch thuật toán - giao dịch định lượng là backtesting. Bài viết này nằm trong chùm bài về giao dịch định lượng, các cụ có thể xem phần đầu tiên ở đây Quant là cái giống gì? | TraderViet. Tuy không liên quan logic đến nhau nhưng nếu đây là lần đầu các cụ đọc bài này thì có thể mở link để xem lại.

Backtesting là cái gì?

Back là về trước, testing là thử nghiệm. Backtesting là thử nghiệm về trước, tức là thử nghiệm chiến thuật giao dịch với dữ liệu thị trường có sẵn, tức nửa bên trái của biểu đồ giá, với mục đích là xem nó hoạt động thế nào trước khi mang ra đánh nhau với phần bên tay phải. Khỏi nhắc, trên diễn đàn này đã có quá nhiều bài viết liên quan đến cách backtesting dành cho các cụ giao dịch thủ công (discretionary trading), nhưng lại thiếu vắng những bài viết cho giao dịch thuật toán và giao dịch định lượng. Kỳ thực mà nói, về mặt ý nghĩa, backtest thủ công không khác nhiều so với backtest thuật toán, nhưng về phương pháp luận thì quả là một trời một vực.

zz7.png


Như các cụ cũng biết, mọi thể loại hệ thống giao dịch có lời đều phải dựa trên một hay một số loại nguyên tắc nhất định nào đó, không cần biết những hệ thống đó là tự động, bán tự động hay thủ công; định lượng hay định tính, phân tích kỹ thuật hay phân tích cơ bản. Và trên hết, tất cả chúng đều có chung một giả định tiền đề căn bản, kiểu như tiên đề Euclid trong hình học lớp 6. Giả định đó trong trading là việc chúng ta buộc phải coi những thứ xảy ra trong quá khứ có khả năng sẽ lặp lại đâu đó ở tương lai. Nếu không chấp nhận giả định này, chúng ta buộc phải coi thị trường là toàn phần ngẫu nhiên, toàn phần bất khả tri; và vì các tính chất tất định của phân phối xác suất, không một ai có khả năng sinh lời dài hạn trong một môi trường như vậy, không cần biết họ tài phép đến đâu. Đương nhiên điều này không đúng, nhưng thôi xin hay để những vấn đề hiện sinh qua một bên, một buổi nào đó rảnh rỗi nhà em xin viết một bài nói về giả định Bước đi Ngẫu nhiên (Random Walk) sau. Em nhắc lại, vì điều này quan trọng: Chúng ta buộc phải coi những thứ xảy ra trong quá khứ có khả năng lặp lại trong tương lai. Đây là tiền đề quan trọng nhất, đặt nền móng cho toàn bộ trường phái phân tích kỹ thuật, là lý do khiến backtesting đóng vai trò mấu chốt, và cũng là thứ khiến nhiều cụ hiểu sai và chết cháy nhất.

Backtest, vì đâu nên nỗi?

Như đã nói, backtesting đơn thuần là việc kiểm tra chiến thuật giao dịch với nửa bên tay trái của biểu đồ. Với những cụ giao dịch thủ công, ngoài việc kiểm tra xem chiến thuật của mình có thực sự ổn định và có khả năng sinh lời hay không, thì backtest còn là bãi thử đầu tiên để rèn giũa một tâm lý giao dịch vững vàng. Rất may là đám định lượng nhà em không cần quá quan tâm đến tâm lý giao dịch, nhưng không có nghĩa backtesting không quan trọng. Vấn đề là backtest như thế nào cho đúng, vì thử nghiệm thì có thể sai, và khi sai thì nó thường gây hậu quả rất nhanh, và nhiều trường hợp là rất lớn. Nhà em để ý một hiện tượng đáng buồn là nhiều cụ hoàn toàn mất niềm tin vào kết quả backtest, nhất là khi thấy kết quả backtest của một con EA nào đó đẹp mỹ mãn như Ngọc Trinh, rồi lại thất vọng khi biết chính con EA đó thật ra chỉ là hàng xóm của Ngọc Trinh khi đối mặt với thị trường thật.

Câu trả lời thành thật nhất mà nhà em có thể đưa ra là các cụ có thể đã backtest sai, hoặc đã hiểu sai vai trò của backtest, hoặc cả 2 điều trên.

Đối với một người giao dịch định lượng, backtest có 2 nhiệm vụ chính, một là kiểm tra tính sinh lời của hệ thống giao dịch một cách nhanh chóng và chính xác, hai là tạo ra các thống kê được chuẩn hóa cao độ, giúp phát triển và hoàn thiện hệ thống giao dịch và góp phần vào quá trình ra quyết định của nhà giao dịch. Trong khuôn khổ bài viết này, nhà em sẽ tập trung vào ý đầu tiên, đó là kiểm tra tính sinh lời (profitability) của hệ thống giao dịch một cách nhanh chóngchính xác.

1-traderviet.jpeg

Nhanh chóng thì dễ, chắc các cụ cũng mường tượng được ra việc ngồi test một chiến thuật trong 2 năm dữ liệu sẽ dễ hơn việc demo chính chiến thuật đó trong vòng 2 năm, chỉ để biết nó có sinh lời hay không. Chứ rủi mà demo 2 năm rồi mới biết mình đang giao dịch với một chiến thuật không sinh lời thì chắc các cụ cũng học giáo chủ @DuongHuy đẩy xe chuối chiên cho khỏe. Một người làm định lượng và một chiếc máy tính hiệu suất cao có khả năng tạo ra hàng trăm, thậm chí hàng ngàn chiến thuật giao dịch một ngày. Với chừng đó công việc mà chỉ có thể demo để biết được tính sinh lời của từng hệ thống một thì chắc chẳng có ai thèm định lượng gì cho mệt. Sức mạnh của backtest nằm ở chỗ đó. Nó có khả năng gói gọn các điều kiện thị trường trong lịch sử để tạo ra một môi trường giả lập dễ dàng để thử nghiệm chiến thuật giao dịch.

Nhưng nhanh thôi chưa đủ. Quan trọng là chính xác. Đây có lẽ là sai lầm nhiều cụ mắc phải nhất khi backtest: Môi trường backtest của các cụ khác biệt quá lớn so với thực tế. Một ví dụ tiêu biểu cho hiện tượng này là trình Strategy Tester trên MT4. Nó ưu tiên nạp data trong khung thời gian ngắn nhất (tức là tick data) trước, sau đó đến M1, M5, M15... đến tận data tháng. Nếu không đủ dữ liệu khung thời gian ngắn (ví dụ không đủ data M1), chương trình này sẽ tự động tạo ra data giả dựa trên format của cây nến khung cao hơn liền kề sau đó theo format Open - High - Low - Close và logic của sóng Elliott (nguồn Strategy Tester: Modes of Modeling during Testing - MQL4 Articles (mql5.com)). Điều này tạo ra sự thiếu nhất quán trong dữ liệu test và thực tế những gì đã xảy ra trong quá khứ. Nhiều người làm EA biết điều này, và họ viết những con robot lợi dụng lỗ hổng này của MT4 để tạo ra những đường cong lợi tức backtest lúc nào cũng dựng đứng như anh em lúc mới ngủ dậy hòng bán chác kiếm lời.

Hình minh họa: con EA Goldfinch của PointZero, data đểu
mt4-backtest-90-win.png


...đối chiếu với data xịn.
mt4-backtest-99-fail.png


Lưu ý các cụ đây chỉ là một ví dụ để chứng minh sự thiếu nhất quán trong backtest dễ dẫn đến sai lệch với thực tế đến nhường nào. Chất lượng data xứng đáng có một bài viết của riêng nó, thậm chí em sẽ phải đề cập đến các khâu rất "chuyên ngành" như data processing, data cleansing, spread filtering... Thực tế là có muôn vàn cách để khiến backtest không phản ánh kết quả trading, mà chất lượng data chỉ là một trong số chúng. Đến đây, chỉ mong các cụ nhớ cho em là kết quả backtest chỉ có ý nghĩa khi nó phản ánh hiện thực trading. Nếu không có khả năng tái tạo một môi trường trading sát thực thì việc backtest hoàn toàn không có ý nghĩa.

Đến đây chắc chắn sẽ có cụ phản bác, nói rằng việc backtest vốn không có ý nghĩa, vì chúng ta cùng lắm chỉ biết được hệ thống chạy ra sao trong quá khứ, chứ đâu biết tương lai nó ăn ở ra sao đâu. Nếu cụ nào chung tư tưởng, xin mời các cụ lật lên đoạn trên đọc lại phần nhiệm vụ của backtest. Thực tế là chúng ta sẽ không bao giờ biết được khi nào một giao dịch sẽ lỗ hay lãi cho đến khi chúng ta đóng lệnh, nhưng điều đó không có nghĩa chúng ta sẽ không biết một hệ thống sinh lời hay không. Công việc backtest theo nghĩa này đơn thuần là việc kiểm tra hệ thống xem nó vận hành ra sao khi đối mặt với các điều kiện thị trường (market regime) khác nhau, mà cách dễ nhất là kiểm tra với những điều kiện đã biết vì chúng ta kiểm soát được kết quả. Chúng ta không cần quan tâm xem hệ thống chạy như thế nào vào tháng 8 năm ngoái. Cái chúng ta thực sự muốn biết là tháng 8 năm ngoái có những điều kiện thị trường như thế nào và nó tác động đến hành vi của hệ thống giao dịch ra sao. Nếu đọc đến đây mà nhiều cụ vẫn còn phản bác, mời các cụ giở lên đầu bài đọc lại phần giả định.

(Còn tiếp)
Phần sau: Xác nhận kết quả backtest, tối ưu hóa và các ngộ nhận
 

Giới thiệu sách Trading hay
Thực Hành Phân tích Fibonacci

Tác giả sách là cựu trader quản lý quỹ kiêm học giả CMT. Sách đoạt giải và được xuất bản bởi Bloomberg Press. Sách khái quát từ cơ bản đến chuyên sâu về FIbonacci Trading
Chỉnh sửa lần cuối bởi người điều hành:
Bài viết rất hay, nhưng còn hay hơn nữa là bạn bổ xung thêm kinh nhiệm của bạn, ví dụ như khi nói đến DATA, thì bạn nói luôn là bạn dùng nguồn DATA ở đâu. Như vậy bài viết mới có tính ứng dụng cao
 
Bài viết rất hay, nhưng còn hay hơn nữa là bạn bổ xung thêm kinh nhiệm của bạn, ví dụ như khi nói đến DATA, thì bạn nói luôn là bạn dùng nguồn DATA ở đâu. Như vậy bài viết mới có tính ứng dụng cao
Em có nói trong bài rồi, data phải cần một bài riêng mới đủ. Nguồn thì dễ, có thể mua trên Tick data suite. Nói chung TDS là nguồn dữ liệu giá uy tín nhất cho retail trader tính đến thời điểm hiện tại rồi. Nhưng kể cả có dữ liệu trên TDS rồi vẫn không đủ và mình vẫn phải xử lý thêm, ví dụ như spread 10 năm trước cao hơn bây giờ, nên nếu lấy nguyên data đó áp vào thì mấy con EA scalping hỏng hết. Nói chung data là một câu chuyện rất dài và nếu cho cả vào đây thì em không biết bao giờ mới viết xong nữa :)))))
 
cụ nào từng có trải nghiệm thì xin nói cho ae biết data dỏm khác data xịn thế nào? Nó mất nến hay nến xuất hiện tầm bậy hay gì khác ?
 
Data dỏm có thể dẫn đến các hệ thống tự động repaint cho đẹp chỉ số đúng ko bác?
 

BÌNH LUẬN MỚI NHẤT

  • captainfx trong Chuyện bên lề 619 Xem / 1 Trả lời
  • DuongHuy trong Phân tích Forex - Vàng - Hàng hóa 145 Xem / 6 Trả lời
  • TraderLC trong Hội Trader giao dịch Quỹ 2,225 Xem / 32 Trả lời
  • Mạc An trong Phân tích Forex - Vàng - Hàng hóa 258 Xem / 12 Trả lời
  • AdBlock Detected

    We get it, advertisements are annoying!

    Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.

    Back
    Bên trên