
इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म पररणनीति स्क्वायरइंटरनेट पर कई दिलचस्प रणनीतियाँ हैं। उस समय, अधिकांश डिजिटल मुद्रा एक्सचेंजों ने इसका इस्तेमाल कियाrestप्रोटोकॉल का एपीआई इंटरफ़ेस, कई रणनीतियों पर आधारित हैrestइंटरफ़ेस, कभी-कभी बाजार अपडेट धीमी होती है। इसके अलावा, हाल ही में कुछ एक्सचेंज सामने आए हैंrestइंटरफ़ेस विफलता के कारण नीति अनुपयोगी हो जाती है। यदि नीति संशोधित की जाती है, तो जोड़ेंwebsocketइंटरफ़ेस समर्थन के लिए रणनीति कोड में कुछ परिवर्तन की आवश्यकता होती है, जो आमतौर पर परेशानी भरा होता है (रणनीति को बदलना, उसे पुनः लिखने से कहीं अधिक कठिन होता है)।
मैं बिना कोई बदलाव किए उसी रणनीति का उपयोग कैसे कर सकता हूँ?websocketबाजार इंटरफेस के बारे में क्या?
यह इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफ़ॉर्म की शक्तिशाली लचीलेपन को पूरी तरह से प्रदर्शित करता है। हम कर सकते हैं:
exchange.GetTicker बाज़ार की जानकारी प्राप्त करने के लिए फ़ंक्शन हुक ऑपरेशन।इससे रणनीति को नियंत्रित किया जा सकता हैwebsocketबाजार इंटरफेस द्वारा संचालित डेटा चल रहा है।
प्रयुक्त कोडिंग भाषाJavaScriptभाषा।
उदाहरण के लिए, हम एक क्लासिक पुरानी रणनीति “आइसब्रेकर” को संशोधित करना चाहते हैं
आइए सबसे पहले रणनीति कोड पर नज़र डालें और देखें कि रणनीति टिक बाज़ार की स्थितियों से प्रेरित है और मुख्य रूप से इसका उपयोग करती हैtickerआंकड़ों मेंBuy、Sell、Lastये विशेषताएँ,tickerडेटा FMZ प्लेटफॉर्म के API फ़ंक्शन से प्राप्त किया जाता है:exchange.GetTicker पाना। इस तरह लक्ष्य स्पष्ट हो जाता है।exchange.GetTickerसमारोहHookबस एक ऑपरेशन (अर्थात इसे दूसरे संस्करण के साथ पुनः लिखना और प्रतिस्थापित करना) की ही आवश्यकता है।
हालाँकि, हम आइसब्रेकर रणनीति को फिर से नहीं लिख सकते क्योंकि इससे रणनीति प्रभावित होगी। हम जो चाहते हैं वह एक सहज कनेक्शन है! !
इसलिए अगले नायक का सामने आना जरूरी है।
initकार्य समन्वयहम एक “टेम्पलेट लाइब्रेरी” बनाते हैं और उसका नाम रखते हैं:SeamlessConnWS, प्रारंभिक कोड साफ़ करें.

तो फिर देSeamlessConnWSटेम्पलेट 2 पैरामीटर सेट करता है

