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

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

مصنف:ایجاد کاروں کی مقدار - خواب, تخلیق: 2023-11-19 20:57:18, تازہ کاری: 2023-12-09 23:21:49

img

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

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

سینٹرل نگرانی

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

// 全局变量
var isLogMsg = true   // 控制日志是否打印
var isDebug = false   // 调试模式
var arrIndexDesc = ["all", "running", "stop"]
var descRobotStatusCode = ["空闲中", "运行中", "停止中", "已退出", "被停止", "策略有错误"]
var dicRobotStatusCode = {
    "all" : -1,
    "running" : 1,
    "stop" : 4,
}

// 扩展的日志函数
function LogControl(...args) {
    if (isLogMsg) {
        Log(...args)
    }
}

// FMZ扩展API调用函数
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)  // 控制频率
    return ret 
}

// 获取指定策略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("超过最大重试次数", 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("获取实盘数据失败")
    }
    
    var robotTbl = {"type": "table", "title": "实盘列表", "cols": [], "rows": []}
    robotTbl.cols = ["实盘Id", "实盘名称", "实盘状态", "策略名称", "实盘收益"]

    _.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

ریئل ڈسک چل رہا ہے:

img

ایک بٹن پر عملدرآمد

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

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

ہم کوڈ لکھنے کے لئے جاری رہے ہیں، صرف کچھ انٹرایکٹو اور بڑے پیمانے پر API انٹرفیس کو مین فنکشن میں شامل کرنے کی ضرورت ہے.CommandRobotاس کا نام ہے:

function main() {
    var robotStatusCode = dicRobotStatusCode[arrIndexDesc[robotStatus]]
    var robotList = getAllRobotByIdAndStatus(accessKey, secretKey, strategyId, robotStatusCode)
    if (!robotList) {
        Log("获取实盘数据失败")
    }
    
    var robotTbl = {"type": "table", "title": "实盘列表", "cols": [], "rows": []}
    robotTbl.cols = ["实盘Id", "实盘名称", "实盘状态", "策略名称", "实盘收益"]

    _.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(), ", 等待接收交互命令", "\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 = "清仓"               // 可以定义所需的消息格式
                    if (robotInfo.status != 1) {     // 只有”活着“的实盘才能接收命令
                        return 
                    }
                    var ret = callFmzExtAPI(accessKey, secretKey, "CommandRobot", parseInt(robotInfo.id), strCmd)
                    LogControl("向id:", robotInfo.id, "的实盘发送命令:", strCmd, ", 执行结果:", ret)
                })
            }
        }
        Sleep(1000)
    }
}

img

اس کے بعد ، گروپ کنٹرول کی پالیسی نے "ٹیسٹ 1 اے" اور "ٹیسٹ 1 بی" کو ہدایات بھیجی۔

img

img

حکمت عملی کی ہم آہنگی

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

اختتام

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


مزید