प्रस्तावना
इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म 9 वर्षों के तकनीकी पुनरावर्तन से गुजरा है और कई बार इसका पुनर्निर्माण किया गया है, हालांकि उपयोगकर्ताओं के रूप में हमने इस पर ध्यान नहीं दिया होगा। पिछले दो वर्षों में, प्लेटफ़ॉर्म ने उपयोगकर्ता अनुभव के संदर्भ में बहुत सारे अनुकूलन और उन्नयन किए हैं, जिसमें यूआई इंटरफ़ेस का व्यापक उन्नयन, आमतौर पर उपयोग किए जाने वाले मात्रात्मक ट्रेडिंग टूल को समृद्ध करना और अधिक बैकटेस्टिंग डेटा समर्थन जोड़ना शामिल है।
रणनीति डिजाइन को अधिक सुविधाजनक बनाने, ट्रेडिंग तर्क को स्पष्ट करने, तथा शुरुआती लोगों के लिए शुरुआत करना आसान बनाने के लिए, प्लेटफॉर्म ने रणनीति द्वारा उपयोग किए जाने वाले API इंटरफ़ेस को उन्नत किया। इन नई सुविधाओं को सक्षम करने के लिए अपने होस्ट के नवीनतम संस्करण का उपयोग करें। यह प्लेटफॉर्म पुराने इंटरफेस पर कॉल के साथ यथासंभव अधिकतम सीमा तक संगत बना हुआ है। इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म के API दस्तावेज़ में नई API इंटरफ़ेस सुविधाओं के बारे में जानकारी अपडेट कर दी गई है:
- वाक्यविन्यास गाइड: https://www.fmz.com/syntax-guide
- उपयोगकर्ता गाइड: https://www.fmz.com/user-guide
तो आइए एक नज़र डालते हैं कि किन इंटरफेस को अपग्रेड किया गया है और पुरानी रणनीतियों को वर्तमान API के साथ संगत बनाने के लिए किन बदलावों की आवश्यकता है।
1. नया API इंटरफ़ेस
एक्सचेंज.GetTickers फ़ंक्शन
बहु-विविधता रणनीतियों और पूर्ण बाजार स्थिति निगरानी रणनीतियों को डिजाइन करने के लिए। यह समेकित बाजार इंटरफेस रणनीतियों को विकसित करना आसान बनाने और पहिये का पुनःआविष्कार करने से बचने के लिए आवश्यक है। आविष्कारक का मात्रात्मक ट्रेडिंग प्लेटफॉर्म एक्सचेंजों के ऐसे API को समाहित करता है।
यदि एक्सचेंज में यह इंटरफ़ेस नहीं है (व्यक्तिगत एक्सचेंज), तो कॉल करेंexchange.GetTickers()एक त्रुटि संदेश रिपोर्ट किया जाएगा: समर्थित नहीं है.
इस फ़ंक्शन में कोई पैरामीटर नहीं है और यह एक्सचेंज के समेकित बाज़ार इंटरफ़ेस में सभी किस्मों का वास्तविक समय बाज़ार डेटा लौटाएगा। इसे सरलता से इस प्रकार समझा जा सकता है:
exchange.GetTickers()यह कार्य हैexchange.GetTicker()फ़ंक्शन का पूर्ण संस्करण (दोनों फ़ंक्शन नामों के बीच अंतर एकवचन और बहुवचन है)।
हम परीक्षण के लिए OKX स्पॉट सिमुलेशन वातावरण का उपयोग करते हैं:
javascript
function main() {
exchange.IO("simulate", true)
var tickers = exchange.GetTickers()
if (!tickers) {
throw "tickers error"
}
var tbl = {type: "table", title: "test tickers", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
for (var i in tickers) {
var ticker = tickers[i]
tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
}
LogStatus("`" + JSON.stringify(tbl) + "`")
return tickers.length
}
एक्सचेंज.क्रिएटऑर्डर फ़ंक्शन
नयाexchange.CreateOrder()इस उन्नयन का केन्द्र बिन्दु कार्य हैं।exchange.CreateOrder()फ़ंक्शन का सबसे महत्वपूर्ण कार्य फ़ंक्शन के पैरामीटर में ऑर्डर के प्रकार और दिशा को सीधे निर्दिष्ट करना है। इस तरह, यह अब मौजूदा सिस्टम सेटिंग्स जैसे ट्रेडिंग जोड़े, अनुबंध कोड, ट्रेडिंग निर्देश आदि पर निर्भर नहीं करता है।
बहु-उत्पाद ट्रेडिंग ऑर्डर परिदृश्यों और समवर्ती परिदृश्यों में डिज़ाइन की जटिलता बहुत कम हो जाती है।exchange.CreateOrder()फ़ंक्शन के चार पैरामीटर हैंsymbol、side、price、amount。
OKX फ्यूचर्स सिमुलेशन वातावरण का उपयोग करके परीक्षण करें:
javascript
function main() {
exchange.IO("simulate", true)
var id1 = exchange.CreateOrder("ETH_USDT.swap", "buy", 3300, 1)
var id2 = exchange.CreateOrder("BTC_USDC.swap", "closebuy", 70000, 1)
var id3 = exchange.CreateOrder("LTC_USDT.swap", "sell", 110, 1)
Log("id1:", id1, ", id2:", id2, ", id3:", id3)
}
इसमें केवल 3 बार समय लगाexchange.CreateOrder()फ़ंक्शन कॉल विभिन्न किस्मों और दिशाओं के तीन फ्यूचर ऑर्डर देता है।
एक्सचेंज.GetHistoryOrders फ़ंक्शन
नयाexchange.GetHistoryOrders()इस फ़ंक्शन का उपयोग किसी निश्चित उत्पाद के ऐतिहासिक लेनदेन ऑर्डर प्राप्त करने के लिए किया जाता है। इस फ़ंक्शन को एक्सचेंज इंटरफ़ेस के समर्थन की भी आवश्यकता होती है।
ऐतिहासिक आदेशों की जानकारी प्राप्त करने के लिए, विभिन्न एक्सचेंजों द्वारा क्रियान्वित इंटरफेस बहुत भिन्न होते हैं:
- कुछ पृष्ठांकित प्रश्नों का समर्थन करते हैं, जबकि अन्य नहीं करते हैं;
- कुछ एक्सचेंजों में क्वेरी विंडो अवधि होती है, अर्थात, N दिनों से पुराने ऑर्डर की क्वेरी नहीं की जा सकती;
- अधिकांश एक्सचेंज निर्दिष्ट समय पर क्वेरी करने का समर्थन करते हैं, लेकिन कुछ नहीं करते हैं;
ऐसे इंटरफेस को उच्चतम स्तर की अनुकूलता के साथ समाहित किया जाता है, तथा वास्तविक उपयोग में इस बात पर ध्यान दिया जाना चाहिए कि क्या वे रणनीति की आवश्यकताओं और अपेक्षाओं को पूरा करते हैं।
विस्तृत फ़ंक्शन विवरण यहां दोहराया नहीं गया है, आप API दस्तावेज़ में सिंटैक्स मैनुअल का संदर्भ ले सकते हैं:
https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders
बिनेंस स्पॉट ट्रेडिंग वातावरण का उपयोग करके परीक्षण किया गया:
javascript
function main() {
var orders = exchange.GetHistoryOrders("ETH_USDT")
// 写入图表
var tbl = {type: "table", title: "test GetHistoryOrders", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
for (var order of orders) {
tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
}
LogStatus("orders.length:", orders.length, "\n", "`" + JSON.stringify(tbl) + "`")
}
एक्सचेंज.गेटपोसिशन्स फ़ंक्शन
स्थिति डेटा अधिग्रहण फ़ंक्शन का पुराना संस्करण है:exchange.GetPosition(). फ़ंक्शन नामकरण शब्दार्थ से बेहतर मिलान के लिए, यह अपग्रेड स्थिति प्राप्त करने के लिए एक नया फ़ंक्शन जोड़ता है:exchange.GetPositions(). साथ ही, यह अभी भी GetPosition फ़ंक्शन के साथ संगत/उन्नत है।
ध्यान दें कि दोनों फ़ंक्शन नाम केवल अंतिम s से भिन्न हैं। चूँकि GetPositions अर्थपूर्ण रूप से अधिक सही है, इसलिए यह अनुशंसा की जाती है कि आप भविष्य में GetPositions का उपयोग करें।
exchange.GetPositions()फ़ंक्शन कॉल के तीन प्रकार हैं:
-
exchange.GetPositions()
जब कोई पैरामीटर पारित नहीं किया जाता है, तो वर्तमानट्रेडिंग जोड़े / अनुबंध कोडवर्तमान आयाम में सभी किस्मों की स्थिति डेटा का अनुरोध करें। -
exchange.GetPositions("ETH_USDT.swap")
विशिष्ट उत्पाद जानकारी निर्दिष्ट करते समय (ETH_USDT.swap प्रारूप FMZ प्लेटफ़ॉर्म द्वारा परिभाषित किया गया है), विशिष्ट उत्पाद के स्थिति डेटा का अनुरोध करें।
उदाहरण:BTC_USD.swap、ETH_USDT.swap、ETH_USDT.quarterइंतज़ार।
BTC_USD.swap: BTC का मुद्रा-आधारित सतत अनुबंध।
ETH_USDT.swap: ETH का U-आधारित सतत अनुबंध।
ETH_USDC.swap: ETH के लिए USDC-मार्जिन वाला सतत अनुबंध। (USDT के अतिरिक्त, आप अलग-अलग quoteCurrency भी निर्दिष्ट कर सकते हैं, जिसे यहां दोहराया नहीं जाएगा)
ETH_USDT.quarter: ETH का U-आधारित त्रैमासिक डिलीवरी अनुबंध।
BTC_USD.BTC-USD-201226-24250-C: बीटीसी सिक्का-मार्जिन विकल्प अनुबंध। -
exchange.GetPositions("USDT.swap")
निर्दिष्ट आयाम सीमा के अनुसार सभी प्रतीकों के लिए स्थिति डेटा का अनुरोध करें।
USDT.swap: यू-आधारित सतत अनुबंध रेंज।
USDT.futures: यू-आधारित डिलीवरी अनुबंधों की श्रेणी।
USDC.swap: USDC-मार्जिन सतत अनुबंध रेंज। (USDT के अतिरिक्त, आप अलग-अलग quoteCurrency भी निर्दिष्ट कर सकते हैं, जिसे यहां दोहराया नहीं जाएगा)
USDC.futures: USDC-मार्जिन वाले वायदा अनुबंधों की श्रेणी।
USD.swap: मुद्रा-आधारित सतत अनुबंध रेंज।
यूएसडी.फ्यूचर्स: मुद्रा-आधारित वायदा अनुबंधों की श्रेणी।
USDT.option: यू-आधारित विकल्प अनुबंध श्रेणी।
USD.option: मुद्रा-आधारित विकल्प अनुबंध श्रेणी।कुछ विशेष विनिमय अनुबंध आयाम प्रभाग:
USDT.futures_combo: Futures_Deribit एक्सचेंज का CFD संयोजन।
USD.futures_ff: फ्यूचर्स_क्रैकेन एक्सचेंज का मिश्रित मार्जिन डिलीवरी अनुबंध।
USD.swap_pf: फ्यूचर्स_क्रैकेन एक्सचेंज पर एक हाइब्रिड-मार्जिन सतत अनुबंध।उन आयामों के लिए जो एक्सचेंज API इंटरफ़ेस द्वारा समर्थित नहीं हैं, कॉल करते समय एक त्रुटि रिपोर्ट की जाएगी और एक शून्य मान लौटाया जाएगा।
OKX फ्यूचर्स सिमुलेशन वातावरण का उपयोग करके परीक्षण करें:
javascript
function main() {
exchange.IO("simulate", true)
exchange.SetCurrency("BTC_USDT")
exchange.SetContractType("swap")
var p1 = exchange.GetPositions()
var p2 = exchange.GetPositions("BTC_USDT.swap")
var tbls = []
for (var positions of [p1, p2]) {
var tbl = {type: "table", title: "test GetPosition/GetPositions", cols: ["Symbol", "Amount", "Price", "FrozenAmount", "Type", "Profit", "Margin", "ContractType", "MarginLevel"], rows: []}
for (var p of positions) {
tbl.rows.push([p.Symbol, p.Amount, p.Price, p.FrozenAmount, p.Type, p.Profit, p.Margin, p.ContractType, p.MarginLevel])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
}
आने परexchange.GetPositions()फ़ंक्शन के पैरामीटर हैंETH_USDT.swapजब आप ETH U-आधारित सतत अनुबंध का उपयोग करते हैं, तो आप ETH U-आधारित सतत अनुबंध का स्थिति डेटा प्राप्त कर सकते हैं।
जब आयातित न होexchange.GetPositions()जब फ़ंक्शन को पैरामीटर के रूप में उपयोग किया जाता है, तो एक्सचेंज पर सूचीबद्ध सभी यू-मार्जिन सतत अनुबंधों का स्थिति डेटा प्राप्त किया जा सकता है (क्योंकि वर्तमान ट्रेडिंग जोड़ी BTC_USDT है और अनुबंध स्वैप है, अनुरोध वर्तमान ट्रेडिंग जोड़ी पर आधारित है और अनुबंध आयाम सीमा)। यह कॉल करने के बराबर हैexchange.GetPositions("USDT.swap"), अनुरोध क्षेत्र निर्दिष्ट करें.
एक्सचेंज.गेटफंडिंग्स फ़ंक्शन
नव जोड़ा गया GetFundings फ़ंक्शन वायदा एक्सचेंजों पर सतत अनुबंधों की फंडिंग दर प्राप्त कर सकता है। फ़ंक्शन एक पैरामीटर प्रतीक लेता है. यह फ़ंक्शन फंडिंग संरचनाओं की एक सरणी लौटाता है।
- प्रतीक पैरामीटर निर्दिष्ट करें: निर्दिष्ट उत्पाद की फंडिंग दर सूचना संरचना सरणी (फ़ंडिंग सरणी) लौटाता है। प्रतीक पैरामीटर को GetOrders/GetPositions फ़ंक्शन के प्रतीक पैरामीटर के समान, एक सीमा पर सेट किया जा सकता है।
- प्रतीक पैरामीटर निर्दिष्ट किए बिना: वर्तमान आयाम के सभी उत्पाद डेटा को उस आयाम के अनुसार लौटाता है जहाँ वर्तमान ट्रेडिंग जोड़ी और अनुबंध कोड स्थित हैं। तंत्र GetOrders/GetPositions फ़ंक्शन के समान है।
- यदि एक्सचेंज को कोई विशिष्ट उत्पाद निर्दिष्ट करना है, तो प्रतीक पैरामीटर को पास करना होगा, अर्थात विशिष्ट उत्पाद का कोड, उदाहरण के लिए:
BTC_USDT.swap. यदि कोई पैरामीटर पास नहीं किया जाता है या फ़ंक्शन में कोई रेंज पास की जाती है, तो एक त्रुटि संदेश प्रदर्शित होगा जिसमें कहा जाएगा कि प्रतीक पैरामीटर समर्थित नहीं है।
2. एपीआई इंटरफ़ेस अपग्रेड
एक्सचेंज.GetTicker फ़ंक्शन
बाजार कार्यexchange.GetTicker()यह अपग्रेड मुख्य रूप से प्रतीक पैरामीटर जोड़ता है। इस फ़ंक्शन का उपयोग वर्तमान ट्रेडिंग जोड़ी और अनुबंध कोड की परवाह किए बिना, मापदंडों द्वारा निर्दिष्ट उत्पाद जानकारी के अनुसार सीधे बाजार डेटा का अनुरोध करने के लिए किया जा सकता है। कोड लेखन प्रक्रिया को सरल बनाता है. साथ ही, यह अभी भी पैरामीटर पास किए बिना कॉलिंग विधि के साथ संगत है, और सबसे बड़ी सीमा तक पुरानी प्लेटफ़ॉर्म रणनीतियों के साथ संगत है।
पैरामीटरsymbolविनिमय वस्तुओं के लिएexchangeस्पॉट/वायदा के लिए अलग-अलग प्रारूप हैं:
- स्पॉट एक्सचेंज ऑब्जेक्ट्स
प्रारूप इस प्रकार है:AAA_BBBAAA आधार मुद्रा, अर्थात् लेनदेन मुद्रा, का प्रतिनिधित्व करता है, तथा BBB उद्धरण मुद्रा, अर्थात् मूल्य निर्धारण मुद्रा का प्रतिनिधित्व करता है। सभी मुद्राओं के नाम बड़े अक्षरों में हैं।
उदाहरण के लिए: BTC_USDT स्पॉट ट्रेडिंग जोड़ी। - वायदा विनिमय वस्तुएँ
प्रारूप इस प्रकार है:AAA_BBB.XXX, AAA आधार मुद्रा, अर्थात् लेनदेन मुद्रा को दर्शाता है, BBB उद्धरण मुद्रा, अर्थात् मूल्य निर्धारण मुद्रा को दर्शाता है, तथा XXX अनुबंध कोड को दर्शाता है, जैसे कि सतत अनुबंध स्वैप। सभी मुद्रा नाम बड़े अक्षरों में हैं और अनुबंध कोड छोटे अक्षरों में हैं।
उदाहरण के लिए: BTC_USDT.swap, BTC का U-आधारित सतत अनुबंध।
बिनेंस फ्यूचर्स लाइव वातावरण का उपयोग करके परीक्षण किया गया:
javascript
var symbols = ["BTC_USDT.swap", "BTC_USDT.quarter", "BTC_USD.swap", "BTC_USD.next_quarter", "ETH_USDT.swap"]
function main() {
exchange.SetCurrency("ETH_USD")
exchange.SetContractType("swap")
var arr = []
var t = exchange.GetTicker()
arr.push(t)
for (var symbol of symbols) {
var ticker = exchange.GetTicker(symbol)
arr.push(ticker)
}
var tbl = {type: "table", title: "test GetTicker", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
for (var ticker of arr) {
tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
}
LogStatus("`" + JSON.stringify(tbl) + "`")
return arr
}
किसी निर्दिष्ट प्रतीक के लिए बाज़ार डेटा के बैच का अनुरोध करना बहुत सरल हो गया है।
एक्सचेंज.GetDepth फ़ंक्शन
GetTicker फ़ंक्शन के समानexchange.GetDepth()इस बार फ़ंक्शन एक प्रतीक पैरामीटर भी जोड़ता है। गहराई डेटा का अनुरोध करते समय सीधे प्रकार निर्दिष्ट करना संभव है।
बिनेंस फ्यूचर्स लाइव वातावरण का उपयोग करके परीक्षण किया गया:
javascript
function main() {
exchange.SetCurrency("LTC_USD")
exchange.SetContractType("swap")
Log(exchange.GetDepth())
Log(exchange.GetDepth("ETH_USDT.quarter"))
Log(exchange.GetDepth("BTC_USD.swap"))
}
एक्सचेंज.गेटट्रेड्स फ़ंक्शन
GetTicker फ़ंक्शन के समानexchange.GetTrades()इस बार फ़ंक्शन एक प्रतीक पैरामीटर भी जोड़ता है। बाजार लेनदेन डेटा का अनुरोध करते समय उत्पाद को सीधे निर्दिष्ट करना संभव है।
बिनेंस फ्यूचर्स लाइव वातावरण का उपयोग करके परीक्षण किया गया:
javascript
function main() {
var arr = []
var arrR = []
var symbols = ["LTC_USDT.swap", "ETH_USDT.quarter", "BTC_USD.swap"]
for (var symbol of symbols) {
var r = exchange.Go("GetTrades", symbol)
arrR.push(r)
}
for (var r of arrR) {
arr.push(r.wait())
}
var tbls = []
for (var i = 0; i < arr.length; i++) {
var trades = arr[i]
var symbol = symbols[i]
var tbl = {type: "table", title: symbol, cols: ["Time", "Amount", "Price", "Type", "Id"], rows: []}
for (var trade of trades) {
tbl.rows.push([trade.Time, trade.Amount, trade.Price, trade.Type, trade.Id])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
}
यह अपग्रेड इसके साथ भी संगत हैexchange.Go()जब फ़ंक्शन प्लेटफ़ॉर्म API इंटरफ़ेस को समवर्ती रूप से कॉल करता है, तो उत्पाद जानकारी निर्दिष्ट करने के लिए symbol पैरामीटर पास किया जाता है।
exchange.GetRecords फ़ंक्शन
इस बार GetRecords फ़ंक्शन को महत्वपूर्ण रूप से समायोजित किया गया है, साथ ही अनुरोधित K-लाइन डेटा की प्रकार जानकारी को सीधे निर्दिष्ट करने के लिए प्रतीक पैरामीटर का समर्थन भी किया गया है। K-लाइन अवधि निर्दिष्ट करने के लिए मूल अवधि पैरामीटर को बनाए रखा जाता है, और अनुरोध करते समय अपेक्षित K-लाइन लंबाई निर्दिष्ट करने के लिए एक सीमा पैरामीटर जोड़ा जाता है। यह GetRecords फ़ंक्शन के पुराने संस्करण के साथ भी संगत है जो केवल period पैरामीटर को पास करता है।
exchange.GetRecords()फ़ंक्शन को कैसे कॉल करें:
- exchange.GetRecords()
यदि कोई पैरामीटर निर्दिष्ट नहीं है, तो वर्तमान ट्रेडिंग जोड़ी/अनुबंध कोड के अनुरूप उत्पाद का K-लाइन डेटा अनुरोधित है। K-लाइन अवधि रणनीति बैकटेस्टिंग इंटरफ़ेस या वास्तविक ट्रेडिंग में सेट की गई डिफ़ॉल्ट K-लाइन अवधि है। - exchange.GetRecords(60 * 15)
जब केवल K-लाइन अवधि पैरामीटर निर्दिष्ट किया जाता है, तो वर्तमान ट्रेडिंग जोड़ी/अनुबंध कोड के अनुरूप उत्पाद का K-लाइन डेटा अनुरोध किया जाता है। - exchange.GetRecords("BTC_USDT.swap")
जब केवल उत्पाद जानकारी निर्दिष्ट की जाती है, तो निर्दिष्ट उत्पाद का K-लाइन डेटा अनुरोधित किया जाता है। K-लाइन अवधि रणनीति बैकटेस्टिंग इंटरफ़ेस या वास्तविक ट्रेडिंग में सेट की गई डिफ़ॉल्ट K-लाइन अवधि है। - exchange.GetRecords("BTC_USDT.swap", 60 * 60)
K-लाइन डेटा का अनुरोध करने के लिए उत्पाद जानकारी और विशिष्ट K-लाइन अवधि निर्दिष्ट करें। - exchange.GetRecords("BTC_USDT.swap", 60, 1000)
K-लाइन डेटा का अनुरोध करने के लिए उत्पाद जानकारी, विशिष्ट K-लाइन अवधि और वांछित K-लाइन लंबाई निर्दिष्ट करें।
ध्यान दें कि जब सीमा पैरामीटर एक्सचेंज से एकल अनुरोध की अधिकतम लंबाई से अधिक हो जाता है, तो एक पेजिंग अनुरोध उत्पन्न होगा (अर्थात एक्सचेंज K-लाइन इंटरफ़ेस पर एकाधिक कॉल)।
बिनेंस फ्यूचर्स लाइव वातावरण का उपयोग करके परीक्षण किया गया:
javascript
function main() {
exchange.SetCurrency("ETH_USDT")
exchange.SetContractType("swap")
var r1 = exchange.GetRecords()
var r2 = exchange.GetRecords(60 * 60)
var r3 = exchange.GetRecords("BTC_USDT.swap")
var r4 = exchange.GetRecords("BTC_USDT.swap", 60)
var r5 = exchange.GetRecords("LTC_USDT.swap", 60, 3000)
Log("r1相邻Bar时间差值:", r1[1].Time - r1[0].Time, "毫秒, Bar长度:", r1.length)
Log("r2相邻Bar时间差值:", r2[1].Time - r2[0].Time, "毫秒, Bar长度:", r2.length)
Log("r3相邻Bar时间差值:", r3[1].Time - r3[0].Time, "毫秒, Bar长度:", r3.length)
Log("r4相邻Bar时间差值:", r4[1].Time - r4[0].Time, "毫秒, Bar长度:", r4.length)
Log("r5相邻Bar时间差值:", r5[1].Time - r5[0].Time, "毫秒, Bar长度:", r5.length)
}
एक्सचेंज.GetOrders फ़ंक्शन
GetOrders फ़ंक्शन भी जोड़ता हैsymbolपैरामीटर्स, आप एक विशिष्ट उत्पाद निर्दिष्ट कर सकते हैं और उत्पाद के अधूरे ऑर्डर (लंबित ऑर्डर) की क्वेरी कर सकते हैं; आप निर्दिष्ट आयाम सीमा में सभी उत्पादों के अधूरे ऑर्डर (लंबित ऑर्डर) की भी क्वेरी कर सकते हैं।
exchange.GetOrders()फ़ंक्शन को निम्नलिखित तरीकों से बुलाया जा सकता है:
- exchange.GetOrders()
वायदा एक्सचेंजों के लिए: जब कोई पैरामीटर पारित नहीं किया जाता है, तो वर्तमानट्रेडिंग जोड़े / अनुबंध कोडवर्तमान आयाम सीमा में सभी प्रतीकों के लिए सभी खुले ऑर्डर (लंबित ऑर्डर) का अनुरोध करें।
स्पॉट एक्सचेंजों के लिए: जब कोई पैरामीटर पारित नहीं किया जाता है, तो सभी स्पॉट उत्पादों के सभी बकाया ऑर्डर (लंबित ऑर्डर) के लिए अनुरोध किया जाता है। - exchange.GetOrders("BTC_USDT.swap") या exchange.GetOrders("BTC_USDT")
वायदा एक्सचेंजों के लिए: exchange.GetOrders("BTC_USDT.swap") BTC के USDT-मार्जिन वाले सतत अनुबंध के लिए सभी अपूर्ण ऑर्डर (लंबित ऑर्डर) की जानकारी प्राप्त करने के लिए।
स्पॉट एक्सचेंजों के लिए: exchange.GetOrders("BTC_USDT"), BTC_USDT स्पॉट ट्रेडिंग जोड़ी के लिए सभी अपूर्ण ऑर्डर (लंबित ऑर्डर) की क्वेरी करें। - केवल वायदा एक्सचेंजों के लिए समर्थित है exchange.GetOrders("USDT.swap") निर्दिष्ट आयाम सीमा में सभी किस्मों के अपूर्ण ऑर्डर (लंबित ऑर्डर) का अनुरोध करें
आयाम विभाजन श्रेणी GetPositions फ़ंक्शन की श्रेणी के अनुरूप है।
उदाहरण के लिए: exchange.GetOrders("USDT.swap") USDT-मार्जिन वाले सतत अनुबंध श्रेणी में सभी किस्मों के सभी अधूरे ऑर्डर (लंबित ऑर्डर) का अनुरोध करता है।
OKX फ्यूचर्स सिमुलेशन वातावरण का उपयोग करके परीक्षण करें:
javascript
function main() {
exchange.IO("simulate", true)
exchange.SetCurrency("BTC_USDT")
exchange.SetContractType("swap")
// 写入图表
var tbls = []
for (var symbol of ["null", "ETH_USDT.swap", "USDT.swap"]) {
var tbl = {type: "table", title: symbol, cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
var orders = null
if (symbol == "null") {
orders = exchange.GetOrders()
} else {
orders = exchange.GetOrders(symbol)
}
for (var order of orders) {
tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
}
- जब कोई पैरामीटर पारित नहीं किया जाता है, तो वर्तमान ट्रेडिंग जोड़ी (BTC_USDT) और अनुबंध कोड (स्वैप) की आयाम सीमा में सभी किस्मों के अपूर्ण ऑर्डर (लंबित ऑर्डर) का अनुरोध किया जाता है।
- पैरामीटर निर्दिष्ट करना
ETH_USDT.swapपैरामीटर, ETH के USDT-मार्जिन वाले सतत अनुबंध के अपूर्ण ऑर्डर (लंबित ऑर्डर) का अनुरोध करें। - स्ट्रिंग में पास करना
"USDT.swap"USDT-मार्जिन वाले सतत अनुबंधों के सभी बकाया ऑर्डर (लंबित ऑर्डर) का अनुरोध करें।
एक्सचेंज.गेटपोजिशन फ़ंक्शन
यह अभी भी पुराने स्थिति अधिग्रहण फ़ंक्शन नामकरण के साथ संगत है, और प्रतीक पैरामीटर भी जोड़ता है, जो विशिष्ट अनुरोधित स्थिति डेटा की प्रकार जानकारी निर्दिष्ट कर सकता है। फ़ंक्शन उपयोग औरexchange.GetPositions()पूर्णतया सुसंगत.
exchange.IO फ़ंक्शन
के लिएexchange.IO("api", ...)सभी एक्सचेंज ऑब्जेक्ट्स के लिए संपूर्ण अनुरोध पते को सीधे पास करने में सहायता के लिए फ़ंक्शन कॉलिंग विधि को उन्नत किया गया है।
उदाहरण के लिए, यदि आप OKX इंटरफ़ेस को कॉल करना चाहते हैं:
GET https://www.okx.com /api/v5/account/max-withdrawal ccy: BTC
आधार पते पर सीधे लेखन का समर्थन करेंhttps://www.okx.com, IO फ़ंक्शन को कॉल करने से पहले आधार पता स्विच करने की कोई आवश्यकता नहीं है।
OKX फ्यूचर्स सिमुलेशन वातावरण का उपयोग करके परीक्षण करें:
javascript
function main() {
exchange.IO("simulate", true)
return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}
3. एपीआई इंटरफ़ेस प्रभाव
एक्सचेंज.GetOrder फ़ंक्शन
यह अपग्रेड मुख्य रूप से प्रभावित करता हैexchange.GetOrder(id)फ़ंक्शन पैरामीटरidआईडी पैरामीटर को मूल एक्सचेंज ऑर्डर आईडी से ट्रेडिंग विविधता वाले स्ट्रिंग प्रारूप में बदल दिया जाता है। FMZ प्लेटफॉर्म पर सभी पैकेज्ड ऑर्डर आईडी इसी प्रारूप में हैं।
उदाहरण के लिए:
- एक्सचेंज ऑर्डर में परिभाषित एक्सचेंज मूल ऑर्डर आईडी है:
123456
इस अपग्रेड से पहले, यदि आप GetOrder फ़ंक्शन को कॉल करना चाहते हैं, तो इसमें दिया गया ऑर्डर आईडी है123456。 - विनिमय आदेश में परिभाषित विनिमय-नामित उत्पाद प्रतीक:
BTC-USDT。
कृपया ध्यान दें कि यहां जो उल्लेख किया गया है वह एक्सचेंज द्वारा नामित ट्रेडिंग उत्पाद कोड है, न कि FMZ प्लेटफॉर्म द्वारा परिभाषित ट्रेडिंग जोड़ी।
इस उन्नयन के बाद,exchange.GetOrder(id)फ़ंक्शन को पास करने के लिए आवश्यक पैरामीटर आईडी का प्रारूप इस प्रकार समायोजित किया जाता है:BTC-USDT,123456。
-
सबसे पहले मैं आपको बता दूं कि यह डिज़ाइन क्यों किया गया है:
क्योंकि इस बार CreateOrder फ़ंक्शन को अपग्रेड किया गया है ताकि ऑर्डर देने के लिए सीधे उत्पाद को निर्दिष्ट किया जा सके (ऑर्डर किया गया उत्पाद वर्तमान में सेट किए गए ट्रेडिंग जोड़े और अनुबंध कोड से भिन्न हो सकता है), यदि लौटाए गए ऑर्डर आईडी में उत्पाद की जानकारी शामिल नहीं है। तब यह ऑर्डर आईडी उपलब्ध नहीं होगी. क्योंकि जब आप ऑर्डर की जांच करते हैं, तो आपको पता नहीं होता कि ऑर्डर किस प्रकार (अनुबंध) के लिए है। अधिकांश एक्सचेंजों को ऑर्डर की जांच और रद्द करते समय उत्पाद कोड का वर्णन करने वाले पैरामीटर निर्दिष्ट करने की आवश्यकता होती है। -
इस प्रभाव को कैसे समायोजित करें:
यदि आप ऑर्डर देने के लिए एक्सचेंज के ऑर्डर इंटरफेस को सीधे कॉल करने के लिए एक्सचेंज.आईओ फ़ंक्शन का उपयोग करते हैं, तो वापसी मूल्य में आमतौर पर एक्सचेंज का मूल प्रतीक (उत्पाद कोड) और मूल ऑर्डर आईडी शामिल होती है। फिर दोनों को अंग्रेजी अल्पविरामों से संयोजित करने पर आपको FMZ प्लेटफॉर्म द्वारा परिभाषित ऑर्डर आईडी मिल जाएगी।
इसी तरह, यदि आप ऑर्डर देने के लिए FMZ प्लेटफ़ॉर्म द्वारा एनकैप्सुलेट किए गए ऑर्डर इंटरफ़ेस का उपयोग करते हैं, तो चूंकि ऑर्डर आईडी की शुरुआत ट्रेडिंग उत्पाद कोड है, यदि आपको मूल ऑर्डर आईडी का उपयोग करने की आवश्यकता है, तो आपको केवल उत्पाद कोड को हटाने की आवश्यकता है और अल्पविराम.
एक्सचेंज.कैंसलऑर्डर फ़ंक्शन
यह अपग्रेड निम्न के लिए हैexchange.CancelOrder()कार्यों का प्रभाव औरexchange.GetOrder()कार्य समान हैं।
एक्सचेंज.खरीदें फ़ंक्शन
यह अपग्रेड निम्न के लिए हैexchange.Buy()कार्यों का प्रभाव औरexchange.GetOrder()कार्य समान हैं।exchange.Buy()फ़ंक्शन द्वारा लौटाई गई ऑर्डर आईडी एक नई संरचना है, उदाहरण के लिए, OKX एक्सचेंज पर फ्यूचर्स ऑर्डर देते समय लौटाई गई आईडी:LTC-USDT-SWAP,1578360858053058560。
एक्सचेंज.सेल फ़ंक्शन
यह अपग्रेड निम्न के लिए हैexchange.Sell()कार्यों का प्रभाव औरexchange.GetOrder()कार्य समान हैं।exchange.Sell()फ़ंक्शन द्वारा लौटाई गई ऑर्डर आईडी एक नई संरचना है, उदाहरण के लिए, OKX एक्सचेंज पर फ्यूचर्स ऑर्डर देते समय लौटाई गई आईडी:ETH-USDT-SWAP,1578360832820125696。
एक्सचेंज.गेटपोजिशन फ़ंक्शन
केवल फ्यूचर्स एक्सचेंज ऑब्जेक्ट ही इस फ़ंक्शन का समर्थन करते हैं। पोजीशन डेटा प्राप्त करने के लिए फ़ंक्शन एक्सचेंज.गेटपोसिशन() के लिए, एक नया नाम एक्सचेंज.गेटपोसिशन() जोड़ा गया है, और उनका व्यवहार बिल्कुल समान है।
पुरानी परिभाषा: exchange.GetPosition() फ़ंक्शन। जब किसी पैरामीटर को निर्दिष्ट किए बिना कॉल किया जाता है, तो यह वर्तमान ट्रेडिंग जोड़ी और अनुबंध कोड द्वारा निर्धारित विशिष्ट अनुबंध का स्थिति डेटा प्राप्त करता है।
समायोजन और संशोधन के बाद, नई परिभाषा है: एक्सचेंज.गेटपोजिशन() फ़ंक्शन। जब किसी पैरामीटर को निर्दिष्ट किए बिना कॉल किया जाता है, तो यह वर्तमान में सेट किए गए ट्रेडिंग जोड़े और अनुबंध कोड द्वारा निर्धारित आयाम सीमा में सभी किस्मों की स्थिति प्राप्त करता है।
उदाहरण के लिए, वर्तमान ट्रेडिंग जोड़ी BTC_USDT है और अनुबंध कोड स्वैप है। इस समय कॉल करें:
javascript
exchange.GetPosition() // 等价于调用 exchange.GetPosition("USDT.swap")
यह फ़ंक्शन सभी मुद्राओं के यू-मार्जिन सतत अनुबंधों की स्थिति डेटा का अनुरोध करेगा।
एक्सचेंज.GetOrders फ़ंक्शन
- स्पॉट एक्सचेंज के लिए:
पुरानी परिभाषा: exchange.GetOrders() फ़ंक्शन। जब किसी पैरामीटर को निर्दिष्ट किए बिना कॉल किया जाता है, तो यह वर्तमान ट्रेडिंग जोड़ी के लिए सभी बकाया ऑर्डर प्राप्त करता है।
समायोजन और संशोधन के बाद, नई परिभाषा है: एक्सचेंज.गेटऑर्डर्स() फ़ंक्शन। जब किसी पैरामीटर को निर्दिष्ट किए बिना कॉल किया जाता है, तो यह सभी स्पॉट ट्रेडिंग जोड़े के अधूरे ऑर्डर प्राप्त करता है।
- वायदा एक्सचेंजों के लिए:
पुरानी परिभाषा: exchange.GetOrders() फ़ंक्शन। जब किसी पैरामीटर को निर्दिष्ट किए बिना कॉल किया जाता है, तो यह वर्तमान ट्रेडिंग जोड़ी और अनुबंध कोड द्वारा निर्धारित विशिष्ट अनुबंध के सभी अधूरे ऑर्डर को पुनः प्राप्त करता है।
समायोजन और संशोधन के बाद, नई परिभाषा है: एक्सचेंज.गेटऑर्डर्स() फ़ंक्शन। जब किसी पैरामीटर को निर्दिष्ट किए बिना कॉल किया जाता है, तो यह वर्तमान में सेट ट्रेडिंग जोड़ी और अनुबंध कोड द्वारा निर्धारित आयाम सीमा में सभी अधूरे ऑर्डर प्राप्त करता है।
उदाहरण के लिए, वर्तमान ट्रेडिंग जोड़ी BTC_USD है और अनुबंध कोड क्वार्टर है। इस समय कॉल करें:
javascript
exchange.GetOrders() // 等价于调用 exchange.GetOrders("USD.futures")
यह फ़ंक्शन सभी सिक्का-मार्जिन वायदा अनुबंधों के बकाया ऑर्डर डेटा का अनुरोध करेगा।
4. संरचनात्मक समायोजन
टिकर संरचना
यह अद्यतन टिकर संरचना में एक प्रतीक फ़ील्ड जोड़ता है, जो वर्तमान टिकर संरचना के उत्पाद की बाज़ार जानकारी रिकॉर्ड करता है। इस क्षेत्र का प्रारूप हैexchange.GetTicker()फ़ंक्शन का प्रतीक पैरामीटर प्रारूप बिल्कुल समान है।
आदेश संरचना
यह अपडेट ऑर्डर संरचना में एक प्रतीक फ़ील्ड जोड़ता है। इस फ़ील्ड का प्रारूप समान हैexchange.GetTicker()फ़ंक्शन का प्रतीक पैरामीटर प्रारूप बिल्कुल समान है। यह अद्यतन उत्पाद जानकारी और मूल ऑर्डर जानकारी को नए ऑर्डर ID प्रारूप में रिकॉर्ड करने के लिए ऑर्डर संरचना के Id फ़ील्ड को भी संशोधित करता है। को देखेंexchange.GetOrder()फ़ंक्शन में ऑर्डर आईडी का विवरण यहां दोहराया नहीं जाएगा।
पद संरचना
यह अपडेट स्थिति संरचना में एक प्रतीक फ़ील्ड जोड़ता है। इस फ़ील्ड का प्रारूप समान हैexchange.GetTicker()फ़ंक्शन का प्रतीक पैरामीटर प्रारूप बिल्कुल समान है।
वित्तपोषण संरचना
GetFundings फ़ंक्शन फंडिंग संरचनाओं की एक सरणी लौटाता है।
{
"Info": {...}, // 交易所资金费率接口原始应答数据
"Symbol": "BTC_USDT.swap", // FMZ平台定义的品种名称
"Interval": 28800000, // 8小时间隔,单位毫秒
"Time": 1729728000000, // 本期资金费率收取时间
"Rate": 0.0001, // 资金费率,即 0.01 %
}
5. बैकटेस्टिंग प्रणाली
उपयोगकर्ता की ज़रूरतों को पूरा करने के लिए, यह अपग्रेड सबसे पहले वास्तविक बाज़ार के साथ संगत होगा, और बैकटेस्टिंग सिस्टम को एक सप्ताह के भीतर अनुकूलित किया जाएगा। यदि व्यक्तिगत रणनीति कोड प्रभावित होते हैं, तो कृपया परिवर्तन और अनुकूलन करने के लिए इस लेख में दिए गए निर्देशों का पालन करें
प्लेटफ़ॉर्म रणनीति API इंटरफ़ेस अपग्रेड के अनुसार, प्लेटफ़ॉर्म के बैकटेस्टिंग सिस्टम में API इंटरफ़ेस को समकालिक रूप से अपडेट किया गया है; इसके अतिरिक्त, बैकटेस्टिंग सिस्टम ने इसके लिए समर्थन जोड़ा है:
- अधिक एक्सचेंज बैकटेस्टिंग डेटा का समर्थन करें।
- सभी प्रकार के एक्सचेंजों के डेटा का बैकटेस्टिंग का समर्थन करता है।
- यू-आधारित, मुद्रा-आधारित डिलीवरी और सतत अनुबंधों का मिश्रित व्यापार।
- वायदा विनिमय ऑब्जेक्ट बैकटेस्टिंग के दौरान ट्रेडिंग जोड़े को स्विच करने का समर्थन करते हैं।
- बैकटेस्टिंग प्रणाली GetTickers फ़ंक्शन और GetMarkets फ़ंक्शन जैसे नए फ़ंक्शनों के लिए समर्थन जोड़ती है।
पूरक अद्यतन
1. खाता संरचना में इक्विटी और यूपीएनएल फ़ील्ड जोड़े गए
वायदा विनिमय वस्तुओं के लिए सदस्य फ़ंक्शनGetAccountवापस करनाAccountसंरचना को क्षेत्रों के साथ विस्तारित किया गया है।
- Equity
वर्तमान मार्जिन परिसंपत्ति मुद्रा की कुल इक्विटी। कुछ वायदा एक्सचेंजों को छोड़कर जो इस फ़ील्ड का समर्थन नहीं करते हैं, अधिकांश एक्सचेंज इस फ़ील्ड का समर्थन करते हैं। मुख्य रूप से वास्तविक समय खाता मार्जिन लाभ और हानि की गणना करने के लिए उपयोग किया जाता है। - UPnL
वर्तमान मार्जिन एसेट मुद्रा में धारित सभी स्थितियों का अवास्तविक लाभ और हानि। अधिकांश वायदा एक्सचेंज इस फ़ील्ड का समर्थन करते हैं, सिवाय कुछ के जो इसका समर्थन नहीं करते हैं।
2. SetMarginLevel फ़ंक्शन प्रतीक पैरामीटर समर्थन को अपग्रेड करता है
वायदा विनिमय ऑब्जेक्ट के सदस्य फ़ंक्शन SetMarginLevel को पैरामीटर प्रतीक जोड़ने के लिए अपग्रेड किया गया है।
परीक्षण उदाहरण:
javascript
function main() {
exchange.SetCurrency("ETH_USDT")
exchange.SetContractType("swap")
// 当前交易对为ETH_USDT,合约代码为swap,设置杠杆值为10
exchange.SetMarginLevel(10)
// 直接指定交易对BTC_USDT,合约代码swap,设置杠杆值20
exchange.SetMarginLevel("BTC_USDT.swap", 20)
}
3. GetMarkets फ़ंक्शन द्वारा लौटाए गए मार्केट स्ट्रक्चर में CtValCcy फ़ील्ड जोड़ें
- फ़ील्ड
CtValCcyकिसी अनुबंध की मूल्य इकाई रिकॉर्ड करें। किसी अनुबंध की मूल्य इकाई हो सकती है: BTC, USD, ETH, आदि। - फ़ील्ड
CtValएक्सचेंज पर इस ट्रेडिंग उत्पाद के एक अनुबंध का मूल्य, इकाइयों में रिकॉर्ड करेंCtValCcyफ़ील्ड रिकॉर्ड की मुद्रा. उदाहरण के लिए:CtVal0.01 है,CtValCcy"बीटीसी" का अर्थ है कि एक अनुबंध का मूल्य 0.01 बीटीसी है।
您好,订单ID这个是迫不得已的改动,因为升级了直接指定品种下单,订单ID中就必须包含品种信息,否则无法确定这个订单是哪个品种的,在撤单的时候无法调用(因为大多数交易所撤单的时候需要指定品种,并且指定ID)。
您说的下单后缀信息不显示,是指:exchange.Buy(price, amount, extMsg1, extMsg2)调用时,extMsg1, extMsg2 不在日志上显示吗?
- 1















