Bài viết này tiếp tục loạt bài về giao dịch định lượng, bắt đầu với hướng dẫn người mới bắt đầu và xác định chiến lược. cả hai bài viết dài hơn, phức tạp hơn đều rất phổ biến vì vậy tôi sẽ tiếp tục theo hướng này và cung cấp chi tiết về chủ đề kiểm tra lại chiến lược.
Algorithmic backtesting đòi hỏi kiến thức về nhiều lĩnh vực, bao gồm tâm lý học, toán học, thống kê, phát triển phần mềm và cấu trúc vi mô thị trường / trao đổi. Tôi không thể hy vọng sẽ bao gồm tất cả các chủ đề đó trong một bài viết, vì vậy tôi sẽ chia chúng thành hai hoặc ba phần nhỏ hơn. Chúng ta sẽ thảo luận về điều gì trong phần này? Tôi sẽ bắt đầu bằng cách xác định backtesting và sau đó tôi sẽ mô tả những điều cơ bản về cách thực hiện nó. Sau đó tôi sẽ làm sáng tỏ về những thiên vị mà chúng tôi đã đề cập trong Hướng dẫn giao dịch định lượng cho người mới bắt đầu. Tiếp theo tôi sẽ trình bày một sự so sánh các tùy chọn phần mềm backtesting khác nhau có sẵn.
Trong các bài viết tiếp theo, chúng tôi sẽ xem xét các chi tiết về việc thực hiện chiến lược mà thường hầu như không được đề cập hoặc bỏ qua. Chúng tôi cũng sẽ xem xét làm thế nào để làm cho quá trình backtesting thực tế hơn bằng cách bao gồm các đặc điểm của một sàn giao dịch. Sau đó, chúng tôi sẽ thảo luận về chi phí giao dịch và cách mô hình hóa chúng một cách chính xác trong một thiết lập backtest. Chúng tôi sẽ kết thúc với một cuộc thảo luận về hiệu suất của các backtest của chúng tôi và cuối cùng cung cấp một ví dụ về một chiến lược lượng phổ biến, được gọi là giao dịch cặp đảo ngược trung bình.
Chúng ta hãy bắt đầu bằng cách thảo luận về backtesting là gì và tại sao chúng ta nên thực hiện nó trong giao dịch thuật toán của chúng ta.
Giao dịch thuật toán khác với các loại loại đầu tư khác bởi vì chúng ta có thể cung cấp kỳ vọng về hiệu suất trong tương lai đáng tin cậy hơn từ hiệu suất trong quá khứ, do sự sẵn có dữ liệu phong phú.
Nói một cách đơn giản, backtesting được thực hiện bằng cách tiếp xúc thuật toán chiến lược cụ thể của bạn với một luồng dữ liệu tài chính lịch sử, dẫn đến một tập hợp các tín hiệu giao dịch. Mỗi giao dịch (mà chúng tôi sẽ có nghĩa ở đây là một chuyến đi vòng quanh của hai tín hiệu) sẽ có lợi nhuận hoặc lỗ liên quan. Sự tích lũy lợi nhuận / lỗ này trong thời gian của backtest chiến lược của bạn sẽ dẫn đến tổng lợi nhuận và lỗ (còn được gọi là
Những lý do chính để kiểm tra lại một chiến lược thuật toán là gì?
Việc kiểm tra lại cung cấp một loạt các lợi thế cho giao dịch thuật toán. Tuy nhiên, không phải lúc nào cũng có thể kiểm tra lại một chiến lược một cách trực tiếp. Nói chung, khi tần suất của chiến lược tăng lên, nó trở nên khó khăn hơn để mô hình chính xác các hiệu ứng cấu trúc vi mô của thị trường và sàn giao dịch. Điều này dẫn đến kiểm tra lại ít đáng tin cậy hơn và do đó đánh giá phức tạp hơn về một chiến lược đã chọn. Đây là một vấn đề đặc biệt nơi hệ thống thực thi là chìa khóa cho hiệu suất chiến lược, như với các thuật toán tần số cực cao.
Thật không may, việc kiểm tra hậu quả rất có nhiều loại thiên vị. Chúng ta đã đề cập đến một số vấn đề này trong các bài trước, nhưng bây giờ chúng ta sẽ thảo luận sâu sắc về chúng.
Có rất nhiều thiên vị có thể ảnh hưởng đến hiệu suất của một chiến lược được kiểm tra lại. Thật không may, những thiên vị này có xu hướng làm tăng hiệu suất hơn là làm giảm nó. Do đó, bạn nên luôn xem xét một kiểm tra lại là một giới hạn trên lý tưởng về hiệu suất thực tế của chiến lược.
Có bốn khuynh hướng chính mà tôi muốn thảo luận: khuynh hướng tối ưu hóa, khuynh hướng nhìn về phía trước, khuynh hướng sống sót và khuynh hướng dung nạp tâm lý.
Đây có lẽ là sự thiên vị gian lận nhất trong tất cả các khuynh hướng backtest. Nó liên quan đến việc điều chỉnh hoặc giới thiệu các tham số giao dịch bổ sung cho đến khi hiệu suất chiến lược trên bộ dữ liệu backtest rất hấp dẫn. Tuy nhiên, một khi hoạt động, hiệu suất của chiến lược có thể khác biệt rõ rệt.
Biến hướng tối ưu hóa rất khó loại bỏ vì các chiến lược thuật toán thường liên quan đến nhiều tham số.
Một phương pháp để giúp giảm thiểu sự thiên vị này là thực hiện phân tích độ nhạy. Điều này có nghĩa là thay đổi các tham số từng bước và vẽ ra một bề mặt hiệu suất. Lý luận cơ bản, hợp lý cho các lựa chọn tham số, với tất cả các yếu tố khác được xem xét, nên dẫn đến bề mặt tham số mịn hơn. Nếu bạn có bề mặt hiệu suất rất vội vã, nó thường có nghĩa là một tham số không phản ánh một hiện tượng và là một hiện vật của dữ liệu thử nghiệm. Có một tài liệu rộng lớn về thuật toán tối ưu hóa đa chiều và đó là một lĩnh vực nghiên cứu rất tích cực. Tôi sẽ không dừng lại ở đây, nhưng hãy giữ nó ở phía sau tâm trí của bạn khi bạn tìm thấy một chiến lược với một backtest tuyệt vời!
Look-ahead bias được đưa vào một hệ thống backtesting khi dữ liệu trong tương lai vô tình được đưa vào một điểm trong mô phỏng mà dữ liệu đó không thực sự có sẵn. Nếu chúng ta chạy backtest theo thời gian và chúng ta đạt đến thời điểm N, thì sự thiên vị nhìn về phía trước xảy ra nếu dữ liệu được đưa vào bất kỳ điểm N + k nào, nơi k>0.
Như với sự thiên vị tối ưu hóa, người ta phải cực kỳ cẩn thận để tránh việc giới thiệu nó.
Sự thiên vị sinh tồn là một hiện tượng đặc biệt nguy hiểm và có thể dẫn đến hiệu suất tăng đáng kể cho một số loại chiến lược nhất định. Nó xảy ra khi các chiến lược được thử nghiệm trên các bộ dữ liệu không bao gồm toàn bộ vũ trụ các tài sản trước đó có thể đã được chọn tại một thời điểm cụ thể, nhưng chỉ xem xét những gì đã tồn tại cho đến thời điểm hiện tại.
Ví dụ, hãy xem xét thử nghiệm một chiến lược trên một lựa chọn ngẫu nhiên của cổ phiếu trước và sau vụ sụp đổ thị trường năm 2001. Một số cổ phiếu công nghệ đã phá sản, trong khi những cổ phiếu khác đã quản lý để duy trì nổi và thậm chí thịnh vượng. Nếu chúng ta hạn chế chiến lược này chỉ cho các cổ phiếu đã vượt qua giai đoạn giảm thị trường, chúng ta sẽ giới thiệu một thiên vị sống sót vì chúng đã chứng minh thành công của chúng tôi. Trên thực tế, đây chỉ là một trường hợp cụ thể khác của thiên vị nhìn về phía trước, vì thông tin trong tương lai đang được kết hợp vào phân tích quá khứ.
Có hai cách chính để giảm thiểu sự thiên vị sống sót trong các bài kiểm tra chiến lược của bạn:
Bây giờ chúng ta sẽ xem xét một số hiện tượng tâm lý có thể ảnh hưởng đến hiệu suất giao dịch của bạn.
Hiện tượng đặc biệt này không thường được thảo luận trong bối cảnh giao dịch định lượng. Tuy nhiên, nó được thảo luận rộng rãi liên quan đến các phương pháp giao dịch tùy ý hơn. Nó có nhiều tên khác nhau, nhưng tôi đã quyết định gọi nó là "sự thiên vị dung nạp tâm lý" bởi vì nó nắm bắt bản chất của vấn đề. Khi tạo ra các bài kiểm tra ngược trong một khoảng thời gian 5 năm hoặc hơn, thật dễ dàng để nhìn vào đường cong cổ phiếu xu hướng tăng, tính toán lợi nhuận hàng năm, tỷ lệ Sharpe và thậm chí các đặc điểm rút vốn và hài lòng với kết quả. Ví dụ, chiến lược có thể có mức rút vốn tương đối tối đa là 25% và thời gian rút vốn tối đa là 4 tháng. Điều này sẽ không phải là không điển hình đối với một chiến lược động lực. Tuy nhiên, thật đơn giản để thuyết phục bản thân rằng dễ dàng dung nạp lỗ trong những khoảng thời gian như vậy bởi vì bức tranh tổng thể rất nồng nhiệt.
Nếu các lần rút tiền lịch sử 25% hoặc nhiều hơn xảy ra trong các thử nghiệm ngược, thì rất có thể bạn sẽ thấy các giai đoạn rút tiền tương tự trong giao dịch trực tiếp. Những giai đoạn rút tiền này khó chịu về mặt tâm lý. Tôi đã quan sát trực tiếp việc rút tiền kéo dài có thể như thế nào, trong một môi trường thể chế, và nó không dễ chịu - ngay cả khi các thử nghiệm ngược gợi ý rằng những giai đoạn như vậy sẽ xảy ra. Lý do tôi gọi nó là thiên vị là vì thường một chiến lược sẽ thành công được dừng giao dịch trong thời gian rút tiền kéo dài và do đó sẽ dẫn đến hiệu suất thấp hơn so với thử nghiệm ngược. Do đó, mặc dù chiến lược có bản chất thuật toán, các yếu tố tâm lý vẫn có thể có ảnh hưởng lớn đến lợi nhuận.
Các giải pháp bao gồm từ phần mềm phức tạp cấp tổ chức tích hợp đầy đủ đến các ngôn ngữ lập trình như C ++, Python và R, nơi hầu hết mọi thứ phải được viết từ đầu (hoặc có được các plugin phù hợp). Là các nhà giao dịch lượng, chúng tôi quan tâm đến sự cân bằng của việc có thể sở hữu đống công nghệ giao dịch của chúng tôi so với tốc độ và độ tin cậy của phương pháp phát triển của chúng tôi. Dưới đây là những cân nhắc quan trọng cho lựa chọn phần mềm:
Bây giờ chúng ta đã liệt kê các tiêu chí mà chúng ta cần để chọn cơ sở hạ tầng phần mềm của chúng tôi, tôi muốn chạy qua một số các gói phổ biến hơn và cách họ so sánh:
Lưu ý: Tôi sẽ chỉ bao gồm phần mềm có sẵn cho hầu hết các chuyên gia bán lẻ và các nhà phát triển phần mềm, vì đây là độc giả của trang web.
So sánh phần mềm kiểm tra lại
Mô tả: WYSIWYG (what-you-see-is-what-you-get) phần mềm bảng tính. Rất phổ biến trong ngành tài chính. Dữ liệu và thuật toán được kết hợp chặt chẽ.
Thực hiện: Có, Excel có thể được gắn vào hầu hết các công ty môi giới.
Tùy chỉnh: VBA macro cho phép chức năng tiên tiến hơn với chi phí ẩn thực hiện.
Sự phức tạp của chiến lược: Các công cụ thống kê tiên tiến hơn khó thực hiện hơn như các chiến lược với hàng trăm tài sản.
Giảm thiểu thiên vị: thiên vị nhìn về phía trước dễ dàng phát hiện thông qua chức năng làm nổi bật ô (giả sử không có VBA).
Tốc độ phát triển: Nhanh chóng thực hiện các chiến lược cơ bản.
Tốc độ thực thi: Tốc độ thực thi chậm - chỉ phù hợp với các chiến lược tần số thấp hơn.
Chi phí: Giá rẻ hoặc miễn phí (tùy thuộc vào giấy phép).
Thay thế: OpenOffice
Mô tả: Môi trường lập trình ban đầu được thiết kế cho toán học tính toán, vật lý và kỹ thuật. Rất phù hợp với các hoạt động vectorized và những hoạt động liên quan đến đại số tuyến tính số. Cung cấp một loạt các plugin cho giao dịch lượng. Được sử dụng rộng rãi trong các quỹ phòng hộ định lượng.
Thực thi: Không có khả năng thực thi gốc, MATLAB yêu cầu một hệ thống thực thi riêng biệt.
Tùy chỉnh: Một loạt các plugin cộng đồng lớn cho hầu hết các lĩnh vực toán học tính toán.
Chiến lược phức tạp: Nhiều phương pháp thống kê tiên tiến đã có sẵn và được thử nghiệm tốt.
Giảm thiểu thiên vị: Khó khăn hơn để phát hiện thiên vị nhìn về phía trước, đòi hỏi kiểm tra rộng rãi.
Tốc độ phát triển: Các kịch bản ngắn có thể dễ dàng tạo ra các backtest phức tạp.
Tốc độ thực thi: Giả sử một thuật toán vectorized / song song, MATLAB được tối ưu hóa cao. kém cho các vòng lặp lặp truyền thống.
Chi phí: ~ 1.000 USD cho giấy phép.
Thay thế: Octave, SciLab
Mô tả: Ngôn ngữ cấp cao được thiết kế cho tốc độ phát triển. Một loạt các thư viện cho hầu hết mọi nhiệm vụ lập trình có thể tưởng tượng được. Được chấp nhận rộng rãi hơn trong cộng đồng quỹ phòng hộ và ngân hàng đầu tư. Không nhanh như C / C ++ cho tốc độ thực thi.
Thực thi: Các plugin Python tồn tại cho các nhà môi giới lớn hơn, chẳng hạn như Interactive Brokers. Do đó, hệ thống backtest và thực thi đều có thể là một phần của cùng một
Tùy chỉnh: Python có một cộng đồng phát triển rất khỏe mạnh và là một ngôn ngữ trưởng thành. NumPy / SciPy cung cấp các công cụ tính toán khoa học và phân tích thống kê nhanh có liên quan đến giao dịch lượng tử.
Sự phức tạp của chiến lược: Nhiều plugin tồn tại cho các thuật toán chính, nhưng không có một cộng đồng lượng lớn như tồn tại cho MATLAB.
Bias Minimisation: Các vấn đề giảm thiểu thiên vị tương tự tồn tại như với bất kỳ ngôn ngữ cấp cao nào. Cần phải cực kỳ cẩn thận về kiểm tra.
Tốc độ phát triển: Ưu điểm chính của Python là tốc độ phát triển, với khả năng thử nghiệm mạnh mẽ.
Tốc độ thực thi: Không nhanh như C ++, nhưng các thành phần máy tính khoa học được tối ưu hóa và Python có thể nói chuyện với mã C gốc với một số plugin nhất định.
Chi phí: Miễn phí / Mã nguồn mở
Ngoài ra: Ruby, Erlang, Haskell
Mô tả: Môi trường được thiết kế cho các phương pháp thống kê tiên tiến và phân tích chuỗi thời gian. Một loạt các bộ công cụ thống kê, kinh tế học và đồ thị bản địa. Cộng đồng nhà phát triển lớn.
Thực thi: R có các plugin cho một số nhà môi giới, đặc biệt là Interactive Brokers.
Tùy chỉnh: R có thể được tùy chỉnh với bất kỳ gói nào, nhưng điểm mạnh của nó nằm trong lĩnh vực thống kê / kinh tế học.
Sự phức tạp của chiến lược: Hầu hết hữu ích nếu thực hiện các chiến lược kinh tế học, thống kê hoặc máy học do các plugin có sẵn.
Giảm thiểu thiên vị: Mức độ khả năng thiên vị tương tự cho bất kỳ ngôn ngữ cấp cao nào như Python hoặc C ++. Do đó, phải thử nghiệm.
Tốc độ phát triển: R nhanh để viết các chiến lược dựa trên các phương pháp thống kê.
Tốc độ thực thi: R chậm hơn C ++, nhưng vẫn tương đối tối ưu cho các hoạt động vectorized (như với MATLAB).
Chi phí: Miễn phí / Mã nguồn mở
Các lựa chọn thay thế: SPSS, Stata
Mô tả: Ngôn ngữ cấp cao, trưởng thành được thiết kế cho tốc độ thực thi. Một loạt các tài chính định lượng và thư viện số. Khó hơn để gỡ lỗi và thường mất nhiều thời gian hơn để thực hiện hơn Python hoặc MATLAB. Rất phổ biến ở cả bên mua và bán.
Thực thi: Hầu hết các API môi giới được viết bằng C ++ và Java.
Tùy chỉnh: C / C ++ cho phép truy cập trực tiếp vào bộ nhớ cơ bản, do đó các chiến lược tần số cực cao có thể được thực hiện.
Sự phức tạp của chiến lược: C ++ STL cung cấp một loạt các thuật toán tối ưu hóa.
Bias Minimisation: Look-ahead bias có thể khó loại bỏ, nhưng không khó hơn các ngôn ngữ cấp cao khác.
Tốc độ phát triển: C ++ khá nhiều từ so với Python hoặc MATLAB cho cùng một thuật toán.
Tốc độ thực thi: C / C ++ có tốc độ thực thi cực kỳ nhanh và có thể được tối ưu hóa tốt cho các kiến trúc tính toán cụ thể.
Chi phí: Các trình biên dịch khác nhau: Linux / GCC miễn phí, MS Visual Studio có các giấy phép khác nhau.
Thay thế: C#, Java, Scala
Các chiến lược khác nhau sẽ yêu cầu các gói phần mềm khác nhau. Các chiến lược HFT và UHFT sẽ được viết bằng C / C ++ (ngày nay chúng thường được thực hiện trên GPU và FPGA), trong khi các chiến lược cổ phần theo chiều tần số thấp dễ dàng thực hiện trong TradeStation, do bản chất của phần mềm / môi giới.
Tôi thích Python vì nó cung cấp mức độ tùy chỉnh, tốc độ phát triển, khả năng thử nghiệm và tốc độ thực thi phù hợp với nhu cầu và chiến lược của tôi. Nếu tôi cần bất cứ điều gì nhanh hơn, tôi có thể
Trong một vài bài viết tiếp theo về backtesting chúng tôi sẽ xem xét một số vấn đề cụ thể xung quanh việc thực hiện một hệ thống backtesting giao dịch thuật toán, cũng như cách kết hợp các hiệu ứng của sàn giao dịch.