Explicación del mecanismo de ensayo posterior de nivel de simulación FMZ

El autor:La bondad, Creado: 2020-06-04 09:46:50, Actualizado: 2023-11-01 20:32:27

img

Arquitectura de pruebas posteriores

El programa de backtest de la plataforma FMZ es un proceso de control completo, y el programa está realizando encuestas sin parar de acuerdo con una cierta frecuencia.onTickel nivel, no elonBarEl desarrollo de un sistema de evaluación de la calidad de los sistemas de evaluación de la calidad de los sistemas de evaluaciónTickerdatos (estrategias con mayor frecuencia de operación).

La diferencia entre la prueba de retroceso a nivel de simulación y la prueba de retroceso a nivel de mercado real

  • Prueba posterior de nivel de simulación

El nivel de simulación backtest se basa en los datos de la línea K inferior del sistema de backtest, y de acuerdo con un cierto algoritmo, la interpolación de los datos ticker se simula en el marco de los valores de los precios más altos, más bajos, de apertura y cierre de la dada K-línea inferior Bar en esteBarserie temporal.

  • Prueba de retroceso del nivel real del mercado

El backtest del nivel real del mercado es el dato del nivel real de ticker enBarPara las estrategias basadas en datos a nivel de ticker, el uso de backtest a nivel de mercado real es más cercano a la realidad.

Mecanismo de prueba posterior de nivel de simulación-línea K inferior

No existe una opción de línea K inferior para la prueba de retroceso del mercado real (dado que los datos del ticker son reales, no se necesita una línea K inferior para simular la generación).

En el backtest de nivel de simulación, eltickerEn el uso real de la prueba de retroceso de nivel de simulación, el período de la línea K inferior debe ser menor que el período de llamada de la API para obtener la línea K cuando se ejecuta la estrategia. De lo contrario, debido al gran ciclo de la línea K inferior y al número insuficiente de tickers generados, los datos se distorsionarán al llamar a la API para obtener la línea K del período especificado. Al usar la prueba de retroceso de la línea K de gran período, puede aumentar adecuadamente el ciclo de línea K inferior.

Cómo generar datos de ticker para la línea K inferior

El mecanismo para generar tickers simulados en la línea K inferior es el mismo que el famoso software de trading MetaTrader 4

img img img img

Código de algoritmo para la generación de datos de ticker

Algoritmo específico para simular los datos de tick a partir de los datos de la línea K inferior:

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, cuando se utiliza el backtest de nivel de simulación, habrá saltos de precios en las series temporales.


Relacionados

Más.