Sistem backtesting Platform Dagangan Kuantum FMZ menyokong sumber data tersuai, sistem backtesting menggunakanGET
kaedah untuk meminta URL tersuai (URL yang boleh diakses awam) untuk mendapatkan sumber data luaran untuk backtest. Parameter permintaan tambahan adalah seperti berikut:
Parameter | Makna | Penjelasan |
---|---|---|
simbol | Nama Simbol | Data pasaran spot, seperti:BTC_USDT , data pasaran niaga hadapan, seperti:BTC_USDT.swap , data kadar pembiayaan kontrak jangka panjang, seperti:BTC_USDT.funding , data indeks harga kontrak kekal niaga hadapan, seperti:BTC_USDT.index |
eid | Pertukaran | seperti OKX, Futures_OKX |
bulat | Ketepatan Data | Benar bermaksud bahawa ketepatan tertentu ditakrifkan dalam data yang dimasukkan kembali oleh sumber data tersuai.round=true |
tempoh | Tempoh data K-line (milisaat) | seperti:60000 adalah tempoh 1 minit |
kedalaman | Tahap Kedalaman | 1-20 |
perdagangan | Sama ada perlu untuk membahagikan data | benar(1) / salah(0) |
daripada | Masa Mula | cap masa unix |
kepada | Masa Akhir | cap masa unix |
butiran | Permintaan data untuk butiran simbol | Benar bermaksud bahawa ia perlu disediakan oleh sumber data tersuai. Permintaan yang dihantar oleh FMZ Quant Trading Platform Backtesting System ke sumber data tersuai ditetapkan sebagai:detail=true |
adat | – | Parameter ini boleh diabaikan |
Apabila sumber data objek pertukaran spot dan pertukaran niaga hadapan ditetapkan kepada sumber data tersuai (feeder), sistem backtesting menghantar permintaan kepada perkhidmatan sumber data tersuai:
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
Format yang dikembalikan mestilah salah satu daripada dua format berikut (yang akan dikenali oleh sistem secara automatik):
Tahap simulasi Tick, berikut adalah contoh data JSON:
{
"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]
]
}
Bot tahap centang, berikut adalah contoh data JSON:
Tick-level data backtest (mengandung maklumat mengenai kedalaman pasaran, dan format kedalaman adalah pelbagai[price, volume]
Ia boleh mempunyai pelbagai tahap kedalaman,asks
untuk pesanan harga yang semakin meningkat,bids
untuk urutan harga menurun).
{
"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]
]
}
Lapangan | Penerangan |
---|---|
butiran | Maklumat terperinci mengenai jenis data yang diminta, |
termasuk nama mata wang yang diisytiharkan, nama mata wang dagangan, ketepatan, kuantiti pesanan minimum, dan sebagainya. Schema. Ia menentukan sifat-sifat lajur dalam data array, yang sensitif huruf besar dan hanya terhad kepada masa, terbuka, tinggi, rendah, dekat, vol, meminta, tawaran, perdagangan Data. Struktur lajur, data yang direkodkan mengikut skema tetapan.
medan butiran
Lapangan | Penerangan |
---|---|
eid | ID Bursa, sila ambil perhatian bahawa tempat dan niaga hadapan |
Pertukaran tertentu mempunyai eid yang berbeza. | |
simbol | Kod produk dagangan |
nama samaran | Simbol dalam pertukaran yang sepadan dengan semasa |
Kod produk dagangan | |
Mata wang asas | Mata Wang Dagangan |
hargaCurrency | Mata wang yang ditandatangani |
MarginWaluta | Mata Wang Margin |
asasKetepatan | Keakuratan Mata Wang Transaksi |
QuotePrecision | Keakuratan Mata Wang Harga |
MinQty | Jumlah Perintah Minimum |
MaxQty | Jumlah Perintah Maksimum |
MinNotional | Jumlah Perintah Minimum |
maxNotional | Jumlah Perintah Maksimum |
hargaTick | Lonjakan Harga |
volumeTick | Nilai perubahan minimum kuantiti pesanan (satu lompatan dalam |
kuantiti pesanan) | |
marginLevel | Nilai Leverage Futures |
kontrakJenis | Untuk kontrak kekal yang ditetapkan untuk:swap , yang |
sistem backtest akan terus menghantar kadar pembiayaan dan indeks harga permintaan.
Atribut lajur khasasks
, bids
, trades
:
Lapangan | Penerangan | Catatan |
---|---|---|
permintaan / tawaran | [harga, jumlah],...] | Sebagai contoh, data dalam |
KesemuaLive Trading Level Tick
contoh data:[[9531300, 10]]
∙∙
Perdagangan. Waktu, Arah, Harga, Volume.
contohnya, data dalamLive Trading Level Tick
contoh data:[[1564315200000, 0, 9531300, 10]]
|
Apabila backtesting kontrak kekal di bursa niaga hadapan, adat
sumber data juga memerlukan data kadar pembiayaan tambahan dan harga
Sistem backtesting akan terus menghantar permintaan
untuk kadar pembiayaan hanya apabila data pasaran yang diminta dikembalikan
dan medan butiran dalam struktur yang dikembalikan mengandungi"contractType": "swap"
Pasangan kunci-nilai.
Apabila sistem backtesting menerima data kadar pembiayaan, ia akan terus menghantar permintaan untuk data indeks harga.
Struktur data kadar pembiayaan adalah seperti berikut:
{
"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
]
// ...
]
}
Contoh permintaan data kadar pembiayaan dari backtesting sistem adalah:
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
Struktur data indeks harga adalah seperti berikut:
{
"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],
// ...
]
}
Contoh permintaan data indeks harga yang dihantar oleh backtesting sistem adalah:
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
Tentukan alamat sumber data, contohnya,http://120.24.2.20:9090/data
. Program perkhidmatan sumber data tersuai ditulis menggunakanGolang
:
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)
}
Strategi ujian,JavaScript
contoh:
/*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)
}
Simpan Tetapan Backtest
Enjin Ujian Kembali Lokal