मात्रात्मक व्यापार में कुशल समूह नियंत्रण प्रबंधन के लिए एफएमजेड के विस्तारित एपीआई का उपयोग करने के फायदे

लेखक:लिडिया, बनाया गयाः 2023-11-20 14:05:49, अद्यतनः 2024-01-01 12:16:20

img

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

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

केंद्रीकृत निगरानी

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

// Global variable
var isLogMsg = true   // Control whether the log is printed
var isDebug = false   // Debug mode
var arrIndexDesc = ["all", "running", "stop"]
var descRobotStatusCode = ["In idle", "Running", "Stopping", "Exited", "Stopped", "Strategy error"]
var dicRobotStatusCode = {
    "all" : -1,
    "running" : 1,
    "stop" : 4,
}

// Extended log function
function LogControl(...args) {
    if (isLogMsg) {
        Log(...args)
    }
}

// FMZ extended API call function
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 
}

// Obtain all live trading information of 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("Exceeded the maximum number of retries", 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 
}

function main() {
    var robotStatusCode = dicRobotStatusCode[arrIndexDesc[robotStatus]]
    var robotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode)
    if (!robotList) {
        Log("Failed to obtain live trading data")
    }
    
    var robotTbl = {"type": "table", "title": "live trading list", "cols": [], "rows": []}
    robotTbl.cols = ["live trading Id", "live trading name", "live trading status", "strategy name", "live trading profit"]

    _.each(robotList, function(robotInfo) {
        robotTbl.rows.push([robotInfo.id, robotInfo.name, descRobotStatusCode[robotInfo.status], robotInfo.strategy_name, robotInfo.profit])
    })

    LogStatus(_D(), "`" + JSON.stringify(robotTbl) + "`")
}

रणनीति पैरामीटर डिजाइनः

img

लाइव ट्रेडिंग पर चल रहा हैः

img

एक क्लिक निष्पादन

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

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

के रूप में हम कोड लिखने के लिए जारी है, हम सिर्फ विस्तारित एपीआई इंटरफ़ेस के लिए कुछ बातचीत और कॉल जोड़ने की जरूरत हैCommandRobotहमारे मुख्य कार्य मेंः

function main() {
    var robotStatusCode = dicRobotStatusCode[arrIndexDesc[robotStatus]]
    var robotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode)
    if (!robotList) {
        Log("Failed to obtain live trading data")
    }
    
    var robotTbl = {"type": "table", "title": "live trading list", "cols": [], "rows": []}
    robotTbl.cols = ["live trading Id", "live trading name", "live trading status", "strategy name", "live trading profit"]

    _.each(robotList, function(robotInfo) {
        robotTbl.rows.push([robotInfo.id, robotInfo.name, descRobotStatusCode[robotInfo.status], robotInfo.strategy_name, robotInfo.profit])
    })

    LogStatus(_D(), "`" + JSON.stringify(robotTbl) + "`")

    while(true) {
        LogStatus(_D(), ", Waiting to receive interactive commands", "\n", "`" + JSON.stringify(robotTbl) + "`")

        var cmd = GetCommand()
        if (cmd) {
            var arrCmd = cmd.split(":")
            if (arrCmd.length == 1 && cmd == "coverAll") {
                _.each(robotList, function(robotInfo) {
                    var strCmd = "Clearance"               // You can define the required message format
                    if (robotInfo.status != 1) {     // Only the "live" trading platform can receive commands.
                        return 
                    }
                    var ret = callFmzExtAPI(accessKey, secretKey, "CommandRobot", parseInt(robotInfo.id), strCmd)
                    LogControl("Send command to the live trading board with id: ", robotInfo.id, ":", strCmd, ", execution result:", ret)
                })
            }
        }
        Sleep(1000)
    }
}

img

समूह नियंत्रण रणनीति ने परीक्षण 1 A और परीक्षण 1 B को निर्देश भेजे।

img img

img img

रणनीति सिंक्रनाइजेशन

FMZ के विस्तारित एपीआई के साथ, आप आसानी से रणनीति मापदंडों के बैच संशोधनों को लागू कर सकते हैं, और बैच शुरू या लाइव ट्रेडिंग बंद कर सकते हैं।

सारांश

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

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


अधिक