Description du mécanisme de contre-test au niveau de simulation quantique FMZ

Auteur:Je suis désolée., Créé à: 2022-03-23 10:07:18, mis à jour à: 2022-03-28 14:31:37

Description du mécanisme de contre-test au niveau de simulation quantique FMZ


  • 1.Cadre de test antérieur

    Le programme de stratégie dans le backtest FMZ Quant, le programme de stratégie est un flux de contrôle complet, et le programme est constamment interrogé selon une certaine fréquence. Chaque cotation de marché et les données renvoyées par l'API de la plate-forme simulent les situations d'exécution réelles, selon le temps d'appel. Le backtest appartient au niveau onTick, et non au niveau onBar des autres systèmes de backtest. Il prend mieux en charge le backtest des stratégies basées sur les données Ticker (stratégies avec une fréquence d'exploitation plus élevée).

  • 2. Différences entre le niveau de simulation et le niveau du marché réel

    • Niveau de simulation

      Le backtest au niveau de la simulation est basé sur les données de la ligne K sous-couche du système de backtest; il simule, selon un certain algorithme, dans le cadre composé du prix le plus élevé, le prix le plus bas, le prix d'ouverture et le prix de clôture de la barre de ligne K sous-jacente, l'interpolation des données de ticker dans la série temporelle de cette barre.

    • Niveau du marché réel

      Le backtest au niveau du marché réel est les données du niveau du ticker réel dans la série temporelle de Bar. Dans le backtest au niveau du marché réel, le ticker est les données réellement enregistrées, pas simulées.

  • 3.Mécanisme de contre-test au niveau de la simulation sous-couche K-Line

    Il n'existe pas d'option de ligne K sous-couche pour les tests de retour au niveau du marché réel (parce que les données ticker sont réelles, la ligne K sous-couche ne sera pas utilisée pour la simulation). Dans le backtest de niveau de simulation, les données de ticker sont simulées et générées en fonction des données de la ligne K. Ces données de ligne K sont la ligne K de sous-couche. Dans le fonctionnement réel du backtest de niveau de simulation, la période de la ligne K de sous-couche doit être inférieure à la période d'appel de l'API pour obtenir la ligne K, lorsque la stratégie est en cours d'exécution. Sinon, en raison de la grande période de la ligne K de sous-couche et du nombre insuffisant de tickers générés, lorsque l'API est appelée pour obtenir la ligne K de la période spécifiée, les données seront déformées. Lorsque vous utilisez une ligne K à grande période pour revenir en arrière, vous pouvez définir de manière appropriée la période de la ligne K de sous-couche plus grande.

  • 4.Howla ligne K sous-couche génère-t-elle des données de ticker?

    Le mécanisme de génération de ticker simulé par la ligne K de la couche inférieure est le même que celui du MT4:lien connexe

    img img img img

  • 5. Les codes arithmétiques générant des données de ticker

    L'algorithme spécifique permettant de convertir les données de la ligne K de la couche inférieure en données de tick simulées:

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
}

Par conséquent, il y aura des mouvements de prix dans les séries temporelles, lorsque le backtest au niveau de la simulation est exécuté.


Plus de