avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Utilisation de l'API étendue de FMZ pour obtenir une gestion efficace du contrôle de groupe dans le trading quantitatif

Créé le: 2023-11-19 20:57:18, Mis à jour le: 2025-05-16 16:49:59
comments   0
hits   954

Utilisation de l’API étendue de FMZ pour obtenir une gestion efficace du contrôle de groupe dans le trading quantitatif

Avec la popularité et le développement du trading quantitatif, les investisseurs doivent généralement gérer un grand nombre de comptes réels, ce qui pose d’énormes défis en matière de prise de décision, de suivi et d’exécution du trading. Afin d’améliorer l’efficacité de la gestion et de réduire les difficultés opérationnelles, les traders sur FMZ peuvent utiliser l’API étendue de FMZ pour la gestion du contrôle de groupe. Cet article explorera les avantages de l’utilisation de l’API étendue FMZ dans le trading quantitatif et comment parvenir à une gestion efficace du contrôle de groupe.

De nombreux utilisateurs possèdent leurs propres comptes clients qui doivent être gérés et maintenus. Lorsqu’il y a un grand nombre de comptes clients, un moyen de gestion et de maintenance plus pratique est nécessaire (au moins une douzaine de comptes et au plus des centaines de comptes). FMZ fournit une API étendue puissante, et la gestion du contrôle de groupe via l’API étendue de FMZ devient un choix idéal.

Surveillance centralisée

Grâce à l’API étendue de FMZ, vous pouvez surveiller de manière centralisée les activités de trading et l’état des actifs de tous les comptes réels. Qu’il s’agisse de vérifier les positions de chaque compte, les enregistrements historiques des transactions ou de surveiller en temps réel la situation des profits et des pertes du compte, cela peut être réalisé.

// 全局变量
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) + "`")
}

Conception des paramètres de stratégie :

Utilisation de l’API étendue de FMZ pour obtenir une gestion efficace du contrôle de groupe dans le trading quantitatif

Conception d’interactions :

Utilisation de l’API étendue de FMZ pour obtenir une gestion efficace du contrôle de groupe dans le trading quantitatif

Fonctionnement du disque réel :

Utilisation de l’API étendue de FMZ pour obtenir une gestion efficace du contrôle de groupe dans le trading quantitatif

Exécution en un clic

La gestion du contrôle de groupe permet d’exécuter très facilement des transactions en un seul clic. Vous pouvez acheter, vendre, fermer des positions et d’autres opérations sur plusieurs ordres réels en même temps sans avoir à ouvrir différents ordres réels un par un. Cela améliore non seulement l’efficacité de l’exécution, mais réduit également la possibilité d’erreurs opérationnelles.

Après avoir obtenu les informations de la liste en temps réel, nous pouvons envoyer des instructions au marché en temps réel pour effectuer une série d’opérations prédéterminées. Par exemple : liquidation en temps réel, protection contre la suspension en temps réel et changement de mode en temps réel. Ceux-ci peuvent être étendus via l’API FMZCommandRobotaccomplir.

Nous continuons à écrire du code, ajoutons simplement quelques interactions et étendons l’interface API dans la fonction principaleCommandRobotL’appel :

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

Utilisation de l’API étendue de FMZ pour obtenir une gestion efficace du contrôle de groupe dans le trading quantitatif

La stratégie de contrôle de groupe a ensuite envoyé des instructions au « Test 1 A » et au « Test 1 B ».

Utilisation de l’API étendue de FMZ pour obtenir une gestion efficace du contrôle de groupe dans le trading quantitatif

Utilisation de l’API étendue de FMZ pour obtenir une gestion efficace du contrôle de groupe dans le trading quantitatif

Synchronisation des politiques

En utilisant l’API étendue de FMZ, vous pouvez facilement modifier les paramètres de stratégie par lots et démarrer et arrêter le trading réel par lots. En raison de la longueur de l’article, nous discuterons en détail de la manière de modifier par lots les paramètres de la stratégie et de la démarrer dans le prochain article.

Conclusion

Dans le trading quantitatif, en utilisant l’API étendue de FMZ pour la gestion du contrôle de groupe, les traders peuvent surveiller, exécuter et ajuster plusieurs comptes réels plus efficacement. Cette approche de gestion centralisée améliore non seulement l’efficacité opérationnelle, mais contribue également à mieux mettre en œuvre le contrôle des risques et la synchronisation des stratégies. Pour les traders qui gèrent un grand nombre de comptes réels, l’API étendue de FMZ leur fournit un outil puissant et flexible, rendant le trading quantitatif plus pratique et contrôlable.