आइए पिछले लेख से चर्चा जारी रखें: एफएमजेड क्वांटिफिकेशन पर आधारित ऑर्डर सिंक्रनाइज़ेशन मैनेजमेंट सिस्टम का डिजाइन (1) (https://www.fmz.com/digest-topic/9729) और समन्वित आदेश पालन के लिए एक रणनीति तैयार करना शुरू करें।
इस तरह के कई डिजाइन मुद्दों पर विचार करें:
var isStopFollow = false // Used to mark whether the current order is being followed
var reStartPwd = null // Used to record the restart password
फिर हम रणनीति विराम / पुनरारंभ के लिए रणनीति संपादन पृष्ठ पर इंटरैक्टिव नियंत्रण जोड़ते हैं (वास्तविक बॉट को रोकने के लिए नहीं, केवल तर्क विराम, कोई और अधिक आदेश का पालन नहीं). हम विराम के दौरान एक विराम पासवर्ड सेट कर सकते हैं ताकि आपके वास्तविक बॉट के साथ भी विस्तारित एपीआई कुंजी काOrder Synchronization Management System Class Library (Single Server)
अंत, यह अपनी रणनीति जागृत नहीं कर सकता है. आदेश के बाद फिर से शुरू करते समय, आदेश के बाद समारोह जागृत करने के लिए पूर्व निर्धारित पासवर्ड दर्ज करें.
संबंधित कार्यों के कार्यान्वयन के लिए कोडः
...
// Judge the interaction command
if (arr.length == 2) {
// Buttons with controls
if (arr[0] == "stop/restart") {
// Pause/restart order-following
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("it has stopped the order-following,", "Set the restart password as:", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("it has restarted the order-following, ", "Clear the restart password.", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("Restart password error!")
}
}
continue
}
specifiedAmount: ऑर्डर-फॉलो-अप की संख्या निर्दिष्ट करें, डिफ़ॉल्ट -1, यानी निर्दिष्ट नहीं है। zoomAmountRatio: भेजे गए आदेशों की मात्रा के अनुसार स्केलिंग, उदाहरण के लिए, यदि भेजा गया संकेत हैः ETH_USDT,swap,buy,1, zoomAmountRatio द्वारा आदेशों की मात्रा के मूल्य को गुणा करें। डिफ़ॉल्ट -1, यानी कोई स्केलिंग नहीं है।
var amount = specifiedAmount == -1 ? action.amount : specifiedAmount
amount = zoomAmountRatio == -1 ? amount : amount * zoomAmountRatio
यहाँ इसे प्राप्त संकेत में अनुसरण किए जाने वाले आदेशों की मात्रा के लिए एक विशिष्ट मूल्य को स्केल या निर्दिष्ट करने के लिए लागू किया जाता है।
स्पॉट ऑर्डर द्वारा उपयोग किया जाने वाला वर्ग पुस्तकालयःhttps://www.fmz.com/strategy/10989भविष्य के आदेशों द्वारा प्रयुक्त वर्ग पुस्तकालयःhttps://www.fmz.com/strategy/203258
function trade(action) {
// Switch trading pairs and set up contracts
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)
आदि।
पिछले वर्ष का अस्थायी कोडOrder Synchronous Management System (Synchronous Server)
निम्नानुसार था:
अब हम ऑर्डर सिंक्रनाइज़ेशन प्रबंधन प्रणाली (सिनक्रोनस सर्वर) को फिर से डिजाइन करना शुरू करते हैंः
// Global variables
var isStopFollow = false
var reStartPwd = null
function trade(action) {
// Switch trading pairs and set up contracts
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 = {}
// Parse cmd, such as: 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() {
// Clear all logs
LogReset(1)
if (isSimulateOKEX) {
exchange.IO("simulate", true)
Log("Switch to OKEX demo!")
}
// Set accuracy
exchange.SetPrecision(pricePrecision, amountPrecision)
// Check zoom and specify it cannot be set at the same time
if (specifiedAmount != -1 && zoomAmountRatio != -1) {
throw "it cannot specify simultaneous volume and scaling volume at the same time"
}
while (true) {
var cmd = GetCommand()
if (cmd) {
Log("cmd: ", cmd)
var arr = cmd.split(":")
// Judge interaction commands
if (arr.length == 2) {
// Buttons with controls
if (arr[0] == "stop/restart") {
// Pause/restart order-following
if (!isStopFollow) {
isStopFollow = true
reStartPwd = arr[1]
Log("it has stopped the order-following.", "Set the restart password as.", reStartPwd, "#FF0000")
} else if (isStopFollow && arr[1] == reStartPwd) {
isStopFollow = false
reStartPwd = null
Log("it has restarted the order-following", "Clear the restart password.", "#FF0000")
} else if (isStopFollow && arr[1] != reStartPwd) {
Log("Restart password error!")
}
}
continue
}
// Permission to follow orders
if (!isStopFollow) {
// Resolve the interaction instructions of order-following signal
var objAction = parseCmd(cmd)
if (objAction) {
// The analysis is correct
var ret = trade(objAction)
} else {
Log("Wrong signal command cmd:", cmd)
}
}
}
// Display order-following status
LogStatus(_D(), isStopFollow ? "Stop Synchronization" : "Keep Synchronization", "\n")
Sleep(1000)
}
}
हम आदेश-नेतृत्व खाते का परीक्षण इस समय के लिए Binance असली बॉट का उपयोग करके करते हैं, और हम ऑर्डर के बाद असली बॉट के लिए OKEX खाते का उपयोग करते हैं। आदेश के लिए अग्रणी, हम अभी भी उपयोग करते हैंmain
परीक्षण कार्य में कार्य(Order Synchronization Management System Class Library (Single Server)
पिछले लेख में प्रयुक्त टेम्पलेट में।
यहाँ हम लेन-देन की दिशा को
इसके बाद, हम परीक्षण मुख्य समारोह में आदेश की दिशा को बदलकर 0.003 द्वारा छोटी स्थिति को बंद करने के लिए स्थिति को बंद करने का परीक्षण करते हैं।
फिर हम इसे फिर से चलाते हैं, जो ऑर्डर-लीडिंग (ऑर्डर सिंक्रनाइज़ेशन मैनेजमेंट सिस्टम क्लास लाइब्रेरी (एकल सर्वर)) के लिए जिम्मेदार है।
एक ही ऑपरेशन आदेश के बाद असली बॉट द्वारा शुरू किया गया था।
रणनीति का पताः आदेश सिंक्रनाइज़ेशन प्रबंधन प्रणाली वर्ग पुस्तकालय (एकल सर्वर) (https://www.fmz.com/strategy/345171) ऑर्डर सिंक्रनाइज़ेशन मैनेजमेंट सिस्टम (सिंक्रोनोस सर्वर) (https://www.fmz.com/strategy/345172)
यह रणनीति केवल संचार और सीखने के लिए डिज़ाइन की गई है, कृपया वास्तविक आवश्यकताओं के अनुसार समायोजित और अनुकूलित करें।