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

बॉट के पैरामीटर को बैच संशोधित करने के लिए FMZ विस्तारित एपीआई का उपयोग करने के लिए आपको सिखाएं

लेखक:FMZ~Lydia, बनाया गयाः 2023-12-11 13:37:55, अद्यतनः 2024-11-06 21:16:44

img

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

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

पैरामीटर सेटिंग्सः

img

रणनीति कोडः

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

पहले FMZ विस्तारित एपीआई के रीस्टार्टरोबोट फ़ंक्शन को जानें

जब हमें लाइव ट्रेडिंग के मापदंडों को बैच में संशोधित करने और फिर इसे चलाने की आवश्यकता होती है, तो इस परिदृश्य के लिए 2 मामले हैं।

    1. बॉट बनाया गया है एक लाइव ट्रेडिंग के लिए जो पहले से ही बनाई गई है, इसे रीस्टार्ट रोबोट फ़ंक्शन का उपयोग करके पुनः आरंभ करना स्वाभाविक है, जो एफएमजेड के लिए एक विस्तारित एपीआई इंटरफ़ेस है।
    1. बॉट नहीं बनाया गया है के लिए लाइव ट्रेडिंग नहीं बनाई गई है, वहाँ modify करने की कोई आवश्यकता नहीं है लाइव ट्रेडिंग के मापदंडों, कि लाइव ट्रेडिंग के बैच निर्माण चलाने के लिए, और हम FMZ विस्तारित एपीआई इंटरफ़ेस का उपयोग - NewRobot समारोह.

लेकिन कोई फर्क नहीं पड़ता कि किस तरह की विधि, अगले विचार के साथ ही ऑपरेशन समान हैं, इसलिए हम का उपयोग करेंगेRestartRobotविस्तारित एपीआई फ़ंक्शन एक उदाहरण के रूप में समझाया गया है।

RestartRobot फ़ंक्शन का उपयोग दो तरीकों से किया जाता हैः

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

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

चिंता न करें, आइए एक-एक करके उनका पता लगाएं।

लाइव ट्रेडिंग की जानकारी प्राप्त करें जिसे आप संचालित करना चाहते हैं

एफएमजेड पर, यदि आप लाइव ट्रेडिंग के पैरामीटर कॉन्फ़िगरेशन को संशोधित करना चाहते हैं, तो यह गैर-रनिंग होना चाहिए। क्योंकि केवल एक लाइव ट्रेडिंग जो नहीं चल रही है, उसके पैरामीटर कॉन्फ़िगरेशन को संशोधित किया जा सकता है। एक लाइव ट्रेडिंग जो चल रही स्थिति में नहीं है, में हो सकती हैः

  • रणनीति रुक गई।
  • रणनीति में त्रुटियां हैं, रोक दी गई है।

तो हम पहले निर्दिष्ट रणनीति के लिए लाइव ट्रेडिंग प्राप्त करने की जरूरत है, और इन लाइव ट्रेडिंग एक में हैंबंद अवस्थायारोकने के लिए एक त्रुटि है.

function main() {
    var stopRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 4)
    var errorRobotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, 5)
    var robotList = stopRobotList.concat(errorRobotList)
}

यह हमें लाइव ट्रेडिंग के बारे में सभी जानकारी देता है कि हम विन्यास को बदलने की जरूरत है, अगले हम लाइव ट्रेडिंग के विस्तृत विन्यास मिल जाएगा.

लाइव ट्रेडिंग कॉन्फ़िगरेशन पैरामीटर का संशोधन

उदाहरण के लिए, लाइव ट्रेडिंग रणनीति जिसके लिए हमें मापदंडों को संशोधित करने की आवश्यकता है, निम्नानुसार है (यानी, रणनीति जिसकी रणनीति आईडी रणनीतिआईडी चर है):

img

img

इस रणनीति में परीक्षण के रूप में तीन मापदंड हैं।

लाइव ट्रेडिंग के लिए रणनीति मापदंडों को संशोधित करें, लेकिन शायद हम रणनीति के विनिमय विन्यास को संशोधित नहीं करना चाहते हैं, लेकिन विस्तारित एपीआई इंटरफ़ेस के लिए 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)
    })
}

बैच पैरामीटर संशोधन रणनीति चलाने के बाद, मेरे लाइव व्यापारः

  • परीक्षण 1A
  • परीक्षण 1बी

मापदंडों के बैच संशोधन विन्यस्त विनिमय वस्तुओं, व्यापारिक जोड़े और के-लाइन अवधि के साथ अपरिवर्तित किया गया थाः

यह लाइव ट्रेडिंग पृष्ठ पर स्वचालित रूप से बदला गया थाः

img

और चलना शुरू. क्योंकि हम ऊपर कोड में संशोधित मापदंडों निर्दिष्टः

        // Update parameters
        var dicParams = {
            "pairs" : "AAA_BBB,CCC_DDD",
            "col" : "999",
            "htight" : "666"
        }

अंत

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

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


अधिक