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).
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.
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.
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.
Mekanisme dari lapisan bawah K-line yang menghasilkan ticker simulasi adalah sama dengan MT4:link terkait
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.