Die Ressourcen sind geladen. Beförderung...

Benutzerdefinierte Datenquelle

Das Backtesting-System der FMZ Quant Trading Platform unterstützt benutzerdefinierte Datenquellen, das Backtesting-System verwendet dieGETMethode zur Anforderung einer benutzerdefinierten URL (öffentlich zugängliche URL), um eine externe Datenquelle für Backtest zu erhalten.

Parameter Bedeutung Erläuterung
Symbol Name des Symbols Spotmarktdaten wie:BTC_USDT, Futures-Marktdaten wieBTC_USDT.swap, Futures-Perpetual Contract Financing Rate Daten, wie zum Beispiel:BTC_USDT.funding, Futures-Perpetuum-Kontraktpreisindexdaten, wie zum Beispiel:BTC_USDT.index
Eid Auswechslungen Der Wert der Vermögenswerte wird in den folgenden Zahlen angegeben:
rund Genauigkeit der Daten True bedeutet, dass die spezifische Präzision in den Daten definiert wird, die von der benutzerdefinierten Datenquelle zurückgegeben werden.round=true
Periode K-Liniendatenperiode (Millisekunden) wie z. B.:60000ist ein Zeitraum von 1 Minute
Tiefe Tiefenebenen 1-20
Handel Ob Daten aufgeteilt werden müssen (genau) / (falsch)
von Startzeit Unix-Zeitstempel
zu Die Endzeit Unix-Zeitstempel
Einzelheiten Anforderung von Daten für Symboldetails Die Anfrage, die vom FMZ Quant Trading Platform Backtesting System an die benutzerdefinierte Datenquelle gesendet wird, ist festgesetzt:detail=true
Gewohnheit Dieser Parameter kann ignoriert werden

Wenn die Datenquelle der Spot- und Futures-Börsenobjekte auf eine benutzerdefinierte Datenquelle (Feeder) eingestellt ist, sendet das Backtesting-System eine Anfrage an den benutzerdefinierten Datenquelle-Dienst:

http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Bitget&from=1351641600&period=86400000&round=true&symbol=BTC_USDT&to=1611244800&trades=1
http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_OKX&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.swap&to=1611244800&trades=1

Datenformat

Das zurückgegebene Format muss eines der folgenden zwei Formate sein (das vom System automatisch erkannt werden):

  • Simulationsstufe Tick, Folgendes ist ein Beispiel für JSON-Daten:

    {
        "detail": {
            "eid": "Binance",
            "symbol": "BTC_USDT",
            "alias": "BTCUSDT",
            "baseCurrency": "BTC",
            "quoteCurrency": "USDT",
            "marginCurrency": "USDT",
            "basePrecision": 5,
            "quotePrecision": 2,
            "minQty": 0.00001,
            "maxQty": 9000,
            "minNotional": 5,
            "maxNotional": 9000000,
            "priceTick": 0.01,
            "volumeTick": 0.00001,
            "marginLevel": 10
        },
        "schema":["time", "open", "high", "low", "close", "vol"],
        "data":[
            [1564315200000, 9531300, 9531300, 9497060, 9497060, 787],
            [1564316100000, 9495160, 9495160, 9474260, 9489460, 338]
        ]
    }
    
  • Hier ist ein Beispiel für JSON-Daten: Tick-Level-Backtestdaten (enhalten Informationen über die Markttiefe, und das Tiefenformat ist ein Array von[price, volume]Es kann mehrere Ebenen der Tiefe haben,asksfür Preiserhöhungsbestellungen,bidsfür die Preisnachlässigkeit).

    {
        "detail": {
            "eid": "Binance",
            "symbol": "BTC_USDT",
            "alias": "BTCUSDT",
            "baseCurrency": "BTC",
            "quoteCurrency": "USDT",
            "marginCurrency": "USDT",
            "basePrecision": 5,
            "quotePrecision": 2,
            "minQty": 0.00001,
            "maxQty": 9000,
            "minNotional": 5,
            "maxNotional": 9000000,
            "priceTick": 0.01,
            "volumeTick": 0.00001,
            "marginLevel": 10
        },
        "schema":["time", "asks", "bids", "trades", "close", "vol"],
        "data":[
            [1564315200000, [[9531300, 10]], [[9531300, 10]], [[1564315200000, 0, 9531300, 10]], 9497060, 787],
            [1564316100000, [[9531300, 10]], [[9531300, 10]], [[1564316100000, 0, 9531300, 10]], 9497060, 787]
        ]
    }
    
