Penjelasan mekanisme backtest tingkat simulasi FMZ

Penulis:Kebaikan, Dibuat: 2020-06-04 09:46:50, Diperbarui: 2023-11-01 20:32:27

img

Arsitektur Backtest

Program backtest platform FMZ adalah proses kontrol yang lengkap, dan program ini jajak pendapat non-stop sesuai dengan frekuensi tertentu. Data yang dikembalikan oleh setiap pasar dan perdagangan API juga mensimulasikan waktu berjalan yang sebenarnya sesuai dengan waktu panggilan.onTicktingkat, bukanonBardukungan yang lebih baik untuk backtest strategi berdasarkanTickerdata (strategi dengan frekuensi operasi yang lebih tinggi).

Perbedaan antara backtest tingkat simulasi dan backtest tingkat pasar nyata

  • Backtest tingkat simulasi

Simulasi tingkat backtest didasarkan pada data K-line bawah dari sistem backtest, dan menurut algoritma tertentu, data ticker interpolasi disimulasikan dalam kerangka nilai tertinggi, terendah, pembukaan, dan harga penutupan dari K-line Bar bawah yang diberikan ke dalam iniBarseri waktu.

  • Backtest tingkat pasar riil

Backtest tingkat pasar nyata adalah data tingkat ticker nyata diBarUntuk strategi yang didasarkan pada data tingkat ticker, menggunakan backtest tingkat pasar nyata lebih dekat dengan kenyataan.

Simulasi tingkat backtest mekanisme-bawah garis K

Tidak ada opsi garis K bawah untuk backtest pasar nyata (karena data ticker nyata, tidak ada garis K bawah yang diperlukan untuk mensimulasikan generasi).

Dalam backtest tingkat simulasi, hasil yang dihasilkantickerData K-line ini adalah data K-line bawah. Dalam penggunaan backtest tingkat simulasi yang sebenarnya, periode garis K bawah harus kurang dari periode panggilan API untuk mendapatkan garis K ketika strategi berjalan. Jika tidak, karena siklus besar garis K bawah dan jumlah ticker yang tidak cukup, data akan terdistorsi ketika memanggil API untuk mendapatkan garis K periode yang ditentukan. Saat menggunakan backtest K-line periode besar, Anda dapat dengan tepat meningkatkan siklus K-line bawah.

Cara menghasilkan data ticker untuk garis K bawah

Mekanisme untuk menghasilkan ticker simulasi pada garis K bawah adalah sama dengan perangkat lunak perdagangan terkenal MetaTrader 4

img img img img

Kode algoritma untuk menghasilkan data ticker

Algoritma khusus untuk mensimulasikan data tick 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 karena itu, ketika menggunakan backtest tingkat simulasi, akan ada lompatan harga dalam deret waktu.


Berkaitan

Lebih banyak