सक्षम या अक्षम करना है या नहीं, इसे नियंत्रित करने के लिए उपयोग किया जाता हैwebsocketइंटरफ़ेस फ़ंक्शन, नियंत्रण और विशिष्ट बाजार इंटरफ़ेस के उद्घाटन को निर्दिष्ट करें। इस उदाहरण में, सीमित स्थान के कारण, केवलexchange.GetTickerइंटरफ़ेस हुक ऑपरेशन निष्पादित करता है. इसलिए पैरामीटर केवल सक्षम हैंGetTickerइंटरफ़ेस वेबसोकेट मोड का नियंत्रण पैरामीटर है: Hook_GetTicker.
एक बार टेम्पलेट बन जाने के बाद, आप टेम्पलेट में एक्सेस करने के लिए विशिष्ट एक्सचेंज लिख सकते हैंwebsocketइंटरफ़ेस, कुछ उद्धरणों की सदस्यता लें, और फिर एक्सचेंज द्वारा डेटा पुश करने की प्रतीक्षा करें। विशिष्ट कोड यहाँ दोहराया नहीं जाएगा। आप SeamlessConnWS कोड (सार्वजनिक रूप से उपलब्ध) और API दस्तावेज़ देख सकते हैं। आपको टेम्पलेट को देखने की आवश्यकता हैinitफ़ंक्शन और वैश्विक चर_DictConnectCreater、_ConnMap:
कोड:
var _DictConnectCreater = {
"Huobi" : WSConnecter_Huobi,
"Binance" : WSConnecter_Binance,
}
var _ConnMap = {}
function init () {
if (IsUsedWebSocket) {
var connectCreater = null
if (exchanges.length != 1) {
Log("切换为ws接口只针对 exchange 交易所对象(即第一个添加的交易所对象)")
}
var isFound = false
for (var name in _DictConnectCreater) {
if (exchange.GetName() == name) {
connectCreater = _DictConnectCreater[name]
isFound = true
}
}
if (!isFound) {
throw "没有找到实现"
}
if (Hook_GetTicker) {
var symbol = exchange.GetCurrency()
_ConnMap.GetTicker = connectCreater("GetTicker", symbol)
exchange.GetTicker = function () {
return _C(_ConnMap.GetTicker.Read)
}
}
// ...
}
}
आप देख सकते हैं कि यह टेम्पलेट केवल 2 एक्सचेंजों को लागू करता है।websocketबाजार इंटरफेस बिनेंस स्पॉट और हुओबी स्पॉट हैं।initइसका कार्य “आइसब्रेकर” रणनीति को संदर्भित करने की अनुमति देना हैSeamlessConnWSटेम्पलेट बनने के बाद, जब वास्तविक डिस्क चलाई जाती है, तो सबसे पहले जो चीज निष्पादित होगी वह हैinitफ़ंक्शन, जो स्वचालित रूप सेexchange.GetTickerफ़ंक्शन सामग्री को इसके साथ बदलेंwebsocketनिर्बाध कनेक्शन प्राप्त करने के लिए इंटरफ़ेस कोड कार्यान्वयनwebsocketउद्धरण।
यह बहुत सरल है! बंडलSeamlessConnWSटेम्पलेट को अपनी रणनीति लाइब्रेरी में कॉपी करने के बाद, आपको केवल इसे “आइसब्रेकर” रणनीति में संदर्भित करना होगा, जैसा कि चित्र में दिखाया गया है:

जाँचें, सहेजें, और आपका काम पूरा हो गया।
एक “आइसब्रेकर” रणनीति वास्तविक समय रोबोट बनाएं और एक्सचेंज के रूप में Binance का चयन करें
।
खुलाSeamlessConnWSटेम्पलेट पर पैरामीटर नियंत्रित करें.

इसे चलाने के लिए:

पुश किए गए डेटा को देखना आसान बनाने के लिए, मैंने लाइन 157 में एक प्रिंट लॉग कोड जोड़ा, जो एक्सचेंज द्वारा पुश किए गए डेटा को आउटपुट करेगा।

रोबोट लॉग दिखाता है:

इस तरह, रणनीति कोड की एक भी पंक्ति को संशोधित करने की आवश्यकता नहीं होती है, और वेबसोकेट बाजार इंटरफ़ेस और रणनीति का निर्बाध एकीकरण प्राप्त होता है।
यह उदाहरण केवल उपयोग के लिए हैexchange.GetTickerबाजार इंटरफेस फ़ंक्शन की रणनीति को समझाया गया है। अन्य बाजार इंटरफेस जैसेexchange.GetDepth、exchange.GetTrades 、exchange.GetRecordsयह वही दिनचर्या है! नमूना टेम्पलेट के लिएSeamlessConnWS, जिसे आगे भी विस्तारित किया जा सकता है।
टेम्पलेट्स में विशिष्ट लिंक के लिएwebsocketकार्यान्वयन का उपयोग करता हैDialफ़ंक्शन (एपीआई दस्तावेज़ डायल फ़ंक्शन देखें), जिसे आवश्यकतानुसार समायोजित किया जा सकता है। उदाहरण के लिए, आप दे सकते हैंread()फ़ंक्शन निर्दिष्ट पैरामीटर-2, यानी केवल वापसीwebsocketकनेक्शन अपने बफर में नवीनतम डेटा प्राप्त करता है।
पढ़ने के लिए धन्यवाद