Kiểm tra thành công các chiến lược giao dịch thuật toán - Phần I

Tác giả:Tốt, Tạo: 2019-03-20 17:00:16, Cập nhật:

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.

Backtesting là gì?

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à P&L hoặc PnL). Đó là bản chất của ý tưởng, mặc dù tất nhiên quỷ luôn luôn nằm trong chi tiết!

Những lý do chính để kiểm tra lại một chiến lược thuật toán là gì?

  • Phân tích - Nếu bạn nhớ từ bài viết về Xác định chiến lược, mục tiêu của chúng tôi trong giai đoạn nghiên cứu ban đầu là thiết lập một đường ống chiến lược và sau đó lọc ra bất kỳ chiến lược nào không đáp ứng các tiêu chí nhất định.
  • Mô hình hóa - Backtesting cho phép chúng tôi thử nghiệm (an toàn!) các mô hình mới của một số hiện tượng thị trường nhất định, chẳng hạn như chi phí giao dịch, định tuyến đơn đặt hàng, độ trễ, thanh khoản hoặc các vấn đề cấu trúc vi mô thị trường khác.
  • Tối ưu hóa - Mặc dù tối ưu hóa chiến lược có nhiều khuynh hướng, kiểm tra ngược cho phép chúng ta tăng hiệu suất của một chiến lược bằng cách sửa đổi số lượng hoặc giá trị của các tham số liên quan đến chiến lược đó và tính toán lại hiệu suất của nó.
  • Xác minh - Các chiến lược của chúng tôi thường được lấy từ bên ngoài, thông qua đường ống dẫn chiến lược của chúng tôi. Kiểm tra lại một chiến lược đảm bảo rằng nó không được thực hiện sai. Mặc dù chúng tôi hiếm khi có quyền truy cập vào các tín hiệu được tạo ra bởi các chiến lược bên ngoài, nhưng chúng tôi thường có quyền truy cập vào các chỉ số hiệu suất như tỷ lệ Sharpe và đặc điểm rút tiền. Do đó chúng tôi có thể so sánh chúng với việc thực hiện của riêng mình.

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.

Sự thiên vị ảnh hưởng đến chiến lược

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ý.

Biến hướng tối ưu hóa

Đâ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ố. Các tham số trong trường hợp này có thể là các tiêu chí nhập / xuất, thời gian xem lại, thời gian trung bình (tức là tham số làm mịn trung bình động) hoặc tần suất đo biến động. Biến hướng tối ưu hóa có thể được giảm thiểu bằng cách giữ số lượng tham số ở mức tối thiểu và tăng số lượng điểm dữ liệu trong tập tập huấn. Trên thực tế, người ta cũng phải cẩn thận với các điểm đào tạo cũ hơn có thể phải tuân thủ chế độ trước đó (như môi trường quy định) và do đó có thể không liên quan đến chiến lược hiện tại của bạn.

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!

Sự thiên vị về tương lai

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.

  • Technical Bugs - Arrays/vectors in code often have iterators or index variables. Sự thay đổi không chính xác của các chỉ số này có thể dẫn đến sự thiên vị nhìn về phía trước bằng cách kết hợp dữ liệu ở N + k cho k không bằng không.
  • Tính toán tham số - Một ví dụ phổ biến khác về thiên vị nhìn về phía trước xảy ra khi tính toán các tham số chiến lược tối ưu, chẳng hạn như với sự hồi quy tuyến tính giữa hai chuỗi thời gian. Nếu toàn bộ bộ dữ liệu (bao gồm dữ liệu trong tương lai) được sử dụng để tính toán hệ số hồi quy, và do đó được áp dụng ngược lại vào chiến lược giao dịch cho mục đích tối ưu hóa, thì dữ liệu trong tương lai đang được kết hợp và một thiên vị nhìn về phía trước tồn tại.
  • Tối đa/tối thiểu - Một số chiến lược giao dịch sử dụng các giá trị cực trong bất kỳ khoảng thời gian nào, chẳng hạn như kết hợp giá cao hoặc thấp trong dữ liệu OHLC. Tuy nhiên, vì các giá trị tối đa/tối thiểu này chỉ có thể được tính toán vào cuối một khoảng thời gian, một sự thiên vị nhìn về phía trước được giới thiệu nếu các giá trị này được sử dụng trong thời gian hiện tại.

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ị về sự sống sót

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:

  • Các bộ dữ liệu không có thiên vị tồn tại - Trong trường hợp dữ liệu cổ phiếu, có thể mua các bộ dữ liệu bao gồm các thực thể bị loại khỏi danh sách, mặc dù chúng không rẻ và chỉ có xu hướng được sử dụng bởi các công ty tổ chức.
  • Sử dụng dữ liệu gần đây hơn - Trong trường hợp chứng khoán, sử dụng một bộ dữ liệu gần đây hơn làm giảm khả năng lựa chọn cổ phiếu được cân nhắc đến "người sống sót", đơn giản vì có ít khả năng loại bỏ tổng thể cổ phiếu trong thời gian ngắn hơn. Người ta cũng có thể bắt đầu xây dựng một bộ dữ liệu không có thiên vị sống sót cá nhân bằng cách thu thập dữ liệu từ thời điểm hiện tại trở đi. Sau 3-4 năm, bạn sẽ có một bộ dữ liệu cổ phiếu không có thiên vị sống sót vững chắc để kiểm tra lại các chiến lược tiếp theo.

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.