Feld Beschreibung
Einzelheiten Ausführliche Angaben zum angeforderten Datentyp,

einschließlich des Namens der Währung, des Namens der Handelswährung, Präzision, Mindestbestellmenge usw. Es gibt die Attribute der Spalten in den Daten an. Anschrift, die kleinbuchstabenempfindlich ist und nur zeitlich begrenzt ist, offen, Hoch, niedrig, dicht, vol, bittet, bietet, handelt Daten. Die Spaltenstruktur, aufgezeichnete Daten nach dem Schema. Einstellungen.

Detailfeld

Feld Beschreibung
Eid Exchange Id, bitte beachten Sie, dass die Spot- und Futures-
Einige Börsen haben unterschiedliche Eids.
Symbol Code des Handelsprodukts
Alias Das Symbol in der Umschaltung entspricht dem aktuellen
Code des Handelsprodukts
Basiswährung Handelswährung
ZitatWährung Währung
MargeWährung Margenwährung
BasisGenauigkeit Genauigkeit der Transaktionswährung
ZitatGenauigkeit Genauigkeit bei der Preisgestaltung
MinQty Mindestbestellmenge
maxQty Höchstbestellmenge
MinNotionale Mindestbestellbetrag
maxNationale Höchstbestellbetrag
PreisTick Preissprung
VolumenTick Mindeständerungswert der Auftragsmenge (ein Sprung in
Bestellmenge)
MarginEbene Futures mit Hebelwert
Vertrag Typ Für dauerhafte Verträge:swap, die

Das Backtest-System wird weiterhin die Finanzierungssätze und den Preisindex senden Bitte.

Spezielle Spaltenattributeasks, bids, trades:

Feld Beschreibung Anmerkungen
Anfragen / Angebote [Preis, Volumen],...] Die Daten in

DieLive Trading Level TickDatenbeispiel:[[9531300, 10]]Das ist ein sehr gutes Beispiel. Ich bin nicht derjenige, der das Problem hat, aber ich bin derjenige, der es hat. Die Daten in derLive Trading Level TickDatenbeispiel:[[1564315200000, 0, 9531300, 10]] |

Bei der Rückprüfung von Dauerverträgen an Futures-Börsen werden Datenquellen erfordern auch zusätzliche Finanzierungsrate und Preisdaten Das Backtesting-System wird weiterhin Anfragen senden. für Finanzierungsquoten nur, wenn die angeforderten Marktdaten zurückgegeben werden und das Detailfeld in der zurückgegebenen Struktur enthält die"contractType": "swap"Schlüssel-Wert-Paar.

Wenn das Backtesting-System Daten über die Förderquote erhält, wird es weiterhin Anfragen nach Preisindexdaten zu senden.

Die Datenstruktur der Förderquote ist wie folgt:

{
    "detail": {
        "eid": "Futures_Binance",
        "symbol": "BTC_USDT.funding",
        "alias": "BTC_USDT.funding",
        "baseCurrency": "BTC",
        "quoteCurrency": "USDT",
        "marginCurrency": "",
        "basePrecision": 8,
        "quotePrecision": 8,
        "minQty": 1,
        "maxQty": 10000,
        "minNotional": 1,
        "maxNotional": 100000000,
        "priceTick": 1e-8,
        "volumeTick": 1e-8,
        "marginLevel": 10
    },
    "schema": [
        "time",
        "open",
        "high",
        "low",
        "close",
        "vol"
    ],
    "data": [
        [
            1584921600000,
            -16795,
            -16795,
            -16795,
            -16795,
            0
        ],
        [
            1584950400000,
            -16294,
            -16294,
            -16294,
            -16294,
            0
        ]
        // ...
    ]
}
  • Das Intervall zwischen benachbarten Perioden beträgt 8 Stunden.
  • Zum Beispiel wird der Finanzierungsgrad von Binance alle 8 Stunden aktualisiert. Sind die Finanzierungsquoten -16795? Denn wie bei K-Liniendaten werden bei der Netzübertragung auch bei den Daten der Ganzzahltyp verwendet, um den Verlust der Schwingpunktgenauigkeit zu vermeiden; die Finanzierungsrate kann auch negativ sein.

