संसाधन लोड हो रहा है... लोड करना...

एफएमजेड क्वांट एपीआई उन्नयन का विस्तृत विवरणः रणनीति डिजाइन अनुभव में सुधार

लेखक:FMZ~Lydia, बनाया गयाः 2024-07-05 09:44:08, अद्यतनः 2024-09-20 08:52:30

[TOC]

img

प्रस्तावना

9 वर्षों के तकनीकी पुनरावृत्ति के बाद, एफएमजेड क्वांट ट्रेडिंग प्लेटफ़ॉर्म को कई बार पुनर्निर्माण किया गया है, हालांकि उपयोगकर्ताओं के रूप में हमने इसे नोटिस नहीं किया हो सकता है। पिछले दो वर्षों में, प्लेटफ़ॉर्म ने उपयोगकर्ता अनुभव के मामले में बहुत सारे अनुकूलन और अपग्रेड किए हैं, जिसमें यूआई इंटरफ़ेस का व्यापक उन्नयन, आम तौर पर उपयोग किए जाने वाले मात्रात्मक ट्रेडिंग टूल का संवर्धन और अधिक बैकटेस्टिंग डेटा समर्थन शामिल है।

रणनीति डिजाइन को अधिक सुविधाजनक बनाने के लिए, ट्रेडिंग लॉजिक को स्पष्ट और शुरुआती लोगों के लिए शुरू करना आसान बनाने के लिए, मंच ने रणनीति द्वारा उपयोग किए जाने वाले एपीआई इंटरफ़ेस को अपग्रेड किया है। नवीनतम संस्करण का उपयोग करने वाले डॉकर इन नई सुविधाओं को सक्षम कर सकते हैं। मंच अभी भी सबसे बड़ी हद तक पुराने इंटरफ़ेस कॉल के साथ संगत है। एपीआई इंटरफ़ेस की नई सुविधाओं के बारे में जानकारी एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म के एपीआई दस्तावेज में अपडेट की गई हैः

सिंटैक्स गाइडःhttps://www.fmz.com/syntax-guideउपयोगकर्ता गाइडःhttps://www.fmz.com/user-guide

तो चलिए एक त्वरित नज़र डालते हैं कि कौन से इंटरफेस को अपग्रेड किया गया है और मौजूदा एपीआई के साथ संगत बनाने के लिए पुरानी रणनीतियों का उपयोग करने के लिए क्या बदलाव की आवश्यकता है।

1. नया एपीआई इंटरफ़ेस

एक्सचेंज.GetTickers फ़ंक्शन जोड़ा गया

बहु-उत्पाद रणनीतियों और पूर्ण बाजार निगरानी रणनीतियों के डिजाइन के लिए, समग्र बाजार इंटरफ़ेस आवश्यक है। रणनीति को विकसित करने में आसान बनाने और घटनाओं को फिर से आविष्कार करने से बचने के लिए, एफएमजेड क्वांट ट्रेडिंग प्लेटफॉर्म इस प्रकार के एक्सचेंज एपीआई को शामिल करता है।

यदि एक्सचेंज में यह इंटरफेस नहीं है (व्यक्तिगत एक्सचेंज), तो कॉल करते समयexchange.GetTickers(), एक त्रुटि संदेश प्रदर्शित होता हैः समर्थित नहीं है.

इस फ़ंक्शन में कोई पैरामीटर नहीं है और यह एक्सचेंज के एकत्रित बाजार इंटरफ़ेस में सभी किस्मों के वास्तविक समय के बाजार डेटा को लौटाएगा। इसे बस इस प्रकार समझा जा सकता हैः

exchange.GetTickers()function के पूर्ण विशेषताओं के अनुरोध संस्करण हैexchange.GetTicker()कार्य (ध्यान से देखो, इन दो कार्य नामों के बीच अंतर केवल एकवचन और बहुवचन है) ।

हम परीक्षण के लिए ओकेएक्स स्पॉट सिमुलेशन वातावरण का उपयोग करते हैंः

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
}

img

एक्सचेंज.CreateOrder फ़ंक्शन जोड़ा गया

हाल ही में जोड़ा गयाexchange.CreateOrder()कार्य इस उन्नयन का ध्यान केंद्रित है।exchange.CreateOrder()इस प्रकार, यह अब वर्तमान ट्रेडिंग जोड़ी, अनुबंध कोड, ट्रेडिंग दिशा और सिस्टम की अन्य सेटिंग्स पर निर्भर नहीं है।