Sự thiên vị về dung nạp tâm lý

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 gói phần mềm để kiểm tra lại

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:

  • Kỹ năng lập trình - Sự lựa chọn môi trường phần lớn sẽ phụ thuộc vào khả năng lập trình phần mềm của bạn. Tôi cho rằng việc kiểm soát toàn bộ ngăn xếp sẽ có tác động lớn hơn đến lợi nhuận và lợi nhuận dài hạn của bạn hơn là thuê ngoài càng nhiều càng tốt cho phần mềm của nhà cung cấp. Điều này là do rủi ro nhược điểm của việc có lỗi bên ngoài hoặc đặc tính mà bạn không thể sửa chữa trong phần mềm của nhà cung cấp, mà nếu không bạn sẽ dễ dàng khắc phục nếu bạn có nhiều quyền kiểm soát hơn trên ngăn xếp công nghệ của mình. Bạn cũng muốn một môi trường đạt được sự cân bằng giữa năng suất, khả năng sẵn có thư viện và tốc độ thực thi. Tôi đưa ra lời khuyên cá nhân của riêng tôi dưới đây.
  • Khả năng thực hiện / tương tác môi giới - Một số phần mềm backtesting, chẳng hạn như Tradestation, liên kết trực tiếp với một công ty môi giới. Tôi không phải là một fan hâm mộ của phương pháp này vì giảm chi phí giao dịch thường là một thành phần lớn để có tỷ lệ Sharpe cao hơn.
  • Tùy chỉnh - Một môi trường như MATLAB hoặc Python cung cấp cho bạn rất nhiều tính linh hoạt khi tạo các chiến lược algo vì chúng cung cấp các thư viện tuyệt vời cho hầu hết các hoạt động toán học có thể tưởng tượng được, nhưng cũng cho phép tùy chỉnh rộng rãi khi cần thiết.
  • Sự phức tạp của chiến lược - Một số phần mềm không phù hợp với việc xử lý số lượng lớn hoặc phức tạp toán học. Excel là một phần mềm như vậy. Mặc dù nó tốt cho các chiến lược đơn giản hơn, nhưng nó không thể thực sự đối phó với nhiều tài sản hoặc các thuật toán phức tạp hơn, với tốc độ.
  • Tối thiểu hóa thiên vị - Một phần mềm hoặc dữ liệu cụ thể có dễ bị thiên vị giao dịch hơn không?
  • Tốc độ phát triển - Bạn không nên mất nhiều tháng để thực hiện một công cụ backtest. Xây dựng nguyên mẫu chỉ cần vài tuần. Hãy chắc chắn rằng phần mềm của bạn không cản trở sự tiến bộ của bạn ở một mức độ lớn, chỉ để lấy thêm một vài điểm phần trăm về tốc độ thực thi. C ++ là "con voi trong phòng" ở đây!
  • Tốc độ thực thi - Nếu chiến lược của bạn hoàn toàn phụ thuộc vào thời gian thực thi (như trong HFT / UHFT) thì một ngôn ngữ như C hoặc C ++ sẽ cần thiết. Tuy nhiên, bạn sẽ giới hạn tối ưu hóa lõi Linux và sử dụng FPGA cho các miền này, nằm ngoài phạm vi của bài viết này!
  • Chi phí - Nhiều môi trường phần mềm mà bạn có thể lập trình các chiến lược giao dịch thuật toán hoàn toàn miễn phí và nguồn mở. Trên thực tế, nhiều quỹ phòng hộ sử dụng phần mềm nguồn mở cho toàn bộ các ngăn xếp giao dịch algo của họ. Ngoài ra, Excel và MATLAB đều tương đối rẻ và thậm chí còn có các lựa chọn thay thế miễn phí cho mỗi loại.

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

MS Excel

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

MATLAB

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

Python

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 tech stack.

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

R

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

C++

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ể drop in vào C++ trực tiếp từ các chương trình Python của mình. Một phương pháp được nhiều nhà giao dịch số lượng ưa thích là tạo nguyên mẫu các chiến lược của họ trong Python và sau đó chuyển đổi các phần thực thi chậm hơn sang C++ một cách lặp lại. Cuối cùng toàn bộ algo được viết bằng C++ và có thể để lại một mình để giao dịch!

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.


Thêm nữa