Ein Beispiel für eine Anfrage nach Finanzierungsraten aus dem Backtesting Das System ist:

http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.funding&to=1611244800&trades=0

Die Datenstruktur für den Preisindex ist wie folgt:


{
    "detail": {
        "eid": "Futures_Binance",
        "symbol": "BTC_USDT.index",
        "alias": "BTCUSDT",
        "baseCurrency": "BTC",
        "quoteCurrency": "USDT",
        "contractType": "index",
        "marginCurrency": "USDT",
        "basePrecision": 3,
        "quotePrecision": 1,
        "minQty": 0.001,
        "maxQty": 1000,
        "minNotional": 0,
        "maxNotional": 1.7976931348623157e+308,
        "priceTick": 0.1,
        "volumeTick": 0.001,
        "marginLevel": 10,
        "volumeMultiple": 1
    },
    "schema": [
        "time",
        "open",
        "high",
        "low",
        "close",
        "vol"
    ],
    "data": [
        [1584921600000, 58172, 59167, 56902, 58962, 0],
        [1584922500000, 58975, 59428, 58581, 59154, 0],
        // ...
    ]
}

Beispiel für eine Anfrage nach Preisindexdaten, die durch das Backtesting gesendet wurde Das System ist:

http://customserver:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1351641600&period=86400000&round=true&symbol=BTC_USDT.index&to=1611244800&trades=0

Beispiel für benutzerdefinierte Datenquelle

Angabe der Datenquelle, z. B.http://120.24.2.20:9090/data. Das benutzerdefinierte Datenquelle-Dienstprogramm wird mitGolang:

package main

import (
    "fmt"
    "net/http"
    "encoding/json"
)

