Sistem backtesting dari FMZ Quant Trading Platform mendukung sumber data khusus, sistem backtesting menggunakanGET
metode untuk meminta URL khusus (URL yang dapat diakses publik) untuk mendapatkan sumber data eksternal untuk backtest.
Parameter | Makna | Penjelasan |
---|---|---|
lambang | Nama Simbol | Data pasar spot, seperti:BTC_USDT , data pasar berjangka, seperti:BTC_USDT.swap , data tingkat pendanaan kontrak jangka panjang berjangka, seperti:BTC_USDT.funding , data indeks harga kontrak perpetual berjangka, seperti:BTC_USDT.index |
eid | Pertukaran | seperti OKX, Futures_OKX |
bulat | Keakuratan Data | Benar berarti bahwa presisi spesifik didefinisikan dalam data yang dikembalikan oleh sumber data kustom. Permintaan yang dikirim oleh FMZ Quant Trading Platform Backtesting System ke sumber data kustom ditetapkan sebagai:round=true |
periode | Periode data K-line (milisekund) | seperti:60000 adalah periode 1 menit |
kedalaman | Tingkat kedalaman | 1-20 |
perdagangan | Apakah Perlu Pembagian Data | benar (1) / salah (2) |
dari | Waktu Mulai | timestamp unix |
untuk | Waktu Akhir | timestamp unix |
detail | Permintaan data untuk rincian simbol | Benar berarti bahwa itu perlu disediakan oleh sumber data kustom. Permintaan yang dikirim oleh FMZ Quant Trading Platform Backtesting System ke sumber data kustom ditetapkan sebagai:detail=true |
adat | – | Parameter ini dapat diabaikan |
Ketika sumber data dari spot exchange dan obyek futures exchange diatur ke sumber data khusus (feeder), sistem backtesting mengirim permintaan ke layanan sumber data khusus:
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 harus salah satu dari dua format berikut (yang akan dikenali oleh sistem secara otomatis):
Tingkat 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]
]
}
Tick tingkat bot, berikut adalah contoh data JSON:
Tick-level backtest data (mengandung informasi tentang kedalaman pasar, dan format kedalaman adalah array[price, volume]
. Itu bisa memiliki beberapa tingkat kedalaman,asks
untuk urutan kenaikan harga,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 | Deskripsi |
---|---|
detail | Informasi rinci tentang jenis data yang diminta, |
termasuk nama mata uang denominasi, mata uang perdagangan, presisi, jumlah pesanan minimum, dll. Schema. Ini menentukan atribut kolom dalam data. array, yang sensitif huruf besar dan hanya terbatas pada waktu, terbuka, tinggi, rendah, dekat, volume, meminta, tawaran, perdagangan data. Struktur kolom, data yang tercatat sesuai dengan skema Pengaturan.
bidang detail
Lapangan | Deskripsi |
---|---|
eid | Exchange Id, harap dicatat bahwa spot dan berjangka dari |
Pertukaran tertentu memiliki eid yang berbeda. | |
lambang | Kode produk perdagangan |
alias | Simbol dalam pertukaran yang sesuai dengan saat ini |
Kode produk perdagangan | |
Mata uang dasar | Mata uang perdagangan |
Kutipan Mata uang | Mata Uang Denominasi |
marginMata uang | Mata uang margin |
dasarPrecision | Akurasi Mata Uang Transaksi |
QuotePrecision | Keakuratan Harga Mata Uang |
MinQty | Jumlah pesanan minimum |
maxQty | Jumlah pesanan maksimum |
MinNotional | Jumlah pesanan minimum |
Max Nominal | Jumlah pesanan maksimum |
hargaTick | Lonjakan Harga |
volumeTick | Nilai perubahan minimum dari jumlah pesanan (satu lompatan dalam |
jumlah pesanan) | |
marginLevel | Nilai Leverage Futures |
kontrakJenis | Untuk kontrak jangka panjang yang ditetapkan untuk:swap , yang |
sistem backtest akan terus mengirim tingkat pendanaan dan indeks harga permintaan.
Atribut kolom khususasks
, bids
, trades
:
Lapangan | Deskripsi | Pengamatan |
---|---|---|
permintaan / penawaran | [harga, volume],...] | Sebagai contoh, data di |
yangLive Trading Level Tick
Contoh data:[[9531300, 10]]
Percayalah.
{\fnCandara\fs55\b1\4cH000000\4aH80}tuk perdagangan {\fnCandara\fs55\b1\4cH000000\4aH80}untuk
contoh, data dalamLive Trading Level Tick
Contoh data:[[1564315200000, 0, 9531300, 10]]
|
Ketika backtesting kontrak abadi di bursa berjangka, kustom
sumber data juga membutuhkan data tingkat pendanaan tambahan dan harga
Sistem backtesting akan terus mengirim permintaan
untuk tingkat pendanaan hanya ketika data pasar yang diminta dikembalikan
dan bidang detail dalam struktur yang dikembalikan berisi"contractType": "swap"
Pasangan kunci-nilai.
Ketika sistem backtesting menerima data tingkat pendanaan, terus mengirimkan permintaan untuk data indeks harga.
Struktur data tingkat pendanaan adalah sebagai 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 tingkat pendanaan 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 sebagai 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 dikirim 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, misalnya,http://120.24.2.20:9090/data
. Program layanan sumber data khusus 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 pengujian,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 Pengaturan Backtest
Mesin Backtest Lokal