Type/to search
8
Follow
1361
Followers
FMZ परिमाणीकरण पर आधारित ऑर्डर सिंक्रोनाइज़ेशन प्रबंधन प्रणाली का डिज़ाइन (2)
Original
Created 2022-02-16 12:11:36  Updated 2023-09-15 20:46:46
 0
 1626

img

FMZ परिमाणीकरण पर आधारित ऑर्डर सिंक्रोनाइज़ेशन प्रबंधन प्रणाली का डिज़ाइन (2)

सिंक्रोनस सर्वर ऑर्डर करें

आइये पिछले लेख से आगे बढ़ते हैं:FMZ परिमाणीकरण पर आधारित ऑर्डर सिंक्रोनाइज़ेशन प्रबंधन प्रणाली का डिज़ाइन (1)विशेषज्ञों के साथ चर्चा करने के बाद, हमने सिंक्रोनस कॉपी ट्रेडिंग के लिए रणनीति तैयार करना शुरू किया।

इन डिज़ाइन मुद्दों पर विचार करें:

    1. यदि आप कुछ समय के लिए समकालिक रूप से आदेशों का पालन नहीं करना चाहते हैं, तो क्या आप इसे रोक सकते हैं? एक बार रोक दिए जाने पर, पासवर्ड प्रमाणीकरण का उपयोग करके एक्सटेंशन API से लॉन्च करना प्रतिबंधित हो जाता है।
      इस फ़ंक्शन को कार्यान्वित करने के लिए, दो वैश्विक चर जोड़ें:
    javascript
    var isStopFollow = false // 用于标记当前是否跟单 var reStartPwd = null // 用于记录重启密码

    img

    फिर रणनीति को रोकने/पुनः आरंभ करने के लिए रणनीति संपादन पृष्ठ पर इंटरैक्टिव नियंत्रण जोड़ें (यह वास्तविक ट्रेडिंग को नहीं रोकता है, बल्कि केवल तर्क को रोकता है, आदेशों का पालन करना बंद कर देता है, और कुछ नहीं करता है)। विराम देते समय, आप विराम पासवर्ड सेट कर सकते हैं ताकि भले ही आपके पास विस्तारित API कुंजी हो订单同步管理系统类库(Single Server)यहां तक ​​कि एक वास्तविक ट्रेडिंग सत्र भी आपकी रणनीति को जागृत नहीं कर सकता। कॉपी ट्रेडिंग पुनः आरंभ करते समय, कॉपी ट्रेडिंग फ़ंक्शन को चालू करने के लिए पूर्व निर्धारित पासवर्ड दर्ज करें।
    संबंधित कार्यों का कार्यान्वयन कोड:

    javascript
    ... // 判断交互指令 if (arr.length == 2) { // 带控件的按钮 if (arr[0] == "stop/restart") { // 暂停/重启跟单 if (!isStopFollow) { isStopFollow = true reStartPwd = arr[1] Log("已经停止跟单,", "设置的重启密码为:", reStartPwd, "#FF0000") } else if (isStopFollow && arr[1] == reStartPwd) { isStopFollow = false reStartPwd = null Log("已经重启跟单,", "清空重启密码。", "#FF0000") } else if (isStopFollow && arr[1] != reStartPwd) { Log("重启密码错误!") } } continue }
    1. आप ऑर्डर की मात्रा निर्दिष्ट कर सकते हैं या इसे बढ़ा या घटा सकते हैं
      रणनीति में पैरामीटर जोड़ें:

    img

    निर्दिष्ट राशि: अनुवर्ती आदेश की राशि निर्दिष्ट करता है। डिफ़ॉल्ट मान -1 है, जिसका अर्थ है कि यह निर्दिष्ट नहीं है।
    zoomAmountRatio : भेजे गए सिग्नल में ऑर्डर राशि के अनुसार ज़ूम करें, उदाहरण के लिए, भेजा गया सिग्नल है:ETH_USDT,swap,buy,1, ऑर्डर मात्रा को ज़ूम राशि अनुपात से गुणा करें। डिफ़ॉल्ट -1 है, जिसका अर्थ है कोई स्केलिंग नहीं।

    javascript
    var amount = specifiedAmount == -1 ? action.amount : specifiedAmount amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio

    यहां हम ऑर्डर मात्रा को लागू करते हैं जिसका प्राप्त सिग्नल में पालन किया जाना आवश्यक हैज़ूमयाविशिष्ट मान निर्दिष्ट करें

    1. कोड को यथासंभव संक्षिप्त रखें और ऑर्डर प्रोसेसिंग के लिए अन्य टेम्पलेट लाइब्रेरीज़ का उपयोग करें।

    क्लास लाइब्रेरी का उपयोग करके स्पॉट ऑर्डर: https://www.fmz.com/strategy/10989
    फ्यूचर्स ऑर्डर लाइब्रेरी: https://www.fmz.com/strategy/203258

    javascript
    function trade(action) { // 切换交易对,设置合约 exchange.SetCurrency(action.symbol) if (action.ct != "spot") { exchange.SetContractType(action.ct) } var retTrade = null var amount = specifiedAmount == -1 ? action.amount : specifiedAmount amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio if (action.direction == "buy") { retTrade = action.ct == "spot" ? $.Buy(amount) : $.OpenLong(exchange, action.ct, amount) } else if (action.direction == "sell") { retTrade = action.ct == "spot" ? $.Sell(amount) : $.OpenShort(exchange, action.ct, amount) } else if (action.direction == "closebuy") { retTrade = action.ct == "spot" ? $.Sell(amount) : $.CoverLong(exchange, action.ct, amount) } else if (action.direction == "closesell") { retTrade = action.ct == "spot" ? $.Buy(amount) : $.CoverShort(exchange, action.ct, amount) } return retTrade }

    तो आप देख सकते हैं, ऑर्डर देने के लिए केवल एक वाक्य की आवश्यकता होती है:$.Sell(amount)$.Buy(amount)$.OpenLong(exchange, action.ct, amount) .. इंतज़ार।

रणनीति कोड:

पहले का订单同步管理系统(Synchronous Server)अस्थायी कोड यह है:

img

अब पुनः डिजाइन करना शुरू करें订单同步管理系统(Synchronous Server)

javascript
// 全局变量 var isStopFollow = false var reStartPwd = null function trade(action) { // 切换交易对,设置合约 exchange.SetCurrency(action.symbol) if (action.ct != "spot") { exchange.SetContractType(action.ct) } var retTrade = null var amount = specifiedAmount == -1 ? action.amount : specifiedAmount amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio if (action.direction == "buy") { retTrade = action.ct == "spot" ? $.Buy(amount) : $.OpenLong(exchange, action.ct, amount) } else if (action.direction == "sell") { retTrade = action.ct == "spot" ? $.Sell(amount) : $.OpenShort(exchange, action.ct, amount) } else if (action.direction == "closebuy") { retTrade = action.ct == "spot" ? $.Sell(amount) : $.CoverLong(exchange, action.ct, amount) } else if (action.direction == "closesell") { retTrade = action.ct == "spot" ? $.Buy(amount) : $.CoverShort(exchange, action.ct, amount) } return retTrade } function parseCmd(cmd) { var objAction = {} // 解析cmd ,例如:ETH_USDT,swap,buy,1 var arr = cmd.split(",") if (arr.length != 4) { return null } objAction.symbol = arr[0] objAction.ct = arr[1] objAction.direction = arr[2] objAction.amount = arr[3] return objAction } function main() { // 清除所有日志 LogReset(1) if (isSimulateOKEX) { exchange.IO("simulate", true) Log("切换到OKEX模拟盘!") } // 设置精度 exchange.SetPrecision(pricePrecision, amountPrecision) // 检查缩放、指定不能同时设置 if (specifiedAmount != -1 && zoomAmountRatio != -1) { throw "不能同时指定同步量和缩放量" } while (true) { var cmd = GetCommand() if (cmd) { Log("cmd: ", cmd) var arr = cmd.split(":") // 判断交互指令 if (arr.length == 2) { // 带控件的按钮 if (arr[0] == "stop/restart") { // 暂停/重启跟单 if (!isStopFollow) { isStopFollow = true reStartPwd = arr[1] Log("已经停止跟单,", "设置的重启密码为:", reStartPwd, "#FF0000") } else if (isStopFollow && arr[1] == reStartPwd) { isStopFollow = false reStartPwd = null Log("已经重启跟单,", "清空重启密码。", "#FF0000") } else if (isStopFollow && arr[1] != reStartPwd) { Log("重启密码错误!") } } continue } // 允许跟单 if (!isStopFollow) { // 解析跟单信号交互指令 var objAction = parseCmd(cmd) if (objAction) { // 解析正确 var ret = trade(objAction) } else { Log("错误的信号指令 cmd:", cmd) } } } // 显示跟单情况 LogStatus(_D(), isStopFollow ? "停止同步" : "保持同步", "\n") Sleep(1000) } }

परीक्षा

इस बार, ऑर्डर वाला खाता परीक्षण के लिए Binance वास्तविक खाते का उपयोग करेगा, और ऑर्डर की प्रतिलिपि बनाने वाला वास्तविक खाता OKEX खाते का उपयोग करेगा। हम अभी भी पिछले लेख में प्रयुक्त परीक्षण फ़ंक्शन का उपयोग करते हैं (订单同步管理系统类库(Single Server)टेम्पलेट मेंmainसमारोह)।

img

हमने लेन-देन की दिशा को शॉर्ट सेलिंग में बदल दिया है और लेन-देन की मात्रा को 0.003 कर दिया है (Binance USDT-आधारित अनुबंध दशमलव में ऑर्डर दे सकते हैं)। हालाँकि, OKEX खाता पूर्णांक होना चाहिए (OKEX एक्सचेंज ऑर्डर पूर्ण संख्याओं में रखे जाने चाहिए), इसलिए मैं रणनीति पैरामीटर निर्दिष्ट करता हूँspecifiedAmount1 है.

img

订单同步管理系统类库(Single Server)परीक्षण फ़ंक्शन एक वास्तविक लेनदेन को ट्रिगर करता है।

img

आदेशों की प्रतिलिपि बनाने की वास्तविक समय रणनीति संकेत प्राप्त करती है और प्रतिलिपि बनाने की कार्रवाई को अंजाम देती है:

img

एक्सचेंज ने एक संगत ऑर्डर खोला।

img

इसके बाद, आइए स्थिति को बंद करने का परीक्षण करें और 0.003 अनुबंधों की छोटी स्थिति को बंद करने के लिए परीक्षण मुख्य फ़ंक्शन में ऑर्डर दिशा बदलें।

img

फिर आदेश लेने के लिए जिम्मेदार वास्तविक डिस्क को फिर से चलाएं (订单同步管理系统类库(Single Server))。

img

वास्तविक ऑर्डर की प्रतिलिपि बनाकर भी यही ऑपरेशन शुरू किया जाता है:

img

पॉलिसी पता:
ऑर्डर सिंक्रोनाइजेशन प्रबंधन प्रणाली क्लास लाइब्रेरी (एकल सर्वर)
सिंक्रोनस सर्वर ऑर्डर करें

रणनीति डिज़ाइन केवल संचार और सीखने के लिए है। कृपया इसे वास्तविक उत्पादन आवश्यकताओं के अनुसार संशोधित, समायोजित और अनुकूलित करें।

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)