func Handle (w http.ResponseWriter, r *http.Request) {
    // e.g. set on backtest DataSourse: http://xxx.xx.x.xx:9090/data

    // request: GET http://xxx.xx.x.xx:9090/data?custom=0&depth=20&detail=true&eid=OKX&from=1584921600&period=86400000&round=true&symbol=BTC_USDT&to=1611244800&trades=1
    //              http://xxx.xx.x.xx:9090/data?custom=0&depth=20&detail=true&eid=Futures_Binance&from=1599958800&period=3600000&round=true&symbol=BTC_USDT.swap&to=1611244800&trades=0
    fmt.Println("request:", r)

    // response
    defer func() {
        // response data
        /* e.g. data
        {
            "detail": {
                "eid": "Binance",
                "symbol": "BTC_USDT",
                "alias": "BTCUSDT",
                "baseCurrency": "BTC",
                "quoteCurrency": "USDT",
                "marginCurrency": "USDT",
                "basePrecision": 5,
                "quotePrecision": 2,
                "minQty": 0.00001,
                "maxQty": 9000,
                "minNotional": 5,
                "maxNotional": 9000000,
                "priceTick": 0.01,
                "volumeTick": 0.00001,
                "marginLevel": 10
            },
            "schema": [
                "time",
                "open",
                "high",
                "low",
                "close",
                "vol"
            ],
            "data": [
                [1610755200000, 3673743, 3795000, 3535780, 3599498, 8634843151],
                [1610841600000, 3599498, 3685250, 3385000, 3582861, 8015772738],
                [1610928000000, 3582499, 3746983, 3480000, 3663127, 7069811875],
                [1611014400000, 3662246, 3785000, 3584406, 3589149, 7961130777],
                [1611100800000, 3590194, 3641531, 3340000, 3546823, 8936842292],
                [1611187200000, 3546823, 3560000, 3007100, 3085013, 13500407666],
                [1611273600000, 3085199, 3382653, 2885000, 3294517, 14297168405],
                [1611360000000, 3295000, 3345600, 3139016, 3207800, 6459528768],
                [1611446400000, 3207800, 3307100, 3090000, 3225990, 5797803797],
                [1611532800000, 3225945, 3487500, 3191000, 3225420, 8849922692]
            ]
        }
        */
        
        // /* Simulation level Tick
        ret := map[string]interface{}{
            "detail": map[string]interface{}{
                "eid": "Binance",
                "symbol": "BTC_USDT",
                "alias": "BTCUSDT",
                "baseCurrency": "BTC",
                "quoteCurrency": "USDT",
                "marginCurrency": "USDT",
                "basePrecision": 5,
                "quotePrecision": 2,
                "minQty": 0.00001,
                "maxQty": 9000,
                "minNotional": 5,
                "maxNotional": 9000000,
                "priceTick": 0.01,
                "volumeTick": 0.00001,
                "marginLevel": 10,
            },
            "schema": []string{"time","open","high","low","close","vol"},
            "data": []interface{}{
                []int64{1610755200000, 3673743, 3795000, 3535780, 3599498, 8634843151},  // 1610755200000 : 2021-01-16 08:00:00
                []int64{1610841600000, 3599498, 3685250, 3385000, 3582861, 8015772738},  // 1610841600000 : 2021-01-17 08:00:00
                []int64{1610928000000, 3582499, 3746983, 3480000, 3663127, 7069811875},
                []int64{1611014400000, 3662246, 3785000, 3584406, 3589149, 7961130777},
                []int64{1611100800000, 3590194, 3641531, 3340000, 3546823, 8936842292},
                []int64{1611187200000, 3546823, 3560000, 3007100, 3085013, 13500407666},
                []int64{1611273600000, 3085199, 3382653, 2885000, 3294517, 14297168405},
                []int64{1611360000000, 3295000, 3345600, 3139016, 3207800, 6459528768},
                []int64{1611446400000, 3207800, 3307100, 3090000, 3225990, 5797803797},
                []int64{1611532800000, 3225945, 3487500, 3191000, 3225420, 8849922692},
            },
        }
        // */

        /* Bot level Tick
        ret := map[string]interface{}{
            "detail": map[string]interface{}{
                "eid": "Binance",
                "symbol": "BTC_USDT",
                "alias": "BTCUSDT",
                "baseCurrency": "BTC",
                "quoteCurrency": "USDT",
                "marginCurrency": "USDT",
                "basePrecision": 5,
                "quotePrecision": 2,
                "minQty": 0.00001,
                "maxQty": 9000,
                "minNotional": 5,
                "maxNotional": 9000000,
                "priceTick": 0.01,
                "volumeTick": 0.00001,
                "marginLevel": 10,
            },
            "schema": []string{"time", "asks", "bids", "trades", "close", "vol"},
            "data": []interface{}{
                []interface{}{1610755200000, []interface{}{[]int64{9531300, 10}}, []interface{}{[]int64{9531300, 10}}, []interface{}{[]int64{1610755200000, 0, 9531300, 10}}, 9497060, 787},
                []interface{}{1610841600000, []interface{}{[]int64{9531300, 15}}, []interface{}{[]int64{9531300, 15}}, []interface{}{[]int64{1610841600000, 0, 9531300, 11}}, 9497061, 789},                
            },
        }
        */

        b, _ := json.Marshal(ret)
        w.Write(b)
    }()
}
func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

TeststrategieJavaScriptBeispiel:

/*backtest
start: 2021-01-16 08:00:00
end: 2021-01-22 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"OKX","currency":"BTC_USDT","feeder":"http://120.24.2.20:9090/data"}]
args: [["number",2]]
*/

function main() {
    var ticker = exchange.GetTicker()
    var records = exchange.GetRecords()
    Log(exchange.GetName(), exchange.GetCurrency())
    Log(ticker)
    Log(records)
}
Speichern von Einstellungen für Backtest Lokale Backtest-Engine