وسائل لوڈ ہو رہے ہیں... لوڈنگ...

کمیت کی تجارت میں موثر گروپ کنٹرول مینجمنٹ کے لئے ایف ایم زیڈ کے توسیع شدہ API کے استعمال کے فوائد

مصنف:FMZ~Lydia, تخلیق: 2023-11-20 14:05:49, تازہ کاری: 2024-01-01 12:16:20

img

مقداری تجارت کی مقبولیت اور ترقی کے ساتھ ، سرمایہ کاروں کو اکثر بڑی تعداد میں رواں اکاؤنٹس کا نظم و نسق کرنے کی ضرورت ہوتی ہے ، جو تجارتی فیصلوں ، نگرانی اور عمل درآمد کے لئے بڑے چیلنجوں کا باعث بنتی ہے۔ انتظامی کارکردگی کو بہتر بنانے اور آپریشنل مشکلات کو کم کرنے کے ل FM ، ایف ایم زیڈ پر تاجر گروپ کنٹرول مینجمنٹ کے لئے ایف ایم زیڈ کے توسیع شدہ API کا استعمال کرسکتے ہیں۔ اس مضمون میں ، ہم مقداری تجارت میں ایف ایم زیڈ کے توسیع شدہ API کے استعمال کے فوائد اور موثر گروپ کنٹرول مینجمنٹ کے حصول کے طریقوں پر تبادلہ خیال کریں گے۔

بہت سے صارفین کے اپنے کسٹمر لائیو اکاؤنٹس ہیں جن کا انتظام اور دیکھ بھال کرنے کی ضرورت ہے۔ جب بہت سارے کسٹمر لائیو اکاؤنٹس ہوتے ہیں تو ، ان کا انتظام کرنے کے لئے زیادہ آسان طریقہ کی ضرورت ہوتی ہے (دسوں یا سینکڑوں تک کم سے کم) ۔ ایف ایم زیڈ ایک طاقتور توسیعی API فراہم کرتا ہے۔ گروپ کنٹرول مینجمنٹ کے لئے اس کا استعمال ایک مثالی انتخاب بن گیا ہے۔

مرکزی نگرانی

ایف ایم زیڈ کے توسیع شدہ اے پی پی کے ذریعے ، آپ مرکزی طور پر تمام رواں اکاؤنٹس کی تجارتی سرگرمیوں اور اثاثوں کی حالت کی نگرانی کرسکتے ہیں۔ چاہے یہ ہر اکاؤنٹ کی پوزیشنوں کی جانچ پڑتال ہو ، تاریخی تجارتی ریکارڈ ، یا اکاؤنٹس کی منافع اور نقصان کی حیثیت کی حقیقی وقت کی نگرانی ، ان سب کو حاصل کیا جاسکتا ہے۔

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

ایک کلک پر عملدرآمد

گروپ کنٹرول مینجمنٹ ایک کلک کے ساتھ ٹرانزیکشنز کو انجام دینے میں بہت آسان بناتا ہے۔ آپ ہر اکاؤنٹ کو انفرادی طور پر کھولنے کی ضرورت کے بغیر بیک وقت متعدد رواں تجارتی اکاؤنٹس پر پوزیشن خرید ، فروخت اور بند کرسکتے ہیں۔ اس سے نہ صرف عملدرآمد کی کارکردگی میں بہتری آتی ہے ، بلکہ آپریشنل غلطیوں کے امکان کو بھی کم کیا جاتا ہے۔

لائیو ٹریڈنگ اکاؤنٹس کی فہرست حاصل کرنے کے بعد ، ہم ان اکاؤنٹس کو کمانڈ بھیج سکتے ہیں اور پہلے سے طے شدہ کارروائیوں کا ایک سلسلہ انجام دے سکتے ہیں۔ مثال کے طور پر: لائیو اکاؤنٹ میں پوزیشنوں کی کلیئرنگ ، لائیو اکاؤنٹ میں تحفظ کو روکنا ، لائیو اکاؤنٹ میں موڈ سوئچ کرنا۔ یہ سب ایف ایم زیڈ کی توسیعی API کے ذریعے حاصل کیا جاسکتا ہے۔CommandRobot.

ہم کوڈ لکھنے کے لئے جاری ہے کے طور پر، ہم صرف توسیع API انٹرفیس پر کچھ تعاملات اور کالز شامل کرنے کی ضرورت ہے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

حکمت عملی کی ہم وقت سازی

ایف ایم زیڈ کے توسیع شدہ API کے ساتھ ، آپ آسانی سے حکمت عملی کے پیرامیٹرز کی بیچ میں ترمیم کو نافذ کرسکتے ہیں ، اور بیچ شروع کرسکتے ہیں یا براہ راست تجارت کو روک سکتے ہیں۔

خلاصہ

مقداری تجارت میں ، گروپ کنٹرول مینجمنٹ کے لئے ایف ایم زیڈ کی توسیعی API کا استعمال کرکے ، تاجر متعدد رواں اکاؤنٹس کی نگرانی ، عملدرآمد اور ان کو زیادہ موثر انداز میں ایڈجسٹ کرسکتے ہیں۔ یہ مرکزی انتظام کا طریقہ نہ صرف آپریشنل کارکردگی کو بہتر بناتا ہے ، بلکہ رسک کنٹرول اور حکمت عملی کی ہم وقت سازی کو بہتر طور پر نافذ کرنے میں بھی مدد کرتا ہے۔

بڑی تعداد میں لائیو اکاؤنٹس کا انتظام کرنے والے تاجروں کے لئے ، ایف ایم زیڈ کی توسیع شدہ اے پی آئی انہیں ایک طاقتور اور لچکدار ٹول مہیا کرتی ہے جو مقداری تجارت کو زیادہ آسان اور قابل کنٹرول بناتی ہے۔


مزید