FMZ 플랫폼 백테스트 프로그램은 완전한 제어 프로세스이며, 프로그램은 특정 주파수에 따라 멈추지 않고 투표합니다. 각 시장 및 거래 API가 반환하는 데이터는 호출 시간에 따라 실제 실행 시간을 시뮬레이션합니다.onTick
수준이 아니라onBar
다른 백트테스트 시스템의 수준.Ticker
데이터 (더 높은 작동 빈도의 전략)
시뮬레이션 레벨 백테스트는 백테스트 시스템의 하단 K-라인 데이터에 기반하고, 특정 알고리즘에 따라, 틱어 데이터 인터폴레이션은Bar
시간 계열
실제 시장 수준 백테스트는Bar
틱어 레벨 데이터에 기반한 전략의 경우 실제 시장 수준 백테스트를 사용하여 현실에 더 가깝습니다. 실제 시장 수준에서 백테스트, 틱어는 실제 기록 된 데이터이며 시뮬레이션되지 않습니다.
실제 시장 백테스트를 위한 하위 K-라인 옵션은 없습니다. (티커 데이터가 실제이기 때문에 생성 시뮬레이션을 위해 하위 K-라인이 필요하지 않습니다.)
시뮬레이션 레벨 백테스트에서 생성된ticker
이 K-라인 데이터는 아래 K-라인이다. 시뮬레이션 레벨 백테스트의 실제 사용에서는, 전략이 실행될 때 K-라인을 얻기 위해 API를 호출하는 기간보다 아래 K-라인 기간이 작아야 한다. 그렇지 않으면, 아래 K-라인의 큰 사이클과 생성된 티커의 부족으로 인해, 지정된 기간의 K-라인을 얻기 위해 API를 호출할 때 데이터가 왜곡될 것이다. 큰 기간 K-라인 백테스트를 사용할 때, 당신은 적절하게 아래 K-라인 사이클을 증가시킬 수 있다.
아래 K 라인에 시뮬레이션 틱을 생성하는 메커니즘은 유명한 거래 소프트웨어 메타 트레이더 4와 동일합니다.
아래쪽 K-라인 데이터에서 틱 데이터를 시뮬레이션하는 특정 알고리즘:
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
}
따라서 시뮬레이션 레벨 백테스트를 사용할 때 시간 계열에서 가격 점프가 발생할 것입니다.