मल्टी-स्पेस ट्रेडिंग ऑर्डर प्लेसमेंट परिदृश्यों और समवर्ती परिदृश्यों में, डिजाइन जटिलता काफी कम हो जाती है।exchange.CreateOrder()कार्य हैंsymbol, side, price, amount.

ओकेएक्स वायदा अनुकरण वातावरण का प्रयोग करके परीक्षणः

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)
}

img

इस तरह, केवल तीनexchange.CreateOrder()विभिन्न किस्मों और दिशाओं के तीन वायदा आदेशों को रखने के लिए फ़ंक्शन कॉल का उपयोग किया गया था।

एक्सचेंज.GetHistoryOrders फ़ंक्शन जोड़ा गया

हाल ही में जोड़ा गयाexchange.GetHistoryOrders()एक निश्चित प्रकार के ऐतिहासिक लेनदेन आदेश प्राप्त करने के लिए कार्य का उपयोग किया जाता है। कार्य को विनिमय इंटरफ़ेस के समर्थन की भी आवश्यकता होती है।

ऐतिहासिक आदेशों की क्वेरी के लिए, विभिन्न एक्सचेंजों द्वारा लागू इंटरफेस बहुत भिन्न होते हैंः

  • कुछ पृष्ठित प्रश्नों का समर्थन करते हैं, जबकि अन्य नहीं करते हैं;
  • कुछ एक्सचेंजों में क्वेरी विंडो अवधि होती है, अर्थात एन दिनों से अधिक पुराने ऑर्डर क्वेरी नहीं किए जा सकते।
  • अधिकतर एक्सचेंजों में निर्दिष्ट समय पर क्वेरी करना समर्थित है, लेकिन कुछ ऐसा नहीं करते हैं; इस तरह के इंटरफेस को उच्चतम स्तर की संगतता के साथ कैप्चर किया जाता है, और वास्तविक उपयोग में, इस बात पर ध्यान दिया जाना चाहिए कि क्या वे रणनीति की आवश्यकताओं और अपेक्षाओं को पूरा करते हैं।

विस्तृत फ़ंक्शन विवरण यहाँ दोहराया नहीं है, आप एपीआई प्रलेखन में वाक्य रचना मैनुअल का संदर्भ ले सकते हैंः

https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders

बिनेंस स्पॉट ट्रेडिंग वातावरण का उपयोग करके परीक्षण किया गयाः

function main() {
    var orders = exchange.GetHistoryOrders("ETH_USDT")

    // Write to chart
    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) +  "`")
}

img

एक्सचेंज.GetPositions फ़ंक्शन जोड़ा गया

स्थिति डेटा अधिग्रहण कार्य का पुराना संस्करण हैexchange.GetPosition(). यह उन्नयन फ़ंक्शन नामकरण अर्थशास्त्र से बेहतर मेल खाने के लिए एक नया स्थिति अधिग्रहण फ़ंक्शन जोड़ता हैःexchange.GetPositions()साथ ही, यह अभी भी GetPosition फ़ंक्शन के साथ संगत/अपग्रेड है।

ध्यान दें कि दो फ़ंक्शन नाम केवल अंतिम s द्वारा भिन्न होते हैं। क्योंकि GetPositions अधिक अर्थपूर्ण रूप से सही है, इसलिए भविष्य में GetPositions का उपयोग करने की सिफारिश की जाती है।

