Giải thích cơ chế backtest ở mức mô phỏng FMZ

Tác giả:Tốt, Tạo: 2020-06-04 09:46:50, Cập nhật: 2023-11-01 20:32:27

img

Kiến trúc backtest

Chương trình FMZ nền tảng backtest là một quy trình kiểm soát hoàn chỉnh, và chương trình đang thăm dò không ngừng theo một tần số nhất định. Dữ liệu được trả về bởi mỗi thị trường và giao dịch API cũng mô phỏng thời gian chạy thực tế theo thời gian gọi.onTickmức độ, không phảionBarhỗ trợ tốt hơn cho việc kiểm tra lại các chiến lượcTickerdữ liệu (các chiến lược với tần suất hoạt động cao hơn).

Sự khác biệt giữa backtest ở mức mô phỏng và backtest ở mức thị trường thực tế

  • Kiểm tra sau cấp độ mô phỏng

Tiêu chuẩn mô phỏng backtest dựa trên dữ liệu K-line dưới cùng của hệ thống backtest, và theo một thuật toán nhất định, các ticker dữ liệu can thiệp được mô phỏng trong khuôn khổ các giá trị của giá cao nhất, thấp nhất, mở, và đóng của K-line dưới cùng được cho Bar vàoBarchuỗi thời gian.

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

Các backtest thị trường thực là các dữ liệu mức ticker thực trongBarĐối với các chiến lược dựa trên dữ liệu cấp ticker, sử dụng backtest cấp thị trường thực là gần hơn với thực tế.

Cơ chế thử nghiệm sau cấp độ mô phỏng - đường K dưới cùng

Không có tùy chọn đường K dưới cùng cho kiểm tra hậu quả thị trường thực (vì dữ liệu ticker là thực, không cần đường K dưới cùng để mô phỏng sản xuất).

Trong thử nghiệm ngược cấp độ mô phỏng, cáctickerDữ liệu K-line được mô phỏng dựa trên dữ liệu đường K. Dữ liệu đường K này là đường K dưới cùng. Trong việc sử dụng thực tế của thử nghiệm ngược cấp mô phỏng, khoảng thời gian của đường K dưới cùng phải nhỏ hơn khoảng thời gian gọi API để có được đường K khi chiến lược đang chạy. Nếu không, do chu kỳ lớn của đường K dưới cùng và số lượng ticker được tạo không đủ, dữ liệu sẽ bị biến dạng khi gọi API để có được đường K của khoảng thời gian được chỉ định. Khi sử dụng thử nghiệm ngược đường K giai đoạn lớn, bạn có thể tăng chu kỳ đường K dưới cùng một cách thích hợp.

Làm thế nào để tạo dữ liệu ticker cho đường K dưới cùng

Cơ chế để tạo các dấu hiệu mô phỏng trên đường K dưới cùng là giống như phần mềm giao dịch nổi tiếng MetaTrader 4

img img img img

Mã thuật toán để tạo dữ liệu ticker

thuật toán cụ thể để mô phỏng dữ liệu tick từ dữ liệu đường K dưới cùng:

function recordsToTicks(period, num_digits, records) {
    // http://www.metatrader5.com/en/terminal/help/tick_generation
    if (records.length == 0) {
        return []
    }
    var ticks = []
    var steps = [0, 2, 4, 6, 10, 12, 16, 18, 23, 25, 27, 29]
    var pown = Math.pow(10, num_digits)

    function pushTick(t, price, vol) {
        ticks.push([Math.floor(t), Math.floor(price * pown) / pown, vol])
    }

    for (var i = 0; i < records.length; i++) {
        var T = records[i][0]
        var O = records[i][1]
        var H = records[i][2]
        var L = records[i][3]
        var C = records[i][4]
        var V = records[i][5]
        if (V > 1) {
            V = V - 1
        }
        if ((O == H) && (L == C) && (H == L)) {
            pushTick(T, O, V)
        } else if (((O == H) && (L == C)) || ((O == L) && (H == C))) {
            pushTick(T, O, V)
        } else if ((O == C) && ((O == L) || (O == H))) {
            pushTick(T, O, V / 2)
            pushTick(T + (period / 2), (O == L ? H : L), V / 2)
        } else if ((C == H) || (C == L)) {
            pushTick(T, O, V / 2)
            pushTick(T + (period * 0.382), (C == L ? H : L), V / 2)
        } else if ((O == H) || (O == L)) {
            pushTick(T, O, V / 2)
            pushTick(T + (period * 0.618), (O == L ? H : L), V / 2)
        } else {
            var dots = []
            var amount = V / 11
            pushTick(T, O, amount)
            if (C > O) {
                dots = [
                    O - (O - L) * 0.75,
                    O - (O - L) * 0.5,
                    L,
                    L + (H - L) / 3.0,
                    L + (H - L) * (4 / 15.0),
                    H - (H - L) / 3.0,
                    H - (H - L) * (6 / 15.0),
                    H,
                    H - (H - C) * 0.75,
                    H - (H - C) * 0.5,
                ]
            } else {
                dots = [
                    O + (H - O) * 0.75,
                    O + (H - O) * 0.5,
                    H,
                    H - (H - L) / 3.0,
                    H - (H - L) * (4 / 15.0),
                    H - (H - L) * (2 / 3.0),
                    H - (H - L) * (9 / 15.0),
                    L,
                    L + (C - L) * 0.75,
                    L + (C - L) * 0.5,
                ]
            }
            for (var j = 0; j < dots.length; j++) {
                pushTick(T + period * (steps[j + 1] / 30.0), dots[j], amount)
            }
        }
        pushTick(T + (period * 0.98), C, 1)
    }
    return ticks
}

Do đó, khi sử dụng backtest cấp độ mô phỏng, sẽ có những bước nhảy giá trong chuỗi thời gian.


Có liên quan

Thêm nữa