Mô tả cơ chế FMZ Backtest

Tác giả:Ninabadass, Tạo: 2022-03-23 10:06:22, Cập nhật: 2022-03-28 13:42:35

Hầu hết các chiến lược đều yêu cầu backtest để xác minh trước khi được thực hiện trong bot. FMZ hỗ trợ hợp đồng tại chỗ, tương lai và vĩnh viễn của một số tiền điện tử, cũng như tất cả các loại tương lai hàng hóa. Tuy nhiên, cơ chế backtest của nền tảng FMZ Quant khác với backtest onbar phổ biến, gây nhầm lẫn cho nhiều người mới bắt đầu. Bài viết này sẽ chi tiết và trả lời một số câu hỏi backtest phổ biến.

Hệ thống backtest hoạt động như thế nào?

img

Theo hình trên, thời gian từ thời gian bắt đầu backtest đến thời gian kết thúc có thể được coi là một trục thời gian. Trong quá trình backtest, điểm thời gian backtest di chuyển từ trái sang phải dọc theo trục để bắt đầu backtest. Tại một thời điểm, chỉ có dữ liệu lịch sử trước thời điểm này có thể được lấy. Dựa trên dữ liệu lịch sử, chiến lược mua và bán, và cuối cùng tạo thành lợi nhuận và lỗ. Tất nhiên, xem xét rằng các điểm thời gian backtest càng dày đặc, thời gian cần thiết càng dài, hệ thống backtest thực tế cần phải lựa chọn giữa độ chính xác và hiệu quả.

Hệ thống kiểm tra ngược onBar truyền thống

Cơ chế backtest onbar dựa trên K-line, nghĩa là mỗi K-line tạo ra một thời điểm backtest. Tại thời điểm đó, bạn có thể có được thông tin, chẳng hạn như giá cao nhất, thấp nhất, mở và đóng của K-line hiện tại, khối lượng giao dịch, v.v., cũng như thông tin K-line lịch sử trước thời điểm này.

Nhược điểm của cơ chế này là rõ ràng: trên một đường K, chỉ có một giao dịch có thể được tạo ra, và giá thường dựa trên giá đóng K-line. Một đường K chỉ có thể có được bốn giá, cụ thể là giá mở, đóng, giá cao nhất và giá thấp nhất, nhưng không thể có được thông tin, chẳng hạn như sự thay đổi giá trên một đường K, và liệu giá thấp nhất xảy ra trước hay giá cao nhất trước. Lấy đường K 1 giờ làm ví dụ. Thông tin thị trường phải được lấy hàng vài giây trong bot, và lệnh giao dịch cũng sẽ được phát hành trong bot thay vì chờ đợi đường K kết thúc. Lợi thế của cơ chế backtest onbar là dễ hiểu và tốc độ backtest cực kỳ nhanh.

FMZ Quant onTick hệ thống kiểm tra ngược

img

Hình trên cho thấy giao diện cài đặt kiểm tra ngược FMZ. Chế độ kiểm tra ngược được chia thành hai loại, cụ thể là mức mô phỏng và mức thị trường thực tế, sẽ được giới thiệu riêng biệt bên dưới:

Tick là gì?

Không giống như dữ liệu đường K, tick là giá tại một thời điểm cụ thể. Theo dữ liệu đường K, chúng ta thực sự chỉ biết khi nào giá mở và giá đóng xảy ra. Không rõ khi nào giá đạt mức giá cao nhất trong khoảng thời gian đường K. Trên thực tế, dữ liệu đường K cũng được tạo ra dựa trên tick. Theo dữ liệu đường K, cũng có thể mô phỏng sự thay đổi của một tick cụ thể trong một khoảng thời gian đường K. Mặc dù không phải là một tick thực tế, nó có thể làm cho backtest của chúng tôi chính xác hơn. Và khoảng thời gian đường K dựa trên mô phỏng có thể ngắn hơn nhiều so với khoảng thời gian được sử dụng cho backtest, vì vậy độ chính xác cao hơn.

Thử nghiệm ngược cấp độ mô phỏng