..exchange.GetPositions()फ़ंक्शन के तीन कॉल रूप होते हैंः

  • विनिमय.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 का यू-आधारित स्थायी अनुबंध। ETH_USDT.quarter: ETH का U-आधारित त्रैमासिक वितरण अनुबंध। BTC_USD.BTC-USD-201226-24250-C: BTC सिक्का आधारित विकल्प अनुबंध।

  • exchange.GetPositions ((USDT.swap) निर्दिष्ट आयाम सीमा के अनुसार सभी उत्पादों के लिए स्थिति डेटा का अनुरोध करें। USDT.swap: यू-आधारित स्थायी अनुबंध सीमा। USDT.futures: U-आधारित वितरण अनुबंध सीमा। USD.swap: सिक्का आधारित स्थायी अनुबंध सीमा। USD.futures: सिक्का आधारित वितरण अनुबंध सीमा। USDT.option: U-आधारित विकल्प अनुबंध सीमा। USD.option: सिक्का आधारित विकल्प अनुबंध सीमा।

    कुछ विशेष विनिमय अनुबंध आयाम विभागः USDT.futures_combo: फ्यूचर्स_डेरबिट एक्सचेंज का स्प्रेड संयोजन अनुबंध। USD.futures_ff: फ्यूचर्स_Kraken exchange का मिश्रित मार्जिन वितरण अनुबंध। USD.swap_pf: फ्यूचर्स_क्रैकेन एक्सचेंज का मिश्रित मार्जिन स्थायी अनुबंध। उन आयामों के लिए जो एक्सचेंज एपीआई इंटरफेस द्वारा समर्थित नहीं हैं, एक त्रुटि की सूचना दी जाएगी और कॉल करते समय शून्य मान लौटाया जाएगा.

ओकेएक्स वायदा अनुकरण वातावरण का प्रयोग करके परीक्षणः

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) +  "`")
}

img

जब पैरामीटर पारित किया गया थाexchange.GetPositions()कार्य हैETH_USDT.swap, ETH के यू-आधारित स्थायी अनुबंध के स्थिति डेटा प्राप्त किए जा सकते हैं।

जब पैरामीटरexchange.GetPositions()कार्य में पारित नहीं होते हैं, एक्सचेंज पर सूचीबद्ध सभी यू-आधारित स्थायी अनुबंधों के स्थिति डेटा प्राप्त किया जा सकता है (क्योंकि वर्तमान ट्रेडिंग जोड़ी BTC_USDT है और अनुबंध स्वैप है, अनुरोध वर्तमान ट्रेडिंग जोड़ी और अनुबंध आयाम सीमा पर आधारित है) । यह कॉल करने के बराबर हैexchange.GetPositions("USDT.swap")और अनुरोध सीमा निर्दिष्ट करें।

2. एपीआई इंटरफ़ेस उन्नयन

अद्यतन विनिमय.GetTicker फ़ंक्शन

बाजार के कार्य का मुख्य उन्नयनexchange.GetTicker()यह फ़ंक्शन को वर्तमान ट्रेडिंग जोड़ी और अनुबंध कोड के बिना पैरामीटर द्वारा निर्दिष्ट उत्पाद जानकारी के अनुसार सीधे बाजार डेटा का अनुरोध करने की अनुमति देता है। यह कोड लेखन प्रक्रिया को सरल बनाता है। साथ ही, यह अभी भी पैरामीटर पास किए बिना कॉल विधि के साथ संगत है, और पुराने प्लेटफॉर्म रणनीति के साथ सबसे अधिक हद तक संगत है।

पैरामीटरsymbolएक्सचेंज ऑब्जेक्ट के लिए स्पॉट/फ्यूचर्स के लिए अलग-अलग प्रारूप हैंexchange:

  • स्पॉट विनिमय वस्तु प्रारूप इस प्रकार हैःAAA_BBB, एएए बेस करेंसी यानी ट्रेडिंग करेंसी और बीबीबी कोट करेंसी यानी प्राइसिंग करेंसी का प्रतिनिधित्व करता है। करेंसी के नाम सभी बड़े अक्षरों में लिखे गए हैं। उदाहरण के लिएः BTC_USDT स्पॉट ट्रेडिंग जोड़ी।
  • फ्यूचर्स एक्सचेंज का उद्देश्य प्रारूप इस प्रकार हैःAAA_BBB.XXX, एएए बेस करेंसी, यानी ट्रेडिंग करेंसी का प्रतिनिधित्व करता है, बीबीबी कोट करेंसी, यानी मूल्य निर्धारण करेंसी का प्रतिनिधित्व करता है, और XXX अनुबंध कोड का प्रतिनिधित्व करता है, जैसे कि स्थायी अनुबंध स्वैप। मुद्रा नाम सभी बड़े अक्षरों में हैं, और अनुबंध कोड छोटे अक्षरों में हैं। उदाहरण के लिएः BTC_USDT.swap, BTC का U-आधारित स्थायी अनुबंध। बिनेंस फ्यूचर्स लाइव वातावरण का उपयोग करके परीक्षण किया गयाः
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
}

