Hệ thống backtesting của nền tảng giao dịch FMZ Quant hỗ trợ các nguồn dữ liệu tùy chỉnh, hệ thống backtesting sử dụngGET
Phương pháp để yêu cầu một URL tùy chỉnh (URL có thể truy cập công khai) để lấy một nguồn dữ liệu bên ngoài cho backtest. Các tham số yêu cầu bổ sung là như sau:
Parameter | Ý nghĩa | Giải thích |
---|---|---|
biểu tượng | Tên biểu tượng | Dữ liệu thị trường giao ngay, chẳng hạn như:BTC_USDT , dữ liệu thị trường tương lai như:BTC_USDT.swap , dữ liệu tỷ lệ tài trợ hợp đồng vĩnh viễn tương lai, chẳng hạn như:BTC_USDT.funding , dữ liệu chỉ số giá hợp đồng tương lai vĩnh viễn, chẳng hạn như:BTC_USDT.index |
eid | Chuyển đổi | như OKX, Futures_OKX |
tròn | Sự chính xác của dữ liệu | True có nghĩa là độ chính xác cụ thể được xác định trong dữ liệu được cung cấp bởi nguồn dữ liệu tùy chỉnh. Yêu cầu được gửi bởi FMZ Quant Trading Platform Backtesting System đến nguồn dữ liệu tùy chỉnh được cố định là:round=true |
thời gian | Khoảng thời gian dữ liệu đường K (mi-lít giây) | như:60000 là khoảng thời gian 1 phút |
độ sâu | Mức độ sâu | 1-20 |
thương mại | Có cần chia dữ liệu hay không | true ((1) / false ((0) |
từ | Thời gian bắt đầu | Unix timestamp |
đến | Thời kỳ kết thúc | Unix timestamp |
chi tiết | Yêu cầu dữ liệu chi tiết biểu tượng | True có nghĩa là nó cần được cung cấp bởi một nguồn dữ liệu tùy chỉnh. Yêu cầu được gửi bởi FMZ Quant Trading Platform Backtesting System đến nguồn dữ liệu tùy chỉnh được cố định như sau:detail=true |
tùy chỉnh | – | Parameter này có thể bị bỏ qua |
Khi nguồn dữ liệu của các đối tượng giao dịch giao dịch tức thời và giao dịch tương lai được thiết lập cho một nguồn dữ liệu tùy chỉnh (feeder), hệ thống backtesting gửi yêu cầu đến dịch vụ nguồn dữ liệu tùy chỉnh:
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
Định dạng được trả về phải là một trong hai định dạng sau đây (mà sẽ được hệ thống nhận ra tự động):
Mức mô phỏng Tick, sau đây là một ví dụ về dữ liệu 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]
]
}
Đánh dấu mức độ bot, sau đây là một ví dụ về dữ liệu JSON:
Dữ liệu backtest Tick-level (có chứa thông tin về độ sâu của thị trường, và định dạng độ sâu là một mảng[price, volume]
Nó có thể có nhiều mức độ sâu,asks
đối với lệnh tăng giá,bids
cho thứ tự giảm giá).
{
"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]
]
}
Vùng | Mô tả |
---|---|
chi tiết | Thông tin chi tiết về kiểu dữ liệu được yêu cầu, |
bao gồm tên của đồng tiền, tên của Tiền tệ giao dịch, độ chính xác, số lượng đặt hàng tối thiểu, v.v. ∙ ∙ Nó xác định các thuộc tính của các cột trong dữ liệu mảng, mà là nhạy cảm với chữ cái lớn và chỉ giới hạn thời gian, mở, cao, thấp, gần, vol, hỏi, giá thầu, giao dịch Dữ liệu. Cấu trúc cột, dữ liệu được ghi theo sơ đồ cài đặt.
trường chi tiết
Vùng | Mô tả |
---|---|
eid | Exchange ID, xin lưu ý rằng chỗ và tương lai của một |
Một số giao dịch có những hiệu ứng khác nhau. | |
biểu tượng | Mã sản phẩm giao dịch |
tên giả | Biểu tượng trong trao đổi tương ứng với hiện tại |
Mã sản phẩm giao dịch | |
Tiền cơ bản | Tiền tệ giao dịch |
báo giáTiền tệ | Tiền tệ theo mệnh giá |
marginTiền tệ | Đồng tiền ký quỹ |
cơ sởChính xác | Chính xác tiền tệ giao dịch |
trích dẫnChính xác | Giá tiền tệ chính xác |
MinQty | Số lượng đặt hàng tối thiểu |
maxQty | Số lượng đặt hàng tối đa |
Tiêu chuẩn | Số lượng đơn đặt hàng tối thiểu |
maxThiên định | Số lượng đặt hàng tối đa |
giáTick | Giá tăng |
VolumeTick | Giá trị thay đổi tối thiểu của số lượng đơn đặt hàng (một bước nhảy vào |
số lượng đặt hàng) | |
marginLevel | Giá trị đòn bẩy tương lai |
hợp đồngLoại | Đối với các hợp đồng vĩnh viễn:swap , các |
hệ thống backtest sẽ tiếp tục gửi tỷ lệ tài trợ và chỉ số giá yêu cầu.
Các thuộc tính cột đặc biệtasks
, bids
, trades
:
Vùng | Mô tả | Nhận xét |
---|---|---|
yêu cầu / đề nghị | [giá, khối lượng],...] | Ví dụ, dữ liệu trong |
cácLive Trading Level Tick
Ví dụ dữ liệu:[[9531300, 10]]
Ừm.
Các giao dịch. Thời gian, hướng, giá, khối lượng.
ví dụ, dữ liệu trongLive Trading Level Tick
Ví dụ dữ liệu:[[1564315200000, 0, 9531300, 10]]
|
Khi backtesting hợp đồng vĩnh viễn trên sàn giao dịch tương lai, tùy chỉnh
Các nguồn dữ liệu cũng yêu cầu thêm dữ liệu về tỷ lệ tài trợ và giá
hệ thống backtesting sẽ tiếp tục gửi yêu cầu
Đối với tỷ lệ tài trợ chỉ khi dữ liệu thị trường được yêu cầu được trả lại
và trường chi tiết trong cấu trúc trả về chứa"contractType": "swap"
cặp giá trị khóa.
Khi hệ thống backtesting nhận được dữ liệu tỷ lệ tài trợ, nó sẽ tiếp tục gửi yêu cầu dữ liệu chỉ số giá.
Cấu trúc dữ liệu tỷ lệ tài trợ là như sau:
{
"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
]
// ...
]
}
Một ví dụ về yêu cầu dữ liệu tỷ lệ tài trợ từ backtesting hệ thống là:
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
Cấu trúc dữ liệu chỉ số giá như sau:
{
"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],
// ...
]
}
Một ví dụ về yêu cầu dữ liệu chỉ số giá được gửi bởi backtesting hệ thống là:
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
Xác định địa chỉ nguồn dữ liệu, ví dụ:http://120.24.2.20:9090/data
. Chương trình dịch vụ nguồn dữ liệu tùy chỉnh được viết bằng cách sử dụngGolang
:
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)
}
Chiến lược thử nghiệm,JavaScript
ví dụ:
/*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)
}
Lưu cài đặt Backtest
Local Backtest Engine