Đối với backtest cấp mô phỏng, bạn cần chọn thời gian đường K và thời gian đường K dưới lớp được sử dụng để backtest. Ví dụ, nếu chiến lược sử dụng backtest đường hàng giờ, và đường K dưới lớp được đặt thành 5 phút, thì khoảng thời gian điểm thời gian backtest sẽ dựa trên dấu chấm được mô phỏng bởi đường K 5 phút, được phản ánh trong những thay đổi liên tục của giá đóng đường K trong 1 giờ gần đây nhất. Cơ chế tạo dấu chấm trong các đường K theo đường K tương tự như của MT4. Có hướng dẫn chi tiết trong bài đăng này:https://www.fmz.com/bbs-topic/662

img
Chúng tôi sử dụng một chiến lược đơn giản để chứng minh cơ chế này; mã chiến lược:

function main() {
  while(true){
      var records = exchange.GetRecords() //GetRecords can fill the parameters, and obtain K-lines of different periods 
      var ticker = exchange.GetTicker()
      Log('K-line close price: ', records[records.length-1].Close, 'ticker Buy1 Sell1 prices: ', ticker.Buy, ticker.Sell)
      //js backtest does not use Sleep, and it will skip to the next tick; Python needs 1 hour of sleep time 
  }
}

Kết quả thử nghiệm:img

Chỉ có các tick mở và đóng của mỗi đường K được cố định, và 12 tick được mô phỏng được thêm vào giữa, do đó một đường K sẽ tạo thành 14 điểm thời gian backtest. Nếu bạn backtest trong một ngày với khoảng thời gian K-line dưới lớp 5 phút, tổng cộng 24×12×14 = 4032 điểm thời gian sẽ được tạo ra, trong khi backtest onBar truyền thống chỉ có 24, vì vậy độ chính xác được cải thiện rất nhiều. Các hoạt động mở và đóng vị trí cũng có thể được hoàn thành trong một khoảng thời gian K-line. Mặc dù các tick trung gian được tạo ra được mô phỏng, nhưng điều đó không ảnh hưởng nhiều. Trong backtest, miễn là giá lệnh lớn hơn giá mua bán, và giá lệnh bán nhỏ hơn giá mua một, thì backtest sẽ được khớp. Phương pháp này tính đến tốc độ và độ chính xác của backtest và được khuyến cáo cho tất cả mọi người.

Kiểm tra ngược mức thị trường thực tế

Các backtest cấp thị trường thực sử dụng các dấu chấm thực, và khoảng thời gian ngắn nhất giữa mỗi điểm thời gian chỉ là 1s. loại này của backtest chính xác đến sự thay đổi mỗi giây, nhưng do số lượng lớn dữ liệu, tốc độ backtest chậm và thời gian backtest không thể quá dài. hình dưới đây cho thấy các dấu chấm thực. các backtest cấp thị trường thực có thể được sử dụng để xác minh chính xác các chiến lược.

img

Sự khác biệt giữa Backtest và Bot

Ngay cả kiểm tra ngược cấp thị trường thực và giao dịch bot thực cũng vẫn có những thiếu sót dữ liệu rõ ràng, chẳng hạn như không thể có được các giao dịch lịch sử giao dịch, không thể có được những thay đổi độ sâu thực tế, sự chậm trễ mạng thực và vân vân.

Câu hỏi thường gặp

Tại sao chỉ một vài cặp giao dịch và nền tảng được hỗ trợ để backtest?

Hiện tại, chỉ có dữ liệu của một vài cặp giao dịch phổ biến. Trên thực tế, mối quan hệ giữa chiến lược và đa dạng không phải là rất gần, vì vậy nó là đủ để xác minh chiến lược.

Nó có thể mô phỏng BitMEX để tính lãi suất tài trợ?

Chắc chắn, bạn có thể chọn BitMEX backtest để mở nhật ký.img

Nơi làm backtest?

Việc kiểm tra lại các chiến lược JavaScript được thực hiện trong trình duyệt, trong khi Python có thể chọn máy chủ FMZ hoặc docker của riêng mình để vận hành kiểm tra lại.

Các bản ghi backtest có thể được tải xuống không?

Tất nhiên là có, có một nút tải xuống ở góc phải của các bản ghi.

Liệu backtest có thể được thực hiện tại địa phương không?

FMZ mở nguồn của Python backtest engine.https://www.fmz.com/bbs-topic/1687


Thêm nữa