img

किसी विशिष्ट प्रतीक के लिए बाजार डेटा के एक बैच का अनुरोध करना बहुत सरल हो गया है।

अद्यतन विनिमय.GetDepth फ़ंक्शन

GetTicker फ़ंक्शन के समान,exchange.GetDepth()function भी एक प्रतीक पैरामीटर जोड़ता है. यह हमें गहराई डेटा का अनुरोध करते समय सीधे प्रतीक निर्दिष्ट करने की अनुमति देता है.

बिनेंस फ्यूचर्स लाइव वातावरण का उपयोग करके परीक्षण किया गयाः

function main() {
    exchange.SetCurrency("LTC_USD")
    exchange.SetContractType("swap")

    Log(exchange.GetDepth())
    Log(exchange.GetDepth("ETH_USDT.quarter"))
    Log(exchange.GetDepth("BTC_USD.swap"))
}

img

अद्यतन विनिमय.GetTrades फ़ंक्शन

GetTicker फ़ंक्शन के समान,exchange.GetTrades()function एक प्रतीक पैरामीटर भी जोड़ता है। यह हमें बाजार लेनदेन डेटा का अनुरोध करते समय सीधे प्रतीक निर्दिष्ट करने की अनुमति देता है।

बिनेंस फ्यूचर्स लाइव वातावरण का उपयोग करके परीक्षण किया गयाः

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) +  "`")
}

img

यह उन्नयन प्रतीक पैरामीटर द्वारा निर्दिष्ट के साथ भी संगत हैexchange.Go()जब प्लेटफ़ॉर्म एपीआई इंटरफेस को एक साथ बुलाया जाता है।

अद्यतन विनिमय.GetRecords फ़ंक्शन

GetRecords फ़ंक्शन को इस बार काफी समायोजित किया गया है। अनुरोधित K-लाइन डेटा की प्रकार जानकारी को सीधे निर्दिष्ट करने के लिए प्रतीक पैरामीटर का समर्थन करने के अलावा, मूल अवधि पैरामीटर को K-लाइन अवधि को निर्दिष्ट करने के लिए बरकरार रखा गया है, और अनुरोध करते समय अपेक्षित K-लाइन लंबाई को निर्दिष्ट करने के लिए एक सीमा पैरामीटर जोड़ा गया है। साथ ही, यह GetRecords फ़ंक्शन के पुराने संस्करण के साथ भी संगत है जो केवल अवधि पैरामीटर में गुजरता है।

