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.onTick
tahap, bukanonBar
lebih baik untuk pengujian semula strategi berdasarkanTicker
data (strategi dengan kekerapan operasi yang lebih tinggi).
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 iniBar
siri masa.
Ujian belakang tahap pasaran sebenar adalah data tahap ticker sebenar dalamBar
Untuk strategi berdasarkan data peringkat ticker, menggunakan backtest tahap pasaran sebenar adalah lebih dekat dengan realiti.
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 dihasilkanticker
Data 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.
Mekanisme untuk menjana tickers simulasi pada garis K bawah adalah sama dengan perisian perdagangan terkenal MetaTrader 4
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.