avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Descripción del mecanismo de prueba retrospectiva del nivel de simulación cuantitativa del inventor

Creado el: 2017-02-07 13:04:57, Actualizado el: 2023-09-07 17:49:15
comments   34
hits   15002

Descripción del mecanismo de prueba retrospectiva del nivel de simulación cuantitativa del inventor


  • ### 1 , la arquitectura de retroalimentación

El inventor de la calibración de la retroalimentación de la política de programación es el proceso de control completo, el programa es una encuesta de seguimiento de una cierta frecuencia sin parar. Los datos devueltos por cada caso, la API de transacción es de acuerdo a la hora de la convocatoria, la simulación de la situación en el momento de la ejecución real. Pertenece a nivel onTick, no a nivel onBar de otros sistemas de retroalimentación.

  • 2. Diferencias entre la detección a nivel analógico y la detección a nivel de disco

    • #### Retroalimentación en el nivel de simulación

    El retroceso de nivel analógico es el resultado de la inserción de datos de ticker en la secuencia de tiempo de esta barra, de acuerdo con los datos de la línea K subyacente del sistema de retroceso, de acuerdo con un algoritmo en un marco compuesto por los valores de la barra K subyacente, el precio máximo, el precio mínimo, el precio de apertura y el precio de cierre.

    • #### Evaluación a nivel de disco duro

    La retroalimentación a nivel de disco real es el dato a nivel de ticker real en la secuencia temporal de Bar. Para las estrategias basadas en datos a nivel de ticker, el uso de retroalimentación a nivel de disco real es más cercano a la verdad. La retroalimentación a nivel de disco, ticker es el registro real de los datos, no la simulación generada.

  • 3 - Mecanismo de retroalimentación de nivel analógico - línea K de fondo

La retroalimentación a nivel de disco no tiene opción de línea K subyacente (ya que los datos de ticker son reales, no se usa una línea K subyacente para simular la generación). En la retroalimentación de nivel de simulación, el ticker generado en la simulación basado en los datos de la línea K. Este dato de la línea K es la línea K subyacente. En el uso real de la retroalimentación de nivel de simulación, el ciclo de la línea K subyacente debe ser menor que el ciclo de la llamada a la API para obtener la línea K cuando se ejecuta la estrategia. De lo contrario, debido a que el ciclo de la línea K subyacente es mayor y la cantidad de tickers generados es insuficiente, la llamada a la API para obtener la línea K de la ciclo especificado, los datos tendrán errores.

  • ### 4. Cómo generar datos de ticker en la línea K subyacente

El mecanismo para generar tickers analógicos de la línea K de la base es el mismo que el MT4.

Descripción del mecanismo de prueba retrospectiva del nivel de simulación cuantitativa del inventor Descripción del mecanismo de prueba retrospectiva del nivel de simulación cuantitativa del inventor Descripción del mecanismo de prueba retrospectiva del nivel de simulación cuantitativa del inventor Descripción del mecanismo de prueba retrospectiva del nivel de simulación cuantitativa del inventor

  • ### 5. Código de algoritmo para generar datos de ticker

El algoritmo específico para simular los datos de la línea K subyacente para los datos de tick:

function recordsToTicks(period, num_digits, records) {
    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, el uso de la retroalimentación de nivel de simulación produce fluctuaciones de precios en la secuencia temporal.