Điều gì là quan trọng nhất khi backtest chiến lược giao dịch? tốc độ? các chỉ số hiệu suất?
Câu trả lời là chính xác! Mục đích của backtest là để xác minh logic và khả thi của chiến lược. Đây cũng là ý nghĩa của backtest chính nó, những người khác là thứ cấp. Một kết quả backtest thực sự phản ánh dữ liệu lịch sử của chiến lược có giá trị tham chiếu. Những đường cong backtest dường như hoàn hảo có thể kể một câu chuyện đẹp, nhưng không thể được thực hiện trong môi trường thị trường thực tế.
Làm thế nào để đạt được backtesting chính xác là một vấn đề mà nhiều nhà giao dịch định lượng quan tâm. Điều đầu tiên chúng ta cần phải tìm ra là những gì dữ liệu trong giao dịch, bởi vì chất lượng của dữ liệu đã quyết định phần lớn chất lượng của backtest.
Đối với các loại dữ liệu này, hầu hết mọi người có thể nghĩ về giá mở cửa, giá cao nhất, giá thấp nhất, giá đóng cửa và khối lượng giao dịch trên biểu đồ đường K. Để phân biệt tốt hơn, chúng tôi gọi dữ liệu này chung là dữ liệu Bar, mà bạn có thể hiểu nó là đường K. Nhưng bạn đã bao giờ nghĩ về dữ liệu đến từ đâu và nguồn dữ liệu này ở đâu?
Trong thực tế, dữ liệu từ trao đổi gửi lại không chứa các dữ liệu Bar này, chỉ có dữ liệu Tick. Vậy dữ liệu Tick là gì? Bạn có thể hình dung dữ liệu trong trao đổi như một dòng sông. dòng sông này chứa dữ liệu chi tiết cho mỗi lệnh. Dữ liệu Tick là một lát trong luồng dữ liệu. Tần số là 2 lát mỗi giây. nó là một sự tái tạo của một tình huống thị trường nhất định.
Sau đó, dữ liệu Bar dựa trên dữ liệu Tick và được chia theo thời gian. Dữ liệu Bar 1 phút được tạo thành từ dữ liệu Tick trong vòng 1 phút, dữ liệu Bar 5 phút được tạo thành từ dữ liệu Tick trong vòng 5 phút, v.v. Nó tạo thành nhiều biểu đồ phút, biểu đồ hàng giờ, biểu đồ hàng ngày v.v. Dòng K một phút chỉ có một dữ liệu Bar, nhưng có thể chứa 120 dữ liệu Tick. Do đó, dữ liệu lịch sử backtest có thể được chia thành: Dữ liệu Bar và dữ liệu Tick, và số lượng dữ liệu trong dữ liệu Tick lớn hơn nhiều so với số lượng dữ liệu Bar trong cùng chu kỳ.
Hầu hết các phần mềm giao dịch định lượng trên thị trường đều hỗ trợ kiểm tra lại dữ liệu Bar. Bởi vì số lượng dữ liệu nhỏ, khối lượng công việc của công cụ kiểm tra lại rất đơn giản. Do đó, kiểm tra lại này thường rất nhanh, và dữ liệu mười năm có thể được kiểm tra lại trong vòng vài giây. Ngay cả khi kiểm tra lại hàng chục loại tương lai cùng một lúc sẽ không vượt quá một phút. Nhưng kiểm tra lại dữ liệu Bar có rất nhiều vấn đề:
Hầu hết các nhà giao dịch đều biết rằng việc mua hoặc bán trên giá giới hạn hàng ngày là khó khăn, nhưng nó có thể được giao dịch trong môi trường backtest.
Khi giá đột nhiên nhảy từ giới hạn thấp nhất đến giới hạn giá cao nhất hoặc xuất hiện một khoảng cách giá, nó được hiển thị dưới dạng một đường K dương tính lớn trên biểu đồ đường K chu kỳ lớn, nhưng không có giao dịch nào được thực hiện trong toàn bộ thời gian.
Ví dụ: đường K hiện tại đã lơ lửng xung quanh giá 5000, và nó đột nhiên tăng lên 5100 gần khi thị trường đóng cửa, và hầu như không có lệnh chờ và giao dịch ở giữa.
Tôi tin rằng nhiều nhà giao dịch định lượng đã gặp những hố như vậy, và hầu hết các đường cong backtest góc 45 độ là từ đây. Để giúp mọi người hiểu rõ hơn, hãy để tôi đưa ra một ví dụ khác: Chúng ta biết rằng một đường K có 4 giá. Nếu đó là một đường k dương 1 phút, thì sự hình thành của đường K này nên là: giá mở >>> giá thấp nhất >>>> giá cao nhất >>> giá đóng.
Tuy nhiên, đường k chu kỳ lớn sẽ không đơn giản như vậy. Nó có thể đạt đến một mức cao mới, sau đó là một mức thấp mới, và sau đó đóng; nó cũng có thể đạt đến một mức thấp mới, sau đó là một mức cao mới, và sau đó đóng; hoặc thậm chí sau một vòng xoay vòng, nó đạt đến một mức thấp mới, và sau đó là mức cao mới, và sau đó là mức thấp mới, và sau đó đóng; nhưng nó chỉ xuất hiện như một đường K với bóng phía trên và phía dưới, có nhiều khả năng ở giữa cách nó được hình thành.
Nếu một đường K xuất hiện như thế này: giá mở 4950, giá thấp nhất 4900, giá cao nhất 5100, giá đóng 5050, một đường K dương bình thường. Chiến lược của bạn là: Nếu giá mới nhất vượt quá giá cao nhất trước đó 5000, mua dài, và thiết lập lệnh dừng lỗ 1% sau khi mở vị trí, nghĩa là khi giá giảm xuống dưới 4950, nó sẽ thực hiện lệnh dừng lỗ.
Được rồi, bắt đầu thử nghiệm:
Opening price 4950
The price exceeds the previous high 5000
Opening long position
Earned 1% when the market closed
nhưng tình hình thực sự có thể như thế này:
Opening price 4950
The price exceeds the previous high 5000
Opening long position
Soon the price begins to fall
Continue to fall to 4949
Stop loss signal triggers stop loss 1%
Price rises to 5100
Market close at 5050
Như bạn có thể thấy, ví dụ trên, cùng một chiến lược, cùng một dữ liệu, có hai kết quả rất khác nhau. Lý do vẫn là do sự khác biệt trong dữ liệu. Trong Bar level backtest, nếu bạn sử dụng backtest hàng ngày K-line, bạn sẽ không biết cách các đường K này được hình thành. Nếu bạn sử dụng backtest K-line hàng giờ, bạn sẽ không biết những đường k hàng giờ này được hình thành. Nói tóm lại, Bar data test là yếu!
Nếu bạn có thể sử dụng dữ liệu Tick để kiểm tra và phân tích, không có nghi ngờ rằng nó có những lợi thế lớn. Tuy nhiên, dường như không có nền tảng giao dịch định lượng nào cho kiểm tra và phân tích dữ liệu Tick trên thị trường. Ví dụ, MT4 sử dụng dữ liệu mô phỏng can thiệp. Điều này chỉ mô phỏng những thay đổi trong dữ liệu, không phải dữ liệu Tick thực sự.
Tất nhiên, có các phần mềm tuyên bố có thể làm backtesting cấp Tick. nhưng các phần mềm này đã phạm sai lầm nghiêm trọng khi thiết kế công cụ backtesting, đó là:
Hãy lưu ý rằng trong môi trường giao dịch thực tế, các lệnh chúng tôi đặt được khớp trong luồng dữ liệu Tick của sàn giao dịch. Các quy tắc khớp của sàn giao dịch là: ưu tiên giá, ưu tiên thời gian. Nếu chiều sâu lệnh không quá dày vào thời điểm này, lệnh mua giá 5000 mà chúng tôi đã gửi có thể được giao dịch thụ động.
Do đó, nền tảng FMZ Quant (fmz.com) Tick-level backtesting engine được tạo ra, công cụ backtesting này không chỉ phù hợp với các đơn đặt hàng dựa trên ưu tiên giá của dữ liệu Tick. Theo cùng một ưu tiên giá, số lượng các đơn đặt hàng đang chờ được tính toán để xác định xem đơn đặt hàng đang chờ hiện tại đã đạt đến điều kiện giao dịch thụ động, để đạt được một môi trường mô phỏng thực sự.
Tick đầu tiên là: Bán: 101 Tập: 80 Mua: 100 Volume: 30
Tick thứ hai là: Bán: 101 Số: 60 Mua: 100 khối lượng: 50
Tick thứ ba là: Bán: 101 Tập: 80 Mua: 100 Volume: 30
Đánh dấu thứ 4 là: Bán: 101 Tập: 80 Mua: 100 Volume: 10
Đối với Tick đầu tiên, giá mua là 100, số lượng lệnh đang chờ là 30 lô; tại thời điểm này, tín hiệu mua đến, mua 20 lô với giá 100; Tick thứ hai được tạo ra, giá mua là 100, và số lượng lệnh đang chờ là 50. có 20 lô lệnh đang chờ; Tick thứ ba được sản xuất, giá mua là 100, và số lượng lệnh đang chờ là 30 lô. Điều này chứng minh rằng 20 lô đã được thực hiện hoặc hủy bỏ, và chúng tôi đang đóng giao dịch; Tick thứ tư đã được sản xuất, giá mua là 100, và số lượng lệnh đang chờ là 10 lô. Đó là một người bán lớn, và tất cả các lệnh mua của chúng tôi được thực hiện cùng một lúc.
Thông qua ví dụ trên, chúng ta có thể thấy rằng trong dữ liệu Tick, với tiền đề là giá không thay đổi, có thể tính toán liệu có một giao dịch thụ động của lệnh đang chờ thông qua sự thay đổi số tiền của lệnh đang chờ. Sử dụng cùng một giá, cách tiếp cận thời gian đầu tiên.
Trên nền tảng FMZ Quant, kiểm tra ngược cấp Bar và Tick tồn tại cùng một lúc. Mỗi nhà giao dịch định lượng có thể sử dụng các công cụ kiểm tra ngược khác nhau theo chiến lược giao dịch của riêng họ, và bất kể bạn sử dụng loại kiểm tra ngược nào.
Phương pháp backtesting tần số thấp không yêu cầu một công cụ khớp phức tạp, bởi vì số lượng giao dịch cho các chiến lược như vậy là nhỏ, chi phí trượt không có tác động lớn đến chính chiến lược. Nói chung, chỉ cần thêm một vài điểm trượt trong quá trình backtesting, sử dụng backtesting cấp Bar sẽ là đủ. Điều thực sự cần chú ý là vấn đề quá phù hợp.
Một số giao dịch trong ngày hoặc các chiến lược liên quan đến vị trí mở trong ngày, nếu cần thiết, cũng có thể điều chỉnh độ tỉ mỉ dữ liệu trên trang tham số cấu hình kiểm tra ngược, chẳng hạn như kiểm tra ngược trên chu kỳ 1 giờ, có thể được điều chỉnh cho dữ liệu 15 phút tinh tế hơn. Nó cũng có thể sử dụng dữ liệu mức Tick khi cần thiết để cải thiện độ chính xác của kiểm tra ngược.
Giao dịch tần số cao vì số lượng giao dịch đủ cao, một giống duy nhất có thể giao dịch hàng chục hoặc thậm chí hàng trăm lần trong một ngày, vì vậy miễn là công cụ khớp hợp lý, thì theo hiệu ứng của quy luật số lớn, kết quả kiểm tra ngược về cơ bản là đáng tin cậy.
Trong backtest giao dịch tần số cao, tần số giao dịch càng cao, thời gian nắm giữ vị trí càng ngắn; lợi nhuận trung bình của một giao dịch càng thấp. Tại thời điểm này, nếu thiết kế của công cụ backtest không hợp lý, hoặc phương pháp kết hợp lệnh so sánh với môi trường giao dịch thực tế không giống nhau, thì sẽ có hiện tượng của
Chúng tôi trình bày cho bạn cách làm thế nào một backtest cấp Tick hoạt động với một chiến lược tạo thị trường tần số cao được viết bằng C++ (cũng hỗ trợ Python và JavaScript). Bạn có thể hoàn thành chiến lược và thực hiện backtest trực tuyến bằng cách nhấp vào liên kết bên dưới. Hình dưới được lấy từ thông tin nhật ký. Lưu ý rằng chúng tôi đã mua 1 lô với giá 2231 vào ngày 2019-07-12 14:59, và bán nó ở 2232.
Tick đầu tiên là: Bán: 2232 Số: 409 Mua: 2231 Volume: 73
Tick thứ hai là: Bán: 2232 Số: 351 Mua: 2231 Volume: 84
Tick thứ ba là: Bán: 2232 Số: 369 Mua: 2231 Volume: 67
Chiến lược chứng minh này là đóng vị trí khi kiếm được lợi nhuận bằng cách đánh dấu giá. Sau khi mở vị trí, chúng tôi gửi lệnh đóng vị trí tại 2232 để đóng vị trí dài và 2231 để đóng vị trí ngắn. Theo kiểm tra ngược cấp Bar truyền thống, giá của lệnh đang chờ này không thể được đóng. Tuy nhiên, công cụ kiểm tra ngược cấp Tick của nền tảng luôn tính toán sự thay đổi về số lượng lệnh trên thị trường. Khi dữ liệu Tick thứ ba được tạo ra, theo cơ chế di chuyển lệnh trao đổi của sàn giao dịch, nếu giá giống nhau, theo quy tắc thời gian đầu tiên, hoạt động đóng vị trí dài của chúng tôi sẽ được giao dịch.
Nhấp vào liên kết này (https://www.fmz.com/strategy/162372) để sao chép toàn bộ chiến lược mà không cần phải cấu hình các tham số
Lưu ý: Hiện tại, chúng tôi chỉ hỗ trợ toàn bộ các hợp đồng tương lai hàng hóa nội địa của Trung Quốc và dữ liệu mức Tick của sàn giao dịch tiền điện tử OKEX. Chúng tôi sẽ hỗ trợ nhiều sàn giao dịch hơn trong tương lai.
Trên đây là phân tích nền tảng FMZ Quant và chiến đấu thực tế của tất cả các cấp độ backtesting. Không chỉ vậy, mà ngoài việc hỗ trợ các nhà giao dịch chuyên nghiệp và người dùng tổ chức, nó cũng rất thân thiện với những người mới bắt đầu. Ngôn ngữ trực quan có thể được thực hiện mà không cần viết mã. Ngoài ra, ngôn ngữ My có thể được giải quyết trong 10 câu.
Suy nghĩ về chiến lược, thực hiện thống kê và phân tích... Việc giao dịch đã rất khó khăn. Cho dù bạn là một CTA tần số thấp, giao dịch trong ngày, giao dịch tần số cao, nền tảng giao dịch định lượng FMZ Quant có thể được hỗ trợ hoàn toàn liền mạch. Chúng tôi không làm các chức năng đồ chơi, dựa trên kiểm tra ngược lịch sử chính xác ở cấp độ Tick, chúng tôi có thể kiểm tra bất kỳ sự kết hợp của nhiều giống, nhiều chiến lược và nhiều chu kỳ để giúp bạn xây dựng danh mục đầu tư tối ưu.