मैं एफएमजेड पर बैच में लाइव ट्रेडिंग के मापदंडों को कैसे बदल सकता हूं? जब लाइव ट्रेडिंग की संख्या दर्जनों से अधिक हो जाती है और सैकड़ों तक पहुंच जाती है, तो लाइव ट्रेडिंग को मैन्युअल रूप से एक-एक करके कॉन्फ़िगर करना बहुत असुविधाजनक होगा। इस समय, हम इन कार्यों को पूरा करने के लिए एफएमजेड विस्तारित एपीआई का उपयोग कर सकते हैं। इसलिए इस लेख में, हम बॉट के समूह नियंत्रण का पता लगाएंगे, मापदंडों के कुछ विवरण अपडेट करेंगे।
पिछले लेख में, हमने हल की समस्या का उपयोग कैसे करें एफएमजेड विस्तारित एपीआई सभी लाइव ट्रेडिंग की निगरानी करने के लिए, समूह नियंत्रण लाइव ट्रेडिंग, और लाइव ट्रेडिंग के लिए कमांड भेजने के लिए। और हम अभी भी इंटरफ़ेस कॉल कोड का उपयोग करते हैं जिसे हमने पिछले लेख में आधार के रूप में शामिल किया है, लाइव ट्रेडिंग के मापदंडों के बैच संशोधन को महसूस करने के लिए कोड लिखना जारी रखें।
पैरामीटर सेटिंग्सः
रणनीति कोडः
// Global variable
var isLogMsg = true // Controls whether logs are printed or not
var isDebug = false // Debugging mode
var arrIndexDesc = ["all", "running", "stop"]
var descRobotStatusCode = ["Idle", "Running", "Stopping", "Exited", "Stopped", "There is an error in the strategy"]
var dicRobotStatusCode = {
"all" : -1,
"running" : 1,
"stop" : 4,
}
// Extended logging functions
function LogControl(...args) {
if (isLogMsg) {
Log(...args)
}
}
// FMZ extended API call functions
function callFmzExtAPI(accessKey, secretKey, funcName, ...args) {
var params = {
"version" : "1.0",
"access_key" : accessKey,
"method" : funcName,
"args" : JSON.stringify(args),
"nonce" : Math.floor(new Date().getTime())
}
var data = `${params["version"]}|${params["method"]}|${params["args"]}|${params["nonce"]}|${secretKey}`
params["sign"] = Encode("md5", "string", "hex", data)
var arrPairs = []
for (var k in params) {
var pair = `${k}=${params[k]}`
arrPairs.push(pair)
}
var query = arrPairs.join("&")
var ret = null
try {
LogControl("url:", baseAPI + "/api/v1?" + query)
ret = JSON.parse(HttpQuery(baseAPI + "/api/v1?" + query))
if (isDebug) {
LogControl("Debug:", ret)
}
} catch(e) {
LogControl("e.name:", e.name, "e.stack:", e.stack, "e.message:", e.message)
}
Sleep(100) // Control frequency
return ret
}
// Get information about all running bots for the specified strategy Id.
function getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode, maxRetry) {
var retryCounter = 0
var length = 100
var offset = 0
var arr = []
if (typeof(maxRetry) == "undefined") {
maxRetry = 10
}
while (true) {
if (retryCounter > maxRetry) {
LogControl("Maximum number of retries exceeded", maxRetry)
return null
}
var ret = callFmzExtAPI(accessKey, secretKey, "GetRobotList", offset, length, robotStatusCode)
if (!ret || ret["code"] != 0) {
Sleep(1000)
retryCounter++
continue
}
var robots = ret["data"]["result"]["robots"]
for (var i in robots) {
if (robots[i].strategy_id != strategyId) {
continue
}
arr.push(robots[i])
}
if (robots.length < length) {
break
}
offset += length
}
return arr
}
जब हमें लाइव ट्रेडिंग के मापदंडों को बैच में संशोधित करने और फिर इसे चलाने की आवश्यकता होती है, तो इस परिदृश्य के लिए 2 मामले हैं।
लेकिन कोई फर्क नहीं पड़ता कि किस तरह की विधि, अगले विचार के साथ ही ऑपरेशन समान हैं, इसलिए हम का उपयोग करेंगेRestartRobot
विस्तारित एपीआई फ़ंक्शन एक उदाहरण के रूप में समझाया गया है।
RestartRobot फ़ंक्शन का उपयोग दो तरीकों से किया जाता हैः
पहला दृष्टिकोण हमारे मांग परिदृश्य के लिए उपयोगी नहीं है, क्योंकि हमारी अपनी मांग थोक में लाइव ट्रेडिंग के मापदंडों की एक बड़ी संख्या को संशोधित करने के लिए है। तो सवाल यह है, लाइव ट्रेडिंग के मापदंडों का विन्यास बहुत जटिल है, वहाँ हैं विनिमय वस्तु विन्यास, रणनीति पैरामीटर विन्यास, के-लाइन अवधि सेटिंग्स और इतने पर।
चिंता न करें, आइए एक-एक करके उनका पता लगाएं।
एफएमजेड पर, यदि आप लाइव ट्रेडिंग के पैरामीटर कॉन्फ़िगरेशन को संशोधित करना चाहते हैं, तो यह गैर-रनिंग होना चाहिए। क्योंकि केवल एक लाइव ट्रेडिंग जो नहीं चल रही है, उसके पैरामीटर कॉन्फ़िगरेशन को संशोधित किया जा सकता है। एक लाइव ट्रेडिंग जो चल रही स्थिति में नहीं है, में हो सकती हैः
तो हम पहले निर्दिष्ट रणनीति के लिए लाइव ट्रेडिंग प्राप्त करने की जरूरत है, और इन लाइव ट्रेडिंग एक में हैंबंद अवस्थायारोकने के लिए एक त्रुटि है.
function main() {
var stopRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 4)
var errorRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 5)
var robotList = stopRobotList.concat(errorRobotList)
}
यह हमें लाइव ट्रेडिंग के बारे में सभी जानकारी देता है कि हम विन्यास को बदलने की जरूरत है, अगले हम लाइव ट्रेडिंग के विस्तृत विन्यास मिल जाएगा.
उदाहरण के लिए, लाइव ट्रेडिंग रणनीति जिसके लिए हमें मापदंडों को संशोधित करने की आवश्यकता है, निम्नानुसार है (यानी, रणनीति जिसकी रणनीति आईडी रणनीतिआईडी चर है):
इस रणनीति में परीक्षण के रूप में तीन मापदंड हैं।
लाइव ट्रेडिंग के लिए रणनीति मापदंडों को संशोधित करें, लेकिन शायद हम रणनीति के विनिमय विन्यास को संशोधित नहीं करना चाहते हैं, लेकिन विस्तारित एपीआई इंटरफ़ेस के लिए RestartRobot फ़ंक्शन, या तो कोई मापदंड निर्दिष्ट नहीं हैं (जैसा कि केवल लाइव ट्रेडिंग शुरू करना है) या सभी मापदंड विन्यास निर्दिष्ट किए जाने चाहिए।
यही है, इससे पहले कि हम लाइव ट्रेडिंग शुरू करने के लिए RestartRobot फ़ंक्शन का उपयोग करें, हमें पहले लाइव ट्रेडिंग का वर्तमान विन्यास प्राप्त करने के लिए विस्तारित एपीआई इंटरफ़ेस GetRobotDetail फ़ंक्शन का उपयोग करना चाहिए, और फिर हम उन मापदंडों के हिस्से को बदलते हैं जिन्हें संशोधित करने की आवश्यकता होती है, लाइव ट्रेडिंग की शुरुआत के लिए विन्यास मापदंडों का पुनर्निर्माण करने के लिए (यानी, मापदंडों का उपयोग किया जाएगा जिन्हें पुनः आरंभ करने के लिए उपयोग किया जाएगा) ।
तो, अगले हम पार robotList, और प्राप्त वर्तमान पैरामीटर विन्यास एक एक करके,/**/
निम्नलिखित कोड के टिप्पणी भाग लाइव व्यापार विवरण है, हम इन आंकड़ों के साथ सौदा करने की जरूरत है।
function main() {
var stopRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 4)
var errorRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 5)
var robotList = stopRobotList.concat(errorRobotList)
_.each(robotList, function(robotInfo) {
var robotDetail = callFmzExtAPI(accessKey, secretKey, "GetRobotDetail", robotInfo.id)
/*
{
"code": 0,
"data": {
"result": {
"robot": {
...
"id": 130350,
...
"name": "Test 1B",
"node_id": 3022561,
...
"robot_args": "[[\"pairs\",\"BTC_USDT,ETH_USDT,EOS_USDT,LTC_USDT\"],[\"col\",3],[\"htight\",300]]",
"start_time": "2023-11-19 21:16:12",
"status": 5,
"strategy_args": "[[\"pairs\",\"Currency list\",\"English comma spacing\",\"BTC_USDT,ETH_USDT,EOS_USDT,LTC_USDT\"],[\"col\",\"breadth\",\"Total width of the page is 12\",6],[\"htight\",\"height\",\"unit px\",600],[\"$$$__cmd__$$$coverSymbol\",\"close the position\",\"close out trading pairs\",\"\"]]",
"strategy_exchange_pairs": "[3600,[186193],[\"BTC_USD\"]]",
"strategy_id": 131242,
"strategy_last_modified": "2023-12-09 23:14:33",
"strategy_name": "Test 1",
...
}
},
"error": null
}
}
*/
// Parse the exchange configuration data
var exchangePairs = JSON.parse(robotDetail.data.result.robot.strategy_exchange_pairs)
// Get the exchange object index, trading pairs, these settings are not going to be changed
var arrExId = exchangePairs[1]
var arrSymbol = exchangePairs[2]
// Parse parameter configuration data
var params = JSON.parse(robotDetail.data.result.robot.robot_args)
// Update parameters
var dicParams = {
"pairs" : "AAA_BBB,CCC_DDD",
"col" : "999",
"htight" : "666"
}
var newParams = []
_.each(params, function(param) {
for (var k in dicParams) {
if (param[0] == k) {
newParams.push([k, dicParams[k]]) // Construct the strategy parameters and update the new parameter values
}
}
})
// Note that if there are spaces in the data you need to transcode it, otherwise the request will report an error
settings = {
"name": robotDetail.data.result.robot.name,
// Strategy parameter
"args": newParams,
// The strategy ID can be obtained by the GetStrategyList method.
"strategy": robotDetail.data.result.robot.strategy_id,
// K-period parameter, 60 means 60 seconds
"period": exchangePairs[0],
// Specifies which docker to run on; not writing this attribute means automatically assigning the run
"node" : robotDetail.data.result.robot.node_id,
"exchanges": []
}
for (var i = 0 ; i < arrExId.length ; i++) {
settings["exchanges"].push({"pid": arrExId[i], "pair": arrSymbol[i]})
}
Log(settings) // Test
var retRestart = callFmzExtAPI(accessKey, secretKey, "RestartRobot", robotInfo.id, settings)
Log("retRestart:", retRestart)
})
}
बैच पैरामीटर संशोधन रणनीति चलाने के बाद, मेरे लाइव व्यापारः
मापदंडों के बैच संशोधन विन्यस्त विनिमय वस्तुओं, व्यापारिक जोड़े और के-लाइन अवधि के साथ अपरिवर्तित किया गया थाः
यह लाइव ट्रेडिंग पृष्ठ पर स्वचालित रूप से बदला गया थाः
और चलना शुरू. क्योंकि हम ऊपर कोड में संशोधित मापदंडों निर्दिष्टः
// Update parameters
var dicParams = {
"pairs" : "AAA_BBB,CCC_DDD",
"col" : "999",
"htight" : "666"
}
दर्जनों के लिए, सैकड़ों लाइव ट्रेडिंग बैच मापदंडों को संशोधित करते हैं, यह विधि अधिक सुविधाजनक है। उदाहरण में, मापदंडों को एक समान रूप से संशोधित किया जाता है, निश्चित रूप से आप प्रत्येक लाइव ट्रेडिंग के लिए अलग-अलग पैरामीटर कॉन्फ़िगरेशन निर्दिष्ट करने के लिए कोड में अपने स्वयं के संशोधन नियमों को अनुकूलित कर सकते हैं। या विभिन्न विनिमय वस्तुओं, ट्रेडिंग जोड़े और इतने पर निर्दिष्ट करें।
एफएमजेड प्लेटफॉर्म के लिए, ये आवश्यकताएं प्राप्त करने के लिए लचीली और अनुकूलन योग्य हैं। यदि आपके पास कोई आवश्यकता विचार हैं, तो टिप्पणी छोड़ने के लिए स्वतंत्र महसूस करें, हम एक दूसरे से चर्चा, शोध और सीख सकते हैं, और समस्या का समाधान पा सकते हैं।