5.2 Làm thế nào để thực hiện backtesting giao dịch định lượng

Tác giả:Tốt, Tạo: 2019-05-08 13:08:52, Cập nhật:

Tóm lại

Tầm quan trọng và tầm quan trọng của backtesting là không thể nghi ngờ. Khi thực hiện backtesting định lượng, chiến lược nên được đặt trong môi trường lịch sử thực tế và gần như có thể. Nếu một số chi tiết trong môi trường lịch sử bị bỏ qua, toàn bộ backtesting định lượng có thể không hợp lệ. Bài viết này sẽ giải thích cách thực hiện backtesting giao dịch định lượng thích hợp.

Việc kiểm tra lại tương đương với việc phát lại dữ liệu. Bằng cách chơi lại dữ liệu K-line lịch sử và thực hiện các quy tắc giao dịch thị trường thực, chẳng hạn như tỷ lệ Sharpe, tỷ lệ khôi phục tối đa, tỷ lệ lợi nhuận hàng năm và đường cong vốn.github.com, có thể được tùy chỉnh linh hoạt.

FMZ Quant là một phần mềm giao dịch định lượng thương mại, đi kèm với công cụ backtest hiệu suất cao, sử dụng khung backtest for-loop (đánh phiếu), để định lượng tính toán nhanh hơn.

FMZ Quant Backtest Giao diện giới thiệu

  • Bước 1

