Penjelasan mekanisme backtest tahap simulasi FMZ

Penulis:Kebaikan, Dicipta: 2020-06-04 09:46:50, Dikemas kini: 2023-11-01 20:32:27

img

Senibina Backtest

Program backtest platform FMZ adalah proses kawalan yang lengkap, dan program ini mengundi tanpa henti mengikut kekerapan tertentu. Data yang dikembalikan oleh setiap pasaran dan API perdagangan juga mensimulasikan masa berjalan sebenar mengikut masa panggilan.onTicktahap, bukanonBarlebih baik untuk pengujian semula strategi berdasarkanTickerdata (strategi dengan kekerapan operasi yang lebih tinggi).

Perbezaan antara backtest tahap simulasi dan backtest tahap pasaran sebenar

  • Ujian belakang tahap simulasi

Simulasi tahap backtest adalah berdasarkan data K-garis bawah sistem backtest, dan mengikut algoritma tertentu, data ticker interpolasi disimulasikan dalam rangka nilai tertinggi, terendah, pembukaan, dan harga penutupan yang diberikan K-garis bawah Bar ke dalam iniBarsiri masa.

  • Ujian semula tahap pasaran sebenar

Ujian belakang tahap pasaran sebenar adalah data tahap ticker sebenar dalamBarUntuk strategi berdasarkan data peringkat ticker, menggunakan backtest tahap pasaran sebenar adalah lebih dekat dengan realiti.

Simulasi tahap backtest mekanisme-bawah K garis

Tidak ada pilihan garis K bawah untuk backtest pasaran sebenar (kerana data ticker adalah sebenar, tidak ada garis K bawah diperlukan untuk mensimulasikan penjanaan).

Dalam backtest tahap simulasi, hasil yang dihasilkantickerData K-line ini adalah K-line bawah. Dalam penggunaan sebenar backtest tahap simulasi, tempoh K-line bawah mestilah kurang daripada tempoh panggilan API untuk mendapatkan K-line apabila strategi berjalan. Jika tidak, kerana kitaran besar K-line bawah dan jumlah ticker yang tidak mencukupi, data akan terdistorsi apabila memanggil API untuk mendapatkan K-line tempoh yang ditentukan. Apabila menggunakan backtest K-line tempoh besar, anda boleh meningkatkan kitaran K-line bawah dengan sewajarnya.

Bagaimana untuk menjana data ticker untuk baris K bawah

Mekanisme untuk menjana tickers simulasi pada garis K bawah adalah sama dengan perisian perdagangan terkenal MetaTrader 4

img img img img

Kod algoritma untuk menjana data ticker

Algoritma khusus untuk mensimulasikan data tik dari data garis K bawah:

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, apabila menggunakan backtest tahap simulasi, akan ada lompatan harga dalam siri masa.


Berkaitan

Lebih lanjut