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.onTick
tingkat, bukanonBar
dukungan yang lebih baik untuk backtest strategi berdasarkanTicker
data (strategi dengan frekuensi operasi yang lebih tinggi).
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 iniBar
seri waktu.
Backtest tingkat pasar nyata adalah data tingkat ticker nyata diBar
Untuk strategi yang didasarkan pada data tingkat ticker, menggunakan backtest tingkat pasar nyata lebih dekat dengan kenyataan.
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 dihasilkanticker
Data 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.
Mekanisme untuk menghasilkan ticker simulasi pada garis K bawah adalah sama dengan perangkat lunak perdagangan terkenal MetaTrader 4
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.