avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Descrição do mecanismo de backtesting de nível de simulação quantitativa do inventor

Criado em: 2017-02-07 13:04:57, atualizado em: 2023-09-07 17:49:15
comments   34
hits   15002

Descrição do mecanismo de backtesting de nível de simulação quantitativa do inventor


  • ### 1 - Arquitetura de retrospectiva

A estratégia do inventor do feedback quantitativo é um processo de controle completo, o programa é uma pesquisa contínua de acordo com uma determinada frequência. Os dados retornados pela API de transação de cada situação são de acordo com o momento da chamada e simulam a situação real de operação. Pertence ao nível onTick, e não ao nível onBar de outros sistemas de feedback.

  • 2 Diferenças entre a detecção em nível analógico e a detecção em nível de disco

    • #### Análise de retorno em nível de simulação

    A retrospecção de nível analógico é a inserção de dados de ticker em uma sequência de tempo de Bar, de acordo com os dados de linha K de base do sistema de retrospecção, de acordo com um algoritmo em uma estrutura composta por valores de valor máximo, mínimo, preço de abertura e preço de fechamento de uma dada linha K de base.

    • #### Retrospectiva em disco rígido

    A retrospectiva em nível de disco é a data em nível de ticker verdadeira na sequência de tempo da barra. Para estratégias baseadas em dados em nível de ticker, a retrospectiva em nível de disco é mais próxima da verdade. O ticker é um registro real de dados, e não uma simulação de geração.

  • 3 - Mecanismo de retroalimentação de nível analógico - Linha K de base

A detecção de nível de disco rígido não tem opção de linha K subjacente (porque os dados do ticker são reais, não é necessário usar a linha K subjacente para simular a geração). No retorno de nível de simulação, o ticker gerado em simulação com base em dados de linha K. Este dado de linha K é a linha K subjacente. No retorno de nível de simulação de uso real, o período de linha K subjacente deve ser menor do que o período de chamada da API para obter a linha K quando a estratégia é executada.

  • ### 4. Como a linha K de base gera dados de ticker

O mecanismo de geração de tickers analógicos para a linha K de base é o mesmo do MT4.

Descrição do mecanismo de backtesting de nível de simulação quantitativa do inventor Descrição do mecanismo de backtesting de nível de simulação quantitativa do inventor Descrição do mecanismo de backtesting de nível de simulação quantitativa do inventor Descrição do mecanismo de backtesting de nível de simulação quantitativa do inventor

  • ### 5 - Código de algoritmo para gerar dados de ticker

Algoritmo específico para simular dados de tick em dados de linha K de base:

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
}

Portanto, quando se usa a retrospectiva de nível de simulação, ocorrem oscilações de preços na sequência temporal.