El programa de estrategia en el backtest de FMZ Quant, el programa de estrategia es un flujo de control completo, y el programa se encuesta constantemente de acuerdo con una cierta frecuencia. Cada cotización de mercado y los datos devueltos por la API de la plataforma simulan las situaciones reales de tiempo de ejecución, de acuerdo con el tiempo de llamada. El backtest pertenece al nivel onTick, no al nivel onBar de otros sistemas de backtest. Soporta mejor la backtest de estrategias basadas en datos de Ticker (estrategias con mayor frecuencia de operación).
La prueba de retroceso de nivel de simulación se basa en los datos de la línea K de la capa inferior del sistema de prueba de retroceso; según un cierto algoritmo, dentro del marco compuesto por el precio más alto, el precio más bajo, el precio de apertura y el precio de cierre de la barra de línea K subyacente, simula la interpolación de los datos de ticker en la serie temporal de esta barra.
El backtest de nivel de mercado real es los datos reales de nivel de ticker en la serie de tiempo de Bar. En el backtest a nivel de mercado real, el ticker es los datos realmente registrados, no simulados.
No existe una opción de la línea K de la capa inferior para las pruebas de retroceso reales a nivel de mercado (ya que los datos del ticker son reales, la línea K de la capa inferior no se utilizará para la simulación). En la prueba de retroceso de nivel de simulación, los datos de ticker se simulan y generan en base a los datos de la línea K. Estos datos de línea K son la línea K de la capa inferior. En la operación real de la prueba de retroceso de nivel de simulación, el período de la línea K de la capa inferior debe ser menor que el período de llamada de API para obtener la línea K, cuando se ejecuta la estrategia. De lo contrario, debido al gran período de la línea K de la capa inferior y al número insuficiente de tickers generados, cuando se llama a la API para obtener la línea K del período especificado, los datos se distorsionarán. Cuando se usa una línea K de período grande para volver atrás, se puede establecer de manera apropiada el período de línea K de la capa inferior más grande.
El mecanismo de la línea K subcapa que genera un ticker simulado es el mismo que el MT4:enlace relacionado
El algoritmo específico para convertir los datos de la línea K de la capa inferior en datos de tick simulados:
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
}
Por lo tanto, habrá un movimiento de precios en la serie temporal, cuando se ejecute la prueba de retroceso de nivel de simulación.