4
Подписаться
1271
Подписчики

Описание механизма обратного тестирования на уровне количественного моделирования изобретателя

Создано: 2017-02-07 13:04:57, Обновлено: 2023-09-07 17:49:15
comments   34
hits   15002

Описание механизма обратного тестирования на уровне количественного моделирования изобретателя


  • ### 1, отслеживание архитектуры

Стратегическая программа в количественном отзыве изобретателя является полным контрольным процессом, программа выполняется в соответствии с определенной частотой непрерывных опросов. Данные, возвращаемые API-интерфейсом для каждой ситуации, являются данными в соответствии с моментом вызова, имитирующими фактическую работу.

  • Различие между аналоговым и дисковым отслеживанием

    • #### Аналоговый уровень отсчета

    Аналоговый уровень отслеживания - это отслеживание данных нижней K-линии системы отслеживания, в соответствии с определенным алгоритмом в рамках, состоящем из величин наивысшей цены, наименьшей цены, открывающей цены, закрывающей цены данной нижней K-линии Bar, для моделирования вставки тикерных данных в временную последовательность этого Bar.

    • #### Отзывы на уровне диска

    Фиксированный уровень отсчета - это реальные данные на уровне тикера в временной последовательности Bar. Для стратегий, основанных на данных на уровне тикера, использование фиксированного уровня отсчета ближе к истине. На уровне реального диска, тикеры - это реальные данные, а не моделируемые.

  • 3., Аналоговый уровень отслеживания механизма - нижний K-линии

На уровне твердого диска нет возможности создания нишевых K-линий (поскольку тикерные данные являются реальными, они не используются для моделирования генерирования нишевых K-линий). В аналоговом уровне обратной связи, на основе K-линейных данных моделирования генерируемого тикера. Данные K-линии является базовой K-линии. В реальном использовании аналогового уровня обратной связи, базовой K-линии цикл должен быть меньше, чем призыв API получить K-линии цикла при выполнении стратегии. В противном случае, из-за большого количества базовых K-линии циклов, генерируемого недостаточное количество тикеров, призыв API получить указанный цикл K-линии, данные будут искажены. При использовании больших циклов K-линии обратной связи, можно соответствующим образом изменить базовой большой K-линии циклов.

  • ### 4., Как нижний K-накопитель генерирует тикерные данные

Механизм создания аналоговых тикеров на базовой K-линии такой же, как и на MT4.

Описание механизма обратного тестирования на уровне количественного моделирования изобретателя Описание механизма обратного тестирования на уровне количественного моделирования изобретателя Описание механизма обратного тестирования на уровне количественного моделирования изобретателя Описание механизма обратного тестирования на уровне количественного моделирования изобретателя

  • ### 5., алгоритмический код, генерирующий тикерные данные

Конкретный алгоритм моделирования данных tick на основе данных K-линий:

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
}

Таким образом, при использовании аналоговых уровней отсчета возникают колебания цены по временной последовательности.