FMZ Quant Simulation Level Backtest Mechanism Deskripsi

Penulis:Ninabadass, Dibuat: 2022-03-23 10:07:18, Diperbarui: 2022-03-28 14:31:37

FMZ Quant Simulation Level Backtest Mechanism Deskripsi


  • 1.Rangka kerja backtest

    Program strategi dalam FMZ Quant backtest, program strategi adalah aliran kontrol lengkap, dan program terus-menerus disurvei sesuai dengan frekuensi tertentu. Setiap penawaran pasar dan data yang dikembalikan oleh API platform mensimulasikan situasi runtime aktual, sesuai dengan waktu panggilan. Backtest milik tingkat onTick, bukan tingkat onBar dari sistem backtest lainnya. Ini mendukung lebih baik backtest strategi berdasarkan data Ticker (strategi dengan frekuensi operasi yang lebih tinggi).

  • 2. Perbedaan antara Tingkat Simulasi dan Tingkat Pasar Nyata

    • Tingkat Simulasi

      Backtest tingkat simulasi didasarkan pada data K-line lapisan bawah dari sistem backtest; menurut algoritma tertentu, dalam kerangka yang terdiri dari harga tertinggi, harga terendah, harga terbuka dan harga penutupan yang diberikan dari K-line Bar yang mendasari, mensimulasikan interpolasi data ticker ke dalam deret waktu Bar ini.

    • Tingkat Pasar Nyata

      Backtest tingkat pasar nyata adalah data tingkat ticker nyata dalam deret waktu Bar. Untuk strategi berdasarkan data tingkat ticker, menggunakan backtest tingkat pasar nyata lebih dekat dengan kenyataan. Dalam backtest tingkat pasar nyata, ticker adalah data yang benar-benar tercatat, tidak disimulasikan.

  • 3.Mekanisme Backtest Tingkat Simulasi Sublayer K-Line

    Tidak ada pilihan garis K lapisan bawah untuk backtest tingkat pasar nyata (karena data ticker adalah nyata, garis K lapisan bawah tidak akan digunakan untuk simulasi). Dalam backtest tingkat simulasi, data ticker disimulasikan dan dihasilkan berdasarkan data K-line. Data K-line ini adalah sublayer K-line. Dalam operasi sebenarnya dari backtest tingkat simulasi, periode sublayer K-line harus lebih kecil dari periode panggilan API untuk mendapatkan K-line, ketika strategi berjalan. Jika tidak, karena periode besar sublayer K-line dan jumlah ticker yang dihasilkan yang tidak cukup, ketika API dipanggil untuk mendapatkan K-line periode yang ditentukan, data akan terdistorsi. Ketika menggunakan sublayer K-line periode besar untuk backtest, Anda dapat dengan tepat mengatur periode sublayer K-line yang lebih besar.

  • 4.HowApakah lapisan bawah garis K menghasilkan data ticker?

    Mekanisme dari lapisan bawah K-line yang menghasilkan ticker simulasi adalah sama dengan MT4:link terkait

    img img img img

  • 5. Kode Aritmatika Menghasilkan Data Ticker

    Algoritma spesifik untuk mengkonversi data garis K lapisan bawah ke 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 karena itu, akan ada pergerakan harga dalam deret waktu, ketika backtest tingkat simulasi dijalankan.


Lebih banyak