कॉल करने की विधिexchange.GetRecords()कार्य है:

  • विनिमय.GetRecords() यदि कोई पैरामीटर निर्दिष्ट नहीं है, तो वर्तमान ट्रेडिंग जोड़ी/कॉन्ट्रैक्ट कोड के अनुरूप उत्पाद के के-लाइन डेटा का अनुरोध किया जाता है। के-लाइन अवधि रणनीति बैकटेस्टिंग इंटरफ़ेस या लाइव ट्रेडिंग में सेट डिफ़ॉल्ट के-लाइन अवधि है।
  • विनिमय.GetRecords ((60 * 15) जब केवल K-लाइन अवधि पैरामीटर निर्दिष्ट किया जाता है, तो वर्तमान ट्रेडिंग जोड़ी/कॉन्ट्रैक्ट कोड के अनुरूप उत्पाद के K-लाइन डेटा का अनुरोध किया जाता है।
  • exchange.GetRecords ((BTC_USDT.swap) जब केवल उत्पाद की जानकारी निर्दिष्ट की जाती है, तो निर्दिष्ट उत्पाद के के-लाइन डेटा का अनुरोध किया जाता है। के-लाइन अवधि रणनीति बैकटेस्टिंग इंटरफ़ेस या लाइव ट्रेडिंग में सेट डिफ़ॉल्ट के-लाइन अवधि है।
  • exchange.GetRecords ((BTC_USDT.swap, 60 * 60) उत्पाद की जानकारी और विशिष्ट K-लाइन अवधि निर्दिष्ट करें K-लाइन डेटा का अनुरोध करने के लिए।
  • exchange.GetRecords ((BTC_USDT.swap, 60, 1000) उत्पाद की जानकारी निर्दिष्ट करें, विशिष्ट K-लाइन अवधि निर्दिष्ट करें, और K-लाइन डेटा का अनुरोध करने के लिए अपेक्षित K-लाइन लंबाई निर्दिष्ट करें। ध्यान दें कि जब सीमा पैरामीटर एक्सचेंज से एकल अनुरोध की अधिकतम लंबाई से अधिक हो जाता है, तो एक पेजिंग अनुरोध उत्पन्न होगा (यानी एक्सचेंज के-लाइन इंटरफ़ेस पर कई कॉल) ।

बिनेंस फ्यूचर्स लाइव वातावरण का उपयोग करके परीक्षण किया गयाः

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 time difference between adjacent bars:", r1[1].Time - r1[0].Time, "Milliseconds, Bar length:", r1.length)
    Log("r2 time difference between adjacent bars:", r2[1].Time - r2[0].Time, "Milliseconds, Bar length:", r2.length)
    Log("r3 time difference between adjacent bars:", r3[1].Time - r3[0].Time, "Milliseconds, Bar length:", r3.length)
    Log("r4 time difference between adjacent bars:", r4[1].Time - r4[0].Time, "Milliseconds, Bar length:", r4.length)
    Log("r5 time difference between adjacent bars:", r5[1].Time - r5[0].Time, "Milliseconds, Bar length:", r5.length)
}

img

अद्यतन विनिमय.GetOrders फ़ंक्शन

GetOrders फ़ंक्शन भी जोड़ता हैsymbolमापदंडों, जो एक विशिष्ट प्रतीक निर्दिष्ट करने के लिए इस्तेमाल किया जा सकता है और उस प्रतीक के अधूरे आदेशों (लंबित आदेशों) की क्वेरी; यह भी निर्दिष्ट आयाम सीमा में सभी प्रतीकों के अधूरे आदेशों (लंबित आदेशों) की क्वेरी का समर्थन करता है।

..exchange.GetOrders()फ़ंक्शन को निम्नलिखित तरीकों से बुलाया जा सकता हैः

  • विनिमय.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) यू-आधारित स्थायी अनुबंध सीमा में सभी किस्मों के सभी बकाया आदेशों (लंबित आदेशों) का अनुरोध करता है।

ओकेएक्स वायदा अनुकरण वातावरण का प्रयोग करके परीक्षणः

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    // Write to chart
    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-आधारित स्थायी अनुबंधों के अधूरे आदेशों (लंबित आदेशों) का अनुरोध किया जाता है।

अद्यतन विनिमय.GetPosition फ़ंक्शन

यह अभी भी पुराने स्थिति अधिग्रहण फ़ंक्शन नामकरण के साथ संगत है, और प्रतीक पैरामीटर भी जोड़ता है, जो विशिष्ट अनुरोधित स्थिति डेटा की प्रकार जानकारी निर्दिष्ट कर सकता है। इस फ़ंक्शन का उपयोग बिल्कुल वैसा ही है जैसा किexchange.GetPositions().

अद्यतन करेंexchange.IOकार्य

के लिएexchange.IO("api", ...)फ़ंक्शन कॉल, सभी एक्सचेंज ऑब्जेक्ट्स को पूर्ण अनुरोध पते के प्रत्यक्ष पासिंग का समर्थन करने के लिए अपग्रेड किया गया है। उदाहरण के लिए, यदि आप OKX इंटरफ़ेस कॉल करना चाहते हैंः

// प्राप्त करेंhttps://www.okx.com/api/v5/account/max-withdrawal ccy: BTC

आधार पते पर प्रत्यक्ष लेखन का समर्थन करता हैhttps://www.okx.comबिना आधार पते को पहले स्विच करने और फिर IO फ़ंक्शन को कॉल करने के लिए।

ओकेएक्स वायदा अनुकरण वातावरण का प्रयोग करके परीक्षणः

function main() {
    exchange.IO("simulate", true)

    return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}

img

3. एपीआई इंटरफेस प्रभाव

Exchange.GetOrder फ़ंक्शन को प्रभावित करता है

यह उन्नयन मुख्य रूप से पैरामीटर को प्रभावित करता हैidकेexchange.GetOrder(id)id पैरामीटर को मूल विनिमय आदेश id से बदलकर स्ट्रींग प्रारूप में बदल दिया जाता है जिसमें ट्रेडिंग उत्पाद होता है। एफएमजेड प्लेटफॉर्म पर सभी ऑर्डर आईडी इस प्रारूप में हैं।

उदाहरण के लिए:

  • विनिमय आदेश में परिभाषित विनिमय के मूल आदेश की आईडी हैः123456इस उन्नयन से पहले, यदि आप GetOrder फ़ंक्शन को कॉल करना चाहते हैं, तो आदेश आईडी में पारित किया जाता है123456.
  • विनिमय आदेश में परिभाषित विनिमय द्वारा नामित उत्पाद कोडःBTC-USDT. ध्यान दें कि यह एक्सचेंज द्वारा नामित ट्रेडिंग उत्पाद कोड को संदर्भित करता है, FMZ प्लेटफॉर्म द्वारा परिभाषित ट्रेडिंग जोड़ी को नहीं।

इस उन्नयन के बाद, पैरामीटर आईडी का प्रारूप जिसे पास करने की आवश्यकता हैexchange.GetOrder(id)कार्य को निम्नानुसार समायोजित किया जाता हैःBTC-USDT,123456.

सबसे पहले, मुझे यह समझाने दो कि यह डिजाइन क्यों किया गया है: क्योंकि CreateOrder फ़ंक्शन को ऑर्डर के प्रकार को सीधे निर्दिष्ट करने के लिए अपग्रेड किया गया है (आदेश का प्रकार वर्तमान में सेट ट्रेडिंग जोड़ी और अनुबंध कोड से अलग हो सकता है) । यदि लौटाए गए ऑर्डर आईडी में प्रकार की जानकारी नहीं है, तो यह ऑर्डर आईडी अनुपयोगी होगी। क्योंकि ऑर्डर की जांच करते समय, हमें नहीं पता कि ऑर्डर किस प्रकार (अनुबंध) के लिए है। अधिकांश एक्सचेंजों को ऑर्डर की जांच और रद्द करते समय प्रकार कोड का वर्णन करने वाले मापदंडों के विनिर्देश की आवश्यकता होती है।

इस प्रभाव के साथ संगत कैसे हो: यदि आपexchange.IOऑर्डर देने के लिए सीधे एक्सचेंज ऑर्डर इंटरफेस को कॉल करने के लिए फ़ंक्शन, रिटर्न वैल्यू में आम तौर पर एक्सचेंज का मूल प्रतीक (उत्पाद कोड) और मूल ऑर्डर आईडी होता है। फिर दोनों को अंग्रेजी अल्पविराम के साथ जोड़ना ऑर्डर आईडी होगा जो एफएमजेड प्लेटफॉर्म की परिभाषा का अनुपालन करता है। इसी प्रकार, यदि आप आदेश देने के लिए FMZ प्लेटफॉर्म कैप्सुलेटेड ऑर्डर इंटरफ़ेस का उपयोग करते हैं, क्योंकि ऑर्डर आईडी की शुरुआत ट्रेडिंग उत्पाद कोड है, यदि आपको मूल ऑर्डर आईडी का उपयोग करने की आवश्यकता है, तो बस उत्पाद कोड और अल्पविराम हटा दें।

विनिमय को प्रभावित करता है.ऑर्डर फ़ंक्शन रद्द करें

इस उन्नयन का प्रभावexchange.CancelOrder()कार्य के रूप में ही हैexchange.GetOrder() function.

विनिमय.खरीद कार्य को प्रभावित करता है

इस उन्नयन का प्रभावexchange.Buy()कार्य के रूप में ही हैexchange.GetOrder()कार्य। आदेश आईडी द्वारा लौटायाexchange.Buy()कार्य एक नई संरचना है, उदाहरण के लिए, OKX एक्सचेंज पर वायदा आदेश रखने पर लौटा दी गई आईडी हैःLTC-USDT-SWAP,1578360858053058560.

विनिमय को प्रभावित करता है।

इस उन्नयन का प्रभावexchange.Sell()कार्य के रूप में ही हैexchange.GetOrder()कार्य। आदेश आईडी द्वारा लौटायाexchange.Sell()कार्य एक नई संरचना है, उदाहरण के लिए, OKX एक्सचेंज पर वायदा आदेश रखने पर लौटा दी गई आईडी हैःETH-USDT-SWAP,1578360832820125696.

विनिमय.GetPosition फ़ंक्शन को प्रभावित करता है

केवल फ्यूचर्स एक्सचेंज ऑब्जेक्ट ही इस फ़ंक्शन का समर्थन करते हैं। स्थिति डेटा प्राप्त करने के लिए exchange.GetPosition() फ़ंक्शन के लिए, एक नया exchange.GetPositions() नाम जोड़ा जाता है, और दोनों व्यवहार बिल्कुल समान हैं।

पुरानी परिभाषाः exchange.GetPosition() फ़ंक्शन, जब किसी भी पैरामीटर को निर्दिष्ट किए बिना बुलाया जाता है, तो वर्तमान ट्रेडिंग जोड़ी और अनुबंध कोड द्वारा निर्धारित विशिष्ट अनुबंध के स्थिति डेटा प्राप्त करता है। समायोजन और संशोधन के बाद, नई परिभाषाः exchange.GetPosition() फ़ंक्शन, जब किसी भी पैरामीटर को निर्दिष्ट किए बिना बुलाया जाता है, तो वर्तमान सेट ट्रेडिंग जोड़ी और अनुबंध कोड द्वारा निर्धारित आयाम सीमा में सभी किस्मों की स्थिति प्राप्त करता है।

उदाहरण के लिए, वर्तमान ट्रेडिंग जोड़ी BTC_USDT है और अनुबंध कोड स्वैप है। इस समय, कॉल करेंः

exchange.GetPosition() // Equivalent to calling exchange.GetPosition("USDT.swap")

यह फ़ंक्शन सभी मुद्राओं के यू-आधारित स्थायी अनुबंधों के स्थिति डेटा का अनुरोध करेगा।

विनिमय.GetOrders समारोह को प्रभावित करता है

  1. स्पॉट एक्सचेंजों के लिए:

पुरानी परिभाषाः exchange.GetOrders() फ़ंक्शन, जब किसी भी पैरामीटर को निर्दिष्ट किए बिना बुलाया जाता है, तो वर्तमान ट्रेडिंग जोड़ी के सभी अधूरे आदेश प्राप्त करता है। समायोजन और संशोधन के बाद, नई परिभाषा हैः exchange.GetOrders() फ़ंक्शन, जब किसी भी पैरामीटर को निर्दिष्ट किए बिना बुलाया जाता है, तो सभी स्पॉट ट्रेडिंग जोड़े के अधूरे आदेश प्राप्त करता है।

  1. फ्यूचर्स एक्सचेंजों के लिए:

पुरानी परिभाषाः exchange.GetOrders() फ़ंक्शन, जब किसी भी पैरामीटर को निर्दिष्ट किए बिना बुलाया जाता है, तो वर्तमान ट्रेडिंग जोड़ी और अनुबंध कोड द्वारा निर्धारित विशिष्ट अनुबंध के सभी अधूरे आदेश प्राप्त करता है। समायोजन और संशोधन के बाद, नई परिभाषा हैः exchange.GetOrders() फ़ंक्शन, जब किसी भी पैरामीटर को निर्दिष्ट किए बिना बुलाया जाता है, तो वर्तमान ट्रेडिंग जोड़ी और अनुबंध कोड द्वारा निर्धारित आयाम सीमा के सभी अधूरे आदेश प्राप्त करता है।

उदाहरण के लिए, वर्तमान ट्रेडिंग जोड़ी BTC_USD है और अनुबंध कोड तिमाही है। इस समय, कॉल करेंः

exchange.GetOrders()   // Equivalent to calling exchange.GetOrders("USD.futures")

यह फ़ंक्शन सभी सिक्का आधारित वायदा अनुबंधों के बकाया ऑर्डर डेटा का अनुरोध करेगा।

4. संरचनात्मक समायोजन

टिकर संरचना

यह अद्यतन टिकर संरचना में एक प्रतीक क्षेत्र जोड़ता है, जो वर्तमान टिकर संरचना की बाजार जानकारी को रिकॉर्ड करता है। इस फ़ील्ड का प्रारूप प्रतीक पैरामीटर प्रारूप के समान ही हैexchange.GetTicker() function.

आदेश संरचना

यह अद्यतन आदेश संरचना के लिए एक प्रतीक क्षेत्र जोड़ता है, और इस क्षेत्र का प्रारूप प्रतीक पैरामीटर प्रारूप के समान हैexchange.GetTicker()कार्य। यह अद्यतन ऑर्डर संरचना के आईडी क्षेत्र को भी संशोधित करता है, नए ऑर्डर आईडी प्रारूप में उत्पाद जानकारी और मूल ऑर्डर जानकारी को रिकॉर्ड करता है।exchange.GetOrder()कार्य, जो यहाँ दोहराया नहीं जाएगा।

पद संरचना

यह अद्यतन स्थिति संरचना के लिए एक प्रतीक क्षेत्र जोड़ता है. इस क्षेत्र का प्रारूप प्रतीक पैरामीटर प्रारूप के समान ही हैexchange.GetTicker() function.

5. बैकटेस्टिंग प्रणाली

प्लेटफ़ॉर्म रणनीति एपीआई इंटरफ़ेस अपग्रेड के अनुसार, प्लेटफ़ॉर्म की बैकटेस्टिंग प्रणाली को सिंक्रोनस रूप से अपडेट किया गया है; इसके अलावा, बैकटेस्टिंग प्रणाली में निम्नलिखित के लिए समर्थन जोड़ा गया हैः

  • अधिक एक्सचेंज बैकटेस्टिंग डेटा का समर्थन करता है.
  • सभी प्रकार के एक्सचेंजों के लिए बैकटेस्टिंग डेटा का समर्थन करता है.
  • यू-आधारित, मुद्रा-आधारित वितरण और स्थायी अनुबंध के लिए मिश्रित व्यापार।
  • फ्यूचर्स एक्सचेंज ऑब्जेक्ट बैकटेस्टिंग के दौरान ट्रेडिंग जोड़े स्विच करने का समर्थन करते हैं।

अतिरिक्त अद्यतन

1. खाता संरचना में नए क्षेत्र इक्विटी और यूपीएनएल

कृषि क्षेत्रAccountसंरचना द्वारा लौटायाGetAccountफ्यूचर्स एक्सचेंज ऑब्जेक्ट के सदस्य समारोह का विस्तार किया गया है।

  • इक्विटी वर्तमान मार्जिन परिसंपत्ति मुद्रा की कुल इक्विटी। कुछ वायदा एक्सचेंजों को छोड़कर जो इस फ़ील्ड का समर्थन नहीं करते हैं, अधिकांश एक्सचेंजों का समर्थन करते हैं। इसका उपयोग मुख्य रूप से वास्तविक समय खाते के मार्जिन लाभ और हानि की गणना करने के लिए किया जाता है।

  • यूपीएनएल वर्तमान मार्जिन परिसंपत्ति मुद्रा में रखे गए सभी पदों का अव्यवस्थित लाभ और हानि। अधिकांश वायदा विनिमय इस क्षेत्र का समर्थन करते हैं, कुछ को छोड़कर जो नहीं करते हैं।

2. SetMarginLevel फ़ंक्शन को प्रतीक पैरामीटर का समर्थन करने के लिए उन्नत किया गया

फ्यूचर्स एक्सचेंज ऑब्जेक्ट के सदस्य फ़ंक्शन SetMarginLevel को अपग्रेड किया गया है और पैरामीटर प्रतीक जोड़ा गया है।

परीक्षण उदाहरणः

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    // The current trading pair is ETH_USDT, the contract code is swap, and the leverage value is set to 10
    exchange.SetMarginLevel(10)
    
    // Directly specify the trading pair BTC_USDT, contract code swap, and set the leverage value to 20
    exchange.SetMarginLevel("BTC_USDT.swap", 20)
}

3. GetMarkets फ़ंक्शन द्वारा लौटाया गया बाजार संरचना में CtValCcy फ़ील्ड जोड़ा गया

क्षेत्रCtValCcyकिसी अनुबंध की मूल्य इकाई दर्ज करता है। किसी अनुबंध की मूल्य इकाई हो सकती हैः BTC, USD, ETH, आदि। क्षेत्रCtValएक्सचेंज पर ट्रेड किए जाने वाले उत्पाद के अनुबंध का मूल्य दर्ज करता है और इकाई मुद्रा है जोCtValCcyउदाहरण के लिए:CtVal0.01 है, औरCtValCcyBTC है, जिसका अर्थ है कि एक अनुबंध की कीमत 0.01 BTC है।


अधिक