Descripción del mecanismo de prueba posterior de nivel de simulación cuántica FMZ

El autor:No lo sé., Creado: 2022-03-23 10:07:18, Actualizado: 2022-03-28 14:31:37

Descripción del mecanismo de prueba posterior de nivel de simulación cuántica FMZ


  • 1.Marco de pruebas de retroceso

    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).

  • 2. Diferencias entre el nivel de simulación y el nivel de mercado real

    • Nivel de simulació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.

    • Nivel de mercado real

      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.

  • Mecanismo de prueba posterior de nivel de simulación línea K de la capa inferior

    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.

  • 4.How¿La línea K de la capa inferior genera datos de ticker?

    El mecanismo de la línea K subcapa que genera un ticker simulado es el mismo que el MT4:enlace relacionado

    img img img img

  • 5. Los códigos aritméticos que generan los datos del ticker

    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.


Más.