एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म का बैकटेस्टिंग सिस्टम कस्टम डेटा स्रोतों का समर्थन करता है, बैकटेस्टिंग सिस्टमGET
बैकटेस्ट के लिए बाहरी डेटा स्रोत प्राप्त करने के लिए एक कस्टम URL (सार्वजनिक रूप से सुलभ URL) का अनुरोध करने की विधि। अतिरिक्त अनुरोध मापदंड निम्नलिखित हैं:
पैरामीटर | अर्थ | स्पष्टीकरण |
---|---|---|
चिह्न | प्रतीक का नाम | स्पॉट बाजार के आंकड़े, जैसेःBTC_USDT , वायदा बाजार के आंकड़े, जैसेःBTC_USDT.swap , वायदा दीर्घकालिक अनुबंध वित्तपोषण दर डेटा, जैसेःBTC_USDT.funding , वायदा दीर्घकालिक अनुबंध मूल्य सूचकांक डेटा, जैसेःBTC_USDT.index |
ईद | आदान-प्रदान | जैसे कि OKX, Futures_OKX |
गोल | डेटा की सटीकता | सच का अर्थ है कि कस्टम डेटा स्रोत द्वारा वापस खिलाए गए डेटा में विशिष्ट परिशुद्धता को परिभाषित किया गया है। FMZ क्वांट ट्रेडिंग प्लेटफॉर्म बैकटेस्टिंग सिस्टम द्वारा कस्टम डेटा स्रोत को भेजे गए अनुरोध को इस प्रकार तय किया गया हैःround=true |
अवधि | के-लाइन डेटा अवधि (मिलीसेकंड) | जैसे:60000 एक मिनट की अवधि है |
गहराई | गहराई के स्तर | 1-20 |
व्यापार | डेटा को विभाजित करने की आवश्यकता है या नहीं | true(1) / false(0) |
से | प्रारंभ समय | यूनिक्स टाइमस्टैम्प |
तक | अंत का समय | यूनिक्स टाइमस्टैम्प |
विवरण | प्रतीक विवरण के लिए अनुरोधित डेटा | सच का अर्थ है कि इसे कस्टम डेटा स्रोत द्वारा प्रदान करने की आवश्यकता है. FMZ क्वांट ट्रेडिंग प्लेटफॉर्म बैकटेस्टिंग सिस्टम द्वारा कस्टम डेटा स्रोत को भेजे गए अनुरोध को इस प्रकार तय किया गया हैःdetail=true |
कस्टम | – | इस पैरामीटर को अनदेखा किया जा सकता है |
जब स्पॉट एक्सचेंज और फ्यूचर्स एक्सचेंज ऑब्जेक्ट्स का डेटा स्रोत एक कस्टम डेटा स्रोत (फीडर) पर सेट किया जाता है, तो बैकटेस्टिंग सिस्टम कस्टम डेटा स्रोत सेवा को अनुरोध भेजता हैः
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
लौटाया गया प्रारूप निम्नलिखित दो प्रारूपों में से एक होना चाहिए (जो प्रणाली द्वारा स्वचालित रूप से पहचाना जाएगा):
सिमुलेशन स्तर टिक, निम्नलिखित 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]
]
}
बॉट स्तर टिक, निम्नलिखित JSON डेटा का एक उदाहरण है:
टिक-लेवल बैकटेस्ट डेटा (बाजार की गहराई के बारे में जानकारी शामिल है, और गहराई प्रारूप एक सरणी है[price, volume]
इसमें गहराई के कई स्तर हो सकते हैं,asks
मूल्य वृद्धि क्रम के लिए,bids
मूल्य घटते क्रम के लिए) ।
{
"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]
]
}
क्षेत्र | विवरण |
---|---|
विवरण | अनुरोधित डेटा प्रकार की विस्तृत जानकारी, |
जिसमें मुद्रा का नाम, व्यापार मुद्रा, सटीकता, न्यूनतम आदेश मात्रा, आदि यह डेटा में स्तंभों के गुणों को निर्दिष्ट करता है array, जो केस संवेदनशील है और केवल समय के लिए सीमित है, खुला है, उच्च, निम्न, बंद, वॉल्यूम, पूछता है, बोली लगाता है, व्यापार करता है डेटा। स्तंभ संरचना, स्कीमा के अनुसार रिकॉर्ड किए गए डेटा सेटिंग्स.
विवरण क्षेत्र
क्षेत्र | विवरण |
---|---|
ईद | एक्सचेंज आईडी, कृपया ध्यान दें कि एक के स्पॉट और वायदा |
कुछ एक्सचेंजों में अलग-अलग ईड होते हैं। | |
चिह्न | व्यापारिक उत्पाद कोड |
उपनाम | विनिमय में वर्तमान के अनुरूप प्रतीक |
व्यापारिक उत्पाद कोड | |
आधार मुद्रा | व्यापार मुद्रा |
उद्धरणमुद्रा | मुद्रा |
मार्जिनमुद्रा | मार्जिन मुद्रा |
आधारसटीकता | लेनदेन मुद्रा की सटीकता |
उद्धरण सटीकता | मूल्य निर्धारण मुद्रा सटीकता |
मिनटी | न्यूनतम आदेश मात्रा |
अधिकतम मात्रा | अधिकतम आदेश मात्रा |
मिननोशनल | न्यूनतम आदेश राशि |
अधिकतम | अधिकतम आदेश राशि |
मूल्यचिह्न | मूल्य में वृद्धि |
मात्राचिह्नित करें | आदेश मात्रा का न्यूनतम परिवर्तन मूल्य (एक छलांग में) |
आदेश मात्रा) | |
मार्जिन स्तर | फ्यूचर्स लीवरेज वैल्यू |
अनुबंधप्रकार | दीर्घकालिक अनुबंधों के लिएःswap , |
बैकटेस्ट प्रणाली वित्त पोषण दर और मूल्य सूचकांक भेजने के लिए जारी रहेगा अनुरोध।
विशेष स्तंभ विशेषताएंasks
, bids
, trades
:
क्षेत्र | विवरण | टिप्पणी |
---|---|---|
पूछता है / बोली लगाता है | [मूल्य, मात्रा],...] | उदाहरण के लिए, |
दLive Trading Level Tick
डेटा उदाहरणः[[9531300, 10]]
∙
ट्रेडों के लिए।
उदाहरण के लिए,Live Trading Level Tick
डेटा उदाहरणः[[1564315200000, 0, 9531300, 10]]
|
फ्यूचर्स एक्सचेंजों पर स्थायी अनुबंधों का बैकटेस्ट करते समय, कस्टम
डेटा स्रोतों को भी अतिरिक्त वित्तपोषण दर और मूल्य डेटा की आवश्यकता होती है
बैकटेस्टिंग प्रणाली अनुरोधों को भेजना जारी रखेगी
वित्तपोषण दरों के लिए केवल जब अनुरोधित बाजार डेटा लौटाया जाता है
और लौटाया संरचना में विवरण क्षेत्र में शामिल है"contractType": "swap"
कुंजी-मूल्य जोड़ी।
जब बैकटेस्टिंग प्रणाली को वित्तपोषण दर के आंकड़े प्राप्त होते हैं, तो यह मूल्य सूचकांक के आंकड़ों के लिए अनुरोध भेजना जारी रखें।
वित्तपोषण दर डेटा संरचना इस प्रकार है:
{
"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
]
// ...
]
}
बैकटेस्टिंग से धन की दर डेटा अनुरोध का एक उदाहरण प्रणाली है:
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
मूल्य सूचकांक डेटा संरचना इस प्रकार है:
{
"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],
// ...
]
}
बैकटेस्टिंग द्वारा भेजे गए मूल्य सूचकांक डेटा अनुरोध का एक उदाहरण प्रणाली है:
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
डेटा स्रोत पता निर्दिष्ट करें, उदाहरण के लिए,http://120.24.2.20:9090/data
. कस्टम डेटा स्रोत सेवा कार्यक्रम का उपयोग कर लिखा गया हैGolang
:
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)
}
परीक्षण रणनीति,JavaScript
उदाहरण:
/*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)
}
बैकटेस्ट सेटिंग्स सहेजें
स्थानीय बैकटेस्ट इंजन