Lấy chiến lược thời gian FMZ Quant Thermostat làm ví dụ, hãy mở trang web chính thức của FMZ Quant (www.fmz.comNhấp vào bảng điều khiển, Chiến lược, chọn một chiến lược, nhấp vào backtest, và đi đến trang sau:

img img

Trong giao diện cấu hình backtest, bạn có thể tùy chỉnh nó theo nhu cầu thực tế của mình. Ví dụ: đặt thời gian backtest, chu kỳ đường K, loại dữ liệu (dữ liệu cấp độ mô phỏng hoặc dữ liệu cấp độ thị trường thực. Ngược lại, tốc độ backtesting dữ liệu cấp độ mô phỏng nhanh hơn, backtesting dữ liệu cấp độ thị trường thực chính xác hơn). Ngoài ra, bạn cũng có thể đặt phí hoa hồng cho backtest và quỹ ban đầu của tài khoản.

  • Bước 2

Nhấp vào thư viện giao dịch mylanguage core (vì chiến lược này được viết bằng ngôn ngữ M, nếu bạn sử dụng ngôn ngữ lập trình khác, tùy chọn này có thể không xuất hiện) Trước hết, hãy đặt nhãn giao dịch. Ngôn ngữ FMZ Quant M có hai loại phương pháp thực hiện backtest, đó là: mô hình giá đóng và mô hình giá mới nhất. Mô hình giá đóng đề cập đến việc thực hiện mô hình sau khi đường K hiện tại được hoàn thành, và giao dịch được thực hiện ở đầu đường K tiếp theo; Mô hình giá mới nhất đề cập đến việc thực hiện mô hình cho mỗi thay đổi giá, và khi tín hiệu giao dịch được thiết lập, nó sẽ giao dịch ngay lập tức. Như được hiển thị bên dưới:

img img

Kích thước lô mở mặc định đề cập đến số tiền mở và đóng vị trí khi kiểm tra ngược. Tỷ lệ giao dịch tối đa một lần là số tiền mở tối đa được gửi đến công cụ kiểm tra ngược bằng một giao dịch.

Sẽ luôn có một sự lệch giữa giá giao dịch thực tế và giá giao dịch dự kiến. Sự thay đổi này thường di chuyển theo hướng không thuận lợi cho nhà giao dịch, dẫn đến tổn thất bổ sung trong giao dịch. Do đó, cần phải thêm trượt để mô phỏng môi trường giao dịch thực tế.

  • Bước 3

Hãy điền vào hợp đồng tương lai với loại hợp đồng bạn muốn backtest, cho cryptocurreny, chúng ta chỉ cần chỉ định thời gian của k-line mà chúng ta muốn backtest, trong trường hợp này, chỉ cần sử dụng hàng tuần k dòng, vì vậy, đặt this_week trong.

img

thiết lập thị trường thực tùy chọn chủ yếu được sử dụng cho giao dịch thị trường thực, trong môi trường backtesting, chúng tôi chỉ duy trì nó mặc định thiết lập sẽ được tốt. Nếu tự động phục hồi tiến độ được đánh dấu là đúng, sau đó khi robot dừng lại trong thị trường thực, khởi động lại robot sẽ tự động khôi phục vị trí tín hiệu trước đó mà không tính lại tín hiệu. số lượng lần thử lại lệnh được thiết lập thành 20 theo mặc định. Khi đặt lệnh thất bại, nó sẽ cố gắng gửi lại cho đến 20 lần. Mùa thăm dò mạng (milliseconds) là nơi robot thực thi mã chiến lược mỗi lần khác.

img

  • Bước 4

Tùy chọn giao dịch tại chỗ chủ yếu dành cho giao dịch tiền điện tử, khi kiểm tra lại, hãy giữ nó trong cài đặt mặc định sẽ ổn. Nếu bạn muốn, bạn có thể chỉ định tất cả các tham số trong các cài đặt này. Ngoài ra, đối với một số sàn giao dịch tiền điện tử, bạn cũng có thể đặt kích thước đòn bẩy và các cài đặt liên quan khác.

img

Chiến lược Backtest

Trước khi kiểm tra lại, xác định chiến lược giao dịch của bạn. Ở đây chúng tôi lấy chiến lược thời gian Thermostat làm ví dụ. Chiến lược này sẽ áp dụng chiến lược xu hướng trong thị trường xu hướng theo trạng thái thị trường, và áp dụng chiến lược dao động trong thị trường biến động. Mã nguồn như được hiển thị bên dưới (cũng có thể tải xuống từ trang Phố Chiến lược của trang web FMZ Quant):

// Calculate CMI indicator to distinguish between Oscillating and trend market
CMI:=ABS(C-REF(C,29))/(HHV(H,30)-LLV(L,30))*100;

// Define key prices
KOD:=(H+L+C)/3;

// In the Oscillating market, the closing price is greater than the key price is suitable for selling market, otherwise it is for buying market
BE:=IFELSE(C>KOD,1,0);
SE:=IFELSE(C<=KOD,1,0);

// Define 10-day ATR indicator
TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR10:=MA(TR,10);

// Define the highest and lowest price 3-day moving average
AVG3HI:=MA(H,3);
AVG3LO:=MA(L,3);

// Calculate the entry price of the Oscillating market
LEP:=IFELSE(C>KOD,O+ATR10*0.5,O+ATR10*0.75);
SEP:=IFELSE(C>KOD,O-ATR10*0.75,O-ATR10*0.5);
LEP1:=MAX(LEP,AVG3LO);
SEP1:=MIN(SEP,AVG3HI);

// Calculate the entry price of the trend market
UPBAND:=MA(C,50)+STD(C,50)*2;
DNBAND:=MA(C,50)-STD(C,50)*2;

// Calculate the quit price of the trend market
MA50:=MA(C,50);

// Oscillating strategy logic
CMI<20&&C>=LEP1,BK;
CMI<20&&C<=SEP1,SK;
CMI<20&&C>=AVG3HI,SP;
CMI<20&&C<=AVG3LO,BP;

// Trend strategy logic
CMI>=20&&C>=UPBAND,BK;
CMI>=20&&C<=DNBAND,SK;
CMI>=20&&C<=MA50,SP;
CMI>=20&&C>=MA50,BP;
AUTOFILTER;

Trong giao diện backtesting mô phỏng, sau khi cấu hình các cài đặt backtesting, nhấp vào nút Start Backtest, và kết quả backtesting sẽ được hiển thị ngay lập tức sau vài giây. Trong nhật ký backtest, nó sẽ hiển thị bao nhiêu giây được sử dụng cho backtest, nhật ký và tổng số giao dịch. Thông tin tài khoản in kết quả cuối cùng của backtest chiến lược: lợi nhuận và lỗ trung bình, lợi nhuận và lỗ vị trí, biên, phí hoa hồng và lợi nhuận ước tính.

img

Biên độ trạng thái ghi lại các loại giao dịch, vị trí, giá vị trí, giá mới nhất, các loại tín hiệu giao dịch trước đó, giá cao nhất và thấp nhất của các vị trí, số lượng cập nhật cũng như thông tin vốn và thời gian. Ngoài ra, trong nhãn lợi nhuận và lỗ thay đổi, đường cong quỹ chi tiết của tài khoản được hiển thị, và các chỉ số hiệu suất thường được sử dụng cũng được bao gồm: tỷ lệ lợi nhuận, tỷ lệ lợi nhuận hàng năm, tỷ lệ Sharpe, biến động hàng năm và tỷ lệ khôi phục tối đa, về cơ bản có thể đáp ứng được đa số nhu cầu của người dùng.

Trong số đó, chỉ số hiệu suất quan trọng nhất là: tỷ lệ Sharpe. Nó là trong khi thực hiện chỉ số toàn diện xem xét lợi ích và rủi ro, và nó là một chỉ số quan trọng để đo sản phẩm quỹ. Nói chung, đó là bao nhiêu rủi ro bạn chịu, mỗi khi bạn kiếm được lợi nhuận, vì vậy giá trị tỷ lệ Sharpe cao hơn, tốt hơn.

Sự biến động hàng năm, nói đơn giản, biến đổi hàng năm một con số giả định các quan sát trong một khung thời gian ngắn sẽ tiếp tục trong suốt một năm. Nó là một thước đo rủi ro của quỹ, nhưng chắc chắn không phải là toàn bộ rủi ro. Ví dụ, Chiến lược A có biến động lớn hơn, nhưng nó đã biến động lên, lợi nhuận là tốt; Chiến lược B có biến động nhỏ, nhưng nó đã được di chuyển ổn định (( hầu như không di chuyển ở tất cả). Chúng ta có thể nói rằng Chiến lược B tốt hơn Chiến lược A? Chiến lược A như được hiển thị bên dưới:

img

Cuối cùng, trong thông tin nhật ký, một bản ghi chi tiết về từng tình huống giao dịch qua môi giới khi kiểm tra ngược, bao gồm thời gian cụ thể của giao dịch, thông tin trao đổi, loại vị trí mở và đóng, cơ chế khớp lệnh công cụ kiểm tra ngược, cũng như số lượng giao dịch và in ra thông tin.

img

Sau khi kiểm tra lại

Nhiều lần, và trong hầu hết các trường hợp, kết quả của backtesting sẽ xa với những gì bạn mong đợi.

Nếu kết quả backtest chiến lược của bạn đang mất tiền, đừng nản lòng. Điều này thực sự là khá bình thường. kiểm tra xem liệu logic chiến lược có bị hiểu sai bởi mã, liệu nó có sử dụng một số thông số cực đoan, liệu nó có sử dụng quá nhiều điều kiện vị trí mở, v.v.

Nếu kết quả backtest chiến lược của bạn rất tốt, đường cong tài chính là hoàn hảo, với tỷ lệ Sharpe cao hơn 1. Xin đừng vội vàng, Trong trường hợp này, hầu hết các tình huống đang sử dụng các chức năng tương lai, đánh cắp giá, quá phù hợp, hoặc không có giá trượt thêm, v.v. Bạn có thể sử dụng dữ liệu ngoài mẫu và mô phỏng giao dịch thị trường thực để loại trừ các vấn đề này.

Tóm lại

Điều trên là toàn bộ quá trình kiểm tra lại chiến lược giao dịch, có thể nói rằng nó đã được cụ thể trong từng chi tiết. Cần lưu ý rằng kiểm tra lại dữ liệu lịch sử là một môi trường lý tưởng nơi tất cả các rủi ro được biết đến. Do đó, tốt nhất là phải trải qua một vòng thị trường bò và gấu cho thời gian kiểm tra lại chiến lược. Số lượng giao dịch hiệu quả không nên ít hơn 100 lần, để tránh một số thiên vị sống sót.

Thị trường luôn trong quá trình thay đổi và phát triển. Chiến lược backtesting lịch sử không có nghĩa là tương lai sẽ giống nhau. Nó không chỉ để cho chiến lược đối phó với các rủi ro có thể có trong môi trường backtesting, mà còn để đối phó với những rủi ro chưa biết trong tương lai. Do đó, rất cần thiết để tăng khả năng chống rủi ro và tính phổ quát của chiến lược.

Các bài tập sau giờ học

  1. Cố gắng sao chép chiến lược trong phần này và kiểm tra lại nó.

  2. Cố gắng cải thiện và tối ưu hóa chiến lược trong phần này dựa trên kinh nghiệm giao dịch của bạn.


Thêm nữa