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).
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.
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.
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.
Mekanisme garis K lapisan bawah yang menjana ticker simulasi adalah sama dengan MT4:pautan berkaitan
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.