FMZ Quant Simulation Level Backtest Mechanism Penerangan

Penulis:Ninabadass, Dicipta: 2022-03-23 10:07:18, Dikemas kini: 2022-03-28 14:31:37

FMZ Quant Simulation Level Backtest Mechanism Penerangan


  • 1.Rangka Kerja Ujian Kembali

    Program strategi dalam FMZ Quant backtest, program strategi adalah aliran kawalan yang lengkap, dan program itu sentiasa disurvei mengikut kekerapan tertentu. Setiap sebut harga pasaran dan data yang dikembalikan oleh API platform mensimulasikan situasi runtime sebenar, mengikut masa panggilan. Backtest tergolong dalam tahap onTick, bukan tahap onBar sistem backtest lain. Ia menyokong lebih baik backtest strategi berdasarkan data Ticker (strategi dengan kekerapan operasi yang lebih tinggi).

  • 2. Perbezaan Antara Tahap Simulasi dan Tahap Pasaran Nyata

    • Tahap Simulasi

      Ujian belakang tahap simulasi adalah berdasarkan data K-line lapisan bawah sistem backtest; ia, mengikut algoritma tertentu, dalam rangka yang terdiri daripada harga tertinggi, harga terendah, harga terbuka dan harga penutupan Bar K-line yang mendasari, mensimulasikan interpolasi data ticker ke dalam siri masa Bar ini.

    • Tahap pasaran sebenar

      Ujian belakang tahap pasaran sebenar adalah data tahap ticker sebenar dalam siri masa Bar. Untuk strategi berdasarkan data tahap ticker, menggunakan backtest tahap pasaran sebenar lebih dekat dengan realiti. Dalam backtest tahap pasaran sebenar, ticker adalah data yang benar-benar direkodkan, tidak disimulasikan.

  • 3.Pengurusan Ujian Belakang Tahap Simulasi Sublayer K-Line

    Tidak ada pilihan garis K lapisan bawah untuk backtest tahap pasaran sebenar (kerana data ticker adalah sebenar, garis K lapisan bawah tidak akan digunakan untuk simulasi). Dalam backtest tahap simulasi, data ticker disimulasikan dan dihasilkan berdasarkan data K-line. Data K-line ini adalah K-line sublayer. Dalam operasi sebenar backtest tahap simulasi, tempoh K-line sublayer mesti lebih kecil daripada tempoh panggilan API untuk mendapatkan K-line, apabila strategi sedang berjalan. Jika tidak, kerana tempoh besar K-line sublayer dan jumlah ticker yang dihasilkan yang tidak mencukupi, apabila API dipanggil untuk mendapatkan K-line tempoh yang ditentukan, data akan terdistorsi. Apabila menggunakan K-line sublayer untuk backtest, anda boleh menetapkan tempoh K-line sublayer yang lebih besar.

  • 4.HowAdakah lapisan bawah K-garis menjana data ticker?

    Mekanisme garis K lapisan bawah yang menjana ticker simulasi adalah sama dengan MT4:pautan berkaitan

    img img img img

  • 5. Kod Aritmatika Menghasilkan Data Ticker

    Algoritma khusus untuk menukar data garis K lapisan bawah kepada data tik simulasi:

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
}

Oleh itu, akan ada pergerakan harga dalam siri masa, apabila backtest tahap simulasi dijalankan.


Lebih lanjut