Tài nguyên đang được tải lên... tải...

Nguồn dữ liệu tùy chỉnh

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ụngGETPhươ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ư:60000là 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 dữ liệu

Đị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á,bidscho 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 TickVí 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 TickVí 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
        ]
        // ...
    ]
}
  • Khoảng thời gian giữa các giai đoạn liền kề là 8 giờ
  • Ví dụ, tỷ lệ tài trợ của Binance được cập nhật mỗi 8 giờ. Số liệu về tỷ lệ tài trợ là -16795? Bởi vì giống như dữ liệu đường K, để tránh mất độ chính xác dấu phẩy động trong quá trình truyền mạng, dữ liệu sử dụng kiểu nguyên số; dữ liệu tỷ lệ tài trợ cũng có thể là âm.

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

Ví dụ về nguồn dữ liệu tùy chỉnh

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,JavaScriptví 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