পরিমাণগত ট্রেডিংয়ে কার্যকর গ্রুপ কন্ট্রোল ম্যানেজমেন্টের জন্য এফএমজেডের এক্সটেন্ডেড এপিআই ব্যবহারের সুবিধা

লেখক:লিডিয়া, তৈরিঃ ২০২৩-১১-২০ 14:05:49, আপডেটঃ ২০২৪-০১-০১ 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

গ্রুপ কন্ট্রোল স্ট্র্যাটেজি টেস্ট ১ এ এবং টেস্ট ১ বি-এ নির্দেশনা পাঠায়।

img img

img img

কৌশল সিঙ্ক্রোনাইজেশন

এফএমজেডের বর্ধিত এপিআই দিয়ে, আপনি সহজেই কৌশল পরামিতিগুলির ব্যাচ পরিবর্তনগুলি বাস্তবায়ন করতে পারেন, এবং ব্যাচ শুরু বা লাইভ ট্রেডিং বন্ধ করতে পারেন।

সংক্ষিপ্তসার

পরিমাণগত ট্রেডিংয়ে, গ্রুপ নিয়ন্ত্রণ পরিচালনার জন্য এফএমজেডের বর্ধিত এপিআই ব্যবহার করে, ব্যবসায়ীরা একাধিক লাইভ অ্যাকাউন্টকে আরও দক্ষতার সাথে পর্যবেক্ষণ, সম্পাদন এবং সামঞ্জস্য করতে পারে। এই কেন্দ্রীভূত পরিচালনার পদ্ধতিটি কেবল অপারেশনাল দক্ষতা উন্নত করে না, তবে ঝুঁকি নিয়ন্ত্রণ এবং কৌশল সিঙ্ক্রোনাইজেশন আরও ভালভাবে বাস্তবায়নে সহায়তা করে।

বিপুল সংখ্যক লাইভ অ্যাকাউন্ট পরিচালনা করা ব্যবসায়ীদের জন্য, এফএমজেডের বর্ধিত এপিআই তাদের একটি শক্তিশালী এবং নমনীয় সরঞ্জাম সরবরাহ করে যা পরিমাণগত ট্রেডিংকে আরও সুবিধাজনক এবং নিয়ন্ত্রণযোগ্য করে তোলে।


আরো