As vantagens da utilização da API alargada da FMZ para uma gestão eficiente do controlo do grupo na negociação quantitativa

Autora:FMZ~Lydia, Criado: 2023-11-20 14:05:49, Atualizado: 2024-01-01 12:16:20

The Advantages of Using FMZ’s Extended API for Efficient Group Control Management in Quantitative Trading

Com a popularização e o desenvolvimento da negociação quantitativa, os investidores geralmente precisam gerenciar um grande número de contas reais, o que traz grandes desafios para decisões de negociação, monitoramento e execução. A fim de melhorar a eficiência de gerenciamento e reduzir a dificuldade operacional, os traders no FMZ podem usar a API estendida do FMZ para gerenciamento de controle de grupo.

Muitos usuários têm suas próprias contas ao vivo de clientes que precisam ser gerenciadas e mantidas. Quando há muitas contas ao vivo de clientes, uma maneira mais conveniente é necessária para gerenciá-las (tanto poucas como dezenas ou até centenas).

Monitorização centralizada

Através da API estendida do FMZ, você pode monitorar centralmente as atividades de negociação e as condições de ativos de todas as contas ao vivo.

// 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) + "`")
}

Desenho dos parâmetros da estratégia:

The Advantages of Using FMZ’s Extended API for Efficient Group Control Management in Quantitative Trading

A funcionar em negociação ao vivo:

The Advantages of Using FMZ’s Extended API for Efficient Group Control Management in Quantitative Trading

Execução de um clique

O gerenciamento de controle de grupo torna muito conveniente executar transações com um clique. Você pode comprar, vender e fechar posições em várias contas de negociação ao vivo simultaneamente sem ter que abrir cada conta individualmente. Isso não só melhora a eficiência de execução, mas também reduz a possibilidade de erros operacionais.

Depois de obter a lista de contas de negociação ao vivo, podemos enviar comandos para essas contas e executar uma série de operações predeterminadas. Por exemplo: compensação de posições na conta ao vivo, pausa de proteção na conta ao vivo, mudança de modos na conta ao vivo.CommandRobot.

À medida que continuamos a escrever código, só precisamos adicionar algumas interações e chamadas para a interface API estendidaCommandRobotna nossa função principal:

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

The Advantages of Using FMZ’s Extended API for Efficient Group Control Management in Quantitative Trading

A estratégia de controlo do grupo enviou instruções para Test 1 A e Test 1 B.

The Advantages of Using FMZ’s Extended API for Efficient Group Control Management in Quantitative Trading The Advantages of Using FMZ’s Extended API for Efficient Group Control Management in Quantitative Trading

The Advantages of Using FMZ’s Extended API for Efficient Group Control Management in Quantitative Trading The Advantages of Using FMZ’s Extended API for Efficient Group Control Management in Quantitative Trading

Sincronização da estratégia

Com a API estendida do FMZ, você pode facilmente implementar modificações por lotes de parâmetros de estratégia e iniciar ou parar o comércio ao vivo.

Resumo

Na negociação quantitativa, usando a API estendida do FMZ para gerenciamento de controle de grupo, os comerciantes podem monitorar, executar e ajustar várias contas reais de forma mais eficiente.

Para os traders que gerenciam um grande número de contas reais, a API estendida da FMZ fornece uma ferramenta poderosa e flexível que torna a negociação quantitativa mais conveniente e controlável.


Mais informações