Les ressources ont été chargées... Je charge...

Interface d'API étendue

FMZ Quant a ouvert l'interface API étendue de la plateforme pour prendre en charge les appels programmatiques vers diverses fonctions de la plateforme de trading FMZ Quant.

Créez ApiKey

La plateforme de négociation quantitative FMZ prend en charge la gestion des autorisations l'interface API étendue, et l'autorisation deAPI KEYpeut être réglé. Sur l'option API interface sur les Paramètres de compte (https://www.fmz.com/m/account) page de la plateforme, cliquez sur Créer nouveau bouton ApiKey pour créer l'extensionAPI KEY.

Vous pouvez modifier la zone d'entrée API Permission lors de la création d'unAPI KEY, et entrez le*Symbole permettant à tousInterface API étendueSi vous souhaitez spécifier des autorisations d'interface spécifiques, vous devez entrer le nom de la fonction API étendue correspondante. Utilisez des virgules pour séparer, par exemple:GetRobotDetail,DeleteRobotÇa donne ça.API KEYl'autorisation d'appeler leObtenez des informations détaillées sur le trading en directl'interface et leSupprimer les opérations en direct interface.

LeAPI KEYla page de gestion vous permet également demodifier, désactiver, supprimerLes créaturesAPI KEY.

Code de retour de l'interface API étendue

Un exemple de la structure renvoyée par l'interface API étendue est le suivant:

    "code":0,
    "data":{
        // ...
    }
}

Lecodechamp is: Le code d'état du résultat d'appel renvoyé lors de l'appel de l'interface API étendue.

Définition Le code
Exécution réussie 0
Faute de clé d'API 1
Fausse signature 2
Erreur de nonce 3
Méthode incorrecte 4
Paramètre incorrect 5
Erreur interne inconnue 6

Code de négociation en direct

LeGetRobotListl'interface, leGetRobotDetailune interface, et leGetRobotLogsLes données de retour de l'interface dans lestatuschamp pour: le code de l'état de négociation en direct.

  • Démarrage normal
    Le statut Le code
    À l'arrêt 0
    En fonctionnement 1
    Arrêt 2
    Déposé 3
    Arrêté 4
    La stratégie comporte des erreurs. 5
  • Une anomalie.
    Le statut Le code
    La stratégie a expiré, et s'il vous plaît contacter l'auteur pour l'acheter à nouveau -1
    Aucun docker trouvé -2
    Erreur de compilation de stratégie -3
    La négociation en direct est déjà en cours. -4
    Solde insuffisant -5
    Le nombre de stratégies concomitantes dépasse la limite -6

Méthodes de vérification

Il y a deux méthodes de vérification lors de l'appel de l'interface API étendue,tokenla vérification et la vérification directe.

Vérification des jetons

Utilisationmd5méthode de chiffrement à vérifier, exemple dePython, GolangAppel de langue:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
import json
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

try:
    import md5
    import urllib2
    from urllib import urlencode
except:
    import hashlib as md5
    import urllib.request as urllib2
    from urllib.parse import urlencode

accessKey = ''   # your API KEY
secretKey = ''   

def api(method, *args):
    d = {
        'version': '1.0',
        'access_key': accessKey,
        'method': method,
        'args': json.dumps(list(args)),
        'nonce': int(time.time() * 1000),
        }

    d['sign'] = md5.md5(('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).encode('utf-8')).hexdigest()
    # Note: for the timeout problem of "urllib2.urlopen" function, you can set the timeout time; for example, urllib2.urlopen ('https://www.fmz.com/api/v1', urlencode(d).encode('utf-8'), timeout = 10), that is, set timeout for 10 seconds
    return json.loads(urllib2.urlopen('https://www.fmz.com/api/v1', urlencode(d).encode('utf-8')).read().decode('utf-8'))

# Return the docker list
print(api('GetNodeList'))
# Return the exchange list
print(api('GetPlatformList'))
# GetRobotList(offset, length, robotStatus, label), passing "-1" means obtaining all
print(api('GetRobotList', 0, 5, -1, 'member2'))
# CommandRobot(robotId, cmd) sends command to live trading
print(api('CommandRobot', 123, 'ok'))
# StopRobot(robotId) returns the live trading status code
print(api('StopRobot', 123))  
# RestartRobot(robotId) returns the live trading status code
print(api('RestartRobot', 123))
# GetRobotDetail(robotId) returns detailed live trading information
print(api('GetRobotDetail', 123))
package main

import (
    "fmt"
    "time"
    "encoding/json"
    "crypto/md5"
    "encoding/hex"
    "net/http"
    "io/ioutil"
    "strconv"
    "net/url"
)

// Fill in your own FMZ platform api key
var apiKey string = ""                                  
// Fill in your own FMZ platform secret key
var secretKey string = ""                               
var baseApi string = "https://www.fmz.com/api/v1"

func api(method string, args ... interface{}) (ret interface{}) {
    // Process args
    jsonStr, err := json.Marshal(args)
    if err != nil {
        panic(err)
    }

    params := map[string]string{
        "version" : "1.0", 
        "access_key" : apiKey,
        "method" : method,
        "args" : string(jsonStr),
        "nonce" : strconv.FormatInt(time.Now().UnixNano() / 1e6, 10),
    }    

    data := fmt.Sprintf("%s|%s|%s|%v|%s", params["version"], params["method"], params["args"], params["nonce"], secretKey)
    h := md5.New()
    h.Write([]byte(data))
    sign := h.Sum(nil)

    params["sign"] = hex.EncodeToString(sign)

    // http request 
    client := &http.Client{}

    // request 
    urlValue := url.Values{}
    for k, v := range params {
        urlValue.Add(k, v)
    }
    urlStr := urlValue.Encode()
    request, err := http.NewRequest("GET", baseApi + "?" + urlStr, nil)
    if err != nil {
        panic(err)
    }    

    resp, err := client.Do(request)
    if err != nil {
        panic(err)
    }

    defer resp.Body.Close()

    b, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    ret = string(b)
    return 
}

func main() {
    settings := map[string]interface{}{
        "name": "hedge test",
        "strategy": 104150,                      
        // K-line period parameter, "60" means 60 seconds
        "period": 60,                           
        "node" : 73938,                         
        "appid": "member2",                
        "exchanges": []interface{}{
            map[string]interface{}{
                "eid": "Exchange", 
                "label" : "test_bjex", 
                "pair": "BTC_USDT", 
                "meta" : map[string]interface{}{
                    // Fill in the access key
                    "AccessKey": "",                                
                    // Fill in the secret key
                    "SecretKey": "",                                
                    "Front" : "http://127.0.0.1:6666/exchange",
                },
            },
        },
    }

    method := "RestartRobot"
    fmt.Println("Call interface:", method)
    ret := api(method, 124577, settings)
    fmt.Println("main ret:", ret)
}

Vérification directe

Il prend en charge la vérificationtoken(passer)secret_keyVous pouvez générer une URL directement accessible. Par exemple, l'URL qui donne directement des instructions interactives à les échanges en direct, qui peuvent être utilisés pourTradingViewou leWebHookPour les autres cas.CommandRobot(RobotId, Cmd)fonction, le paramètrenoncen'a pas besoin de vérification, et la fréquence d'accès et les temps de visite de l'interface ne sont pas limités.

Par exemple, leAccessKeyde l'extension crééeAPI KEYest:xxxet leSecretKeyest:yyy. Consultez le lien suivant pour envoyer un message de commande interactif à les transactions en direct avec l'ID de négociation en direct186515, le message le contenu est une chaîne:"ok12345".


https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=[186515,"ok12345"]

Si la vérification directe est soutenue, seulementCommandRobotl'interface est prise en charge pour obtenir leBodyPar exemple, les paramètres dans leWebHook URLdeTradingView:


https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=[186515,+""]

Veuillez faire attention au réglage selon le format suivant:args=[130350,+""], dans lequel130350est la négociation en directIDde la plateforme de négociation quantitative FMZ.

Mettre dans la boîte de message deTrading View(l'organisme requis) données à envoyer):

  • Format JSON:

    https://www.fmz.comimg

    {"close": {{close}}, "name": "aaa"}
    

    Les échanges en direct avecIDde186515peut recevoir la chaîne de commande interactive:{"close": 39773.75, "name": "aaa"}.

  • Format du texte:

    https://www.fmz.comimg

    BTCUSDTPERP Crossing 39700.00 close: {{close}}
    

    Les échanges en direct avecIDde186515peut recevoir la chaîne de commande interactive:BTCUSDTPERP Crossing 39700.00 close: 39739.4.

Exemples dePython & Golangappels linguistiques:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import json
import ssl

ssl._create_default_https_context = ssl._create_unverified_context

try:
    import urllib2
except:
    import urllib.request as urllib2

accessKey = 'your accessKey'
secretKey = 'your secretKey'

def api(method, *args):
    return json.loads(urllib2.urlopen(('https://www.fmz.com/api/v1?access_key=%s&secret_key=%s&method=%s&args=%s' % (accessKey, secretKey, method, json.dumps(list(args)))).replace(' ', '')).read().decode('utf-8'))

# If APIKEY does not have the interface permission, the call to
print(api('RestartRobot', 186515)) will fail, and the returned data
is: {'code': 4, 'data': None}
# print(api('RestartRobot', 186515))

# Printed Id: the live trading details of 186515
print(api('GetRobotDetail', 186515))  
package main

import (
    "fmt"
    "encoding/json"
    "net/http"
    "io/ioutil"
    "net/url"
)

// Fill in your own FMZ platform api key
var apiKey string = "your access_key"

// Fill in your own FMZ platform secret key
var secretKey string = "your secret_key"
var baseApi string = "https://www.fmz.com/api/v1"

func api(method string, args ... interface{}) (ret interface{}) {
    jsonStr, err := json.Marshal(args)
    if err != nil {
        panic(err)
    }
    
    params := map[string]string{
        "access_key" : apiKey,
        "secret_key" : secretKey,
        "method" : method,
        "args" : string(jsonStr),
    }    

    // http request 
    client := &http.Client{}

    // request 
    urlValue := url.Values{}
    for k, v := range params {
        urlValue.Add(k, v)
    }
    urlStr := urlValue.Encode()
    request, err := http.NewRequest("GET", baseApi + "?" + urlStr, nil)
    if err != nil {
        panic(err)
    }    

    resp, err := client.Do(request)
    if err != nil {
        panic(err)
    }

    defer resp.Body.Close()

    b, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    ret = string(b)
    return 
}

func main() {
    method := "GetRobotDetail"
    fmt.Println("Call interface:", method)
    ret := api(method, 186515)
    fmt.Println("main ret:", ret)
}

Utilisez l'API étendue sur FMZ Quant pour réaliser l'alerte TradingView négociation de signaux

Explication de l'interface API étendue

  • L'interface API étendue de la plateforme de négociation quantitative FMZ Ajouter les paramètres de requête (séparés par?) de la demande immédiatementhttps://www.fmz.com/api/v1Les paramètres de demande exprimés à l'aide dePython:

    {
        "version"   : "1.0",
        "access_key": "xxx",
        "method"    : "GetNodeList",
        "args"      : [],
        "nonce"     : 1516292399361,
        "sign"      : "085b63456c93hfb243a757366600f9c2"
    }
    
    Les champs Directions de conduite
    version Numéro de version.
    accès_clé AccessKey, demandez-le sur la page de gestion de compte.
    méthode La méthode d'appel spécifique.
    les args La liste des paramètres de la méthode spécifique appelée.
    nonce L'horodatage, en millisecondes, permet une erreur d'une heure par rapport à l'horodatage standard.
    signe Signature.

    Chaque nom de paramètre est séparé par le caractère&, et les noms et valeurs des paramètres sont reliés au symbole=. L'URL complète de la demande (en prenantmethod=GetNodeListà titre d'exemple):

    https://www.fmz.com/api/v1?access_key=xxx&nonce=1516292399361&args=%5B%5D&sign=085b63456c93hfb243a757366600f9c2&version=1.0&method=GetNodeList
    

    Notez qu'il n'y a passecret_keyparamètre parmi les paramètres de demande.

  • Méthode de signature Lesignle paramètre du paramètre de demande est chiffré comme suit, selon le format:

    version + "|" + method + "|" + args + "|" + nonce + "|" + secretKey
    

    Après avoir concaténé des chaînes, utilisezMD5algorithme de chiffrement pour chiffrer la chaîne et la convertir en une valeur de chaîne de données hexadécimale, désignée par la valeur du paramètresign. pour la partie relative à la signature, voir lePythonInterface de l'API d'extension de codeMéthodes de vérification :

    # Parameter
    d = {
        'version': '1.0',
        'access_key': accessKey,
        'method': method,
        'args': json.dumps(list(args)),
        'nonce': int(time.time() * 1000),
    }
    
    # Calculate "sign" signature
    d['sign'] = md5.md5(('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).encode('utf-8')).hexdigest()
    

Obtenez une liste de nœuds

LeGetNodeListla méthode est utilisée pour obtenir la liste des dockers dans le cadre du compte de la plateforme de négociation quantitative FMZ correspondant auAPI KEYdans la demande.

{
    "code": 0,
    "data": {
        "result": {
            "all": 1,
            "nodes": [{
                "build": "3.7",
                "city": "...",
                "created": "2024-11-08 09:21:08",
                "date": "2024-11-08 16:37:16",
                "forward": "...",
                "guid": "...",
                "host": "node.fmz.com:9902",
                "id": 123,
                "ip": "...",
                "is_owner": true,
                "loaded": 0,
                "name": "MacBook-Pro-2.local",
                "online": true,
                "os": "darwin/amd64",
                "peer": "...",
                "public": 0,
                "region": "...",
                "tunnel": false,
                "version": "...",
                "wd": 0
            }]
        },
        "error": null
    }
}

Description des champs de valeurs renvoyées (la signification littérale est évidente et ne sera pas répétée):

  • tous: le nombre de dockers associés au compte courant.
  • les nœuds: enregistre les détails du nœud dock.
    • construire: numéro de version.
    • ville: la ville où vous vous trouvez.
    • is_owner: vrai indique un dock privé, faux indique un dock public.
    • chargé: Chargement, nombre d'instances de stratégie.
    • public: 0 indique un dock privé, 1 un dock public.
    • région: situation géographique.
    • version: informations détaillées sur la version du docker.
    • wd: Activer ou non l'alarme hors ligne, 0 signifie non activé. Le docker de déploiement en un clic contient des informations supplémentaires.ecs_etunit_, qui enregistre les informations pertinentes du serveur docker de déploiement en un clic (nom de l'opérateur, configuration, statut, etc.), cycle de facturation, prix et autres informations, qui ne seront pas répétées ici.

Aucun paramètre

Réservez la liste des groupes

GetRobotGroupList()renvoie la liste des groupes de négociation en direct du compte de la plateforme de négociation quantitative FMZ correspondant auAPI KEYdans la demande.

{
    "code": 0,
    "data": {
        "result": {
            "items": [{
                "id": 3417,
                "name": "Test"
            }, {
                "id": 3608,
                "name": "Live trading demo"
            }]
        },
        "error": null
    }
}
  • les éléments: informations sur les regroupements de négociation en direct.
    • Id: Groupe de négociation en direct Id.
    • nom: nom du groupe de négociation en direct. LeitemsLe champ n'enregistre que les groupes nouvellement créés.items.

Aucun paramètre

Remplissez la liste des plateformes

GetPlatformList()renvoie la liste des bourses qui ont ont été ajoutés par le compte de la plateforme de négociation quantitative FMZ correspondant à laAPI KEYdans la demande.

{
    "code": 0,
    "data": {
        "result": {
            "all": 2,
            "platforms": [{
                "category": "加密货币||Crypto",
                "date": "2023-12-07 13:44:52",
                "eid": "Binance",
                "id": 123,
                "label": "Binance",
                "logo": "...",
                "name": "币安现货|Binance",
                "stocks": ["BTC_USDT", "LTC_USDT", "ETH_USDT", "ETC_USDT", "BTC_TUSD", "ETH_TUSD", "BNB_TUSD"],
                "website": "..."
            }, {
                "category": "通用协议|Custom Protocol",
                "date": "2020-11-09 11:23:48",
                "eid": "Exchange",
                "id": 123,
                "label": "XX Exchange REST Protocol",
                "logo": "...",
                "name": "通用协议|Custom Protocol",
                "stocks": ["BTC_USDT", "ETH_USDT"],
                "website": ""
            }]
        },
        "error": null
    }
}

Aucun paramètre

Je suis en train d' écrire une lettre à GetRobot.

LeGetRobotListCette méthode est utilisée pour obtenir la liste des transactions en direct sous le compte de la plateforme de négociation quantitative FMZ correspondant à laAPI KEYdans la demande.

{
    "code": 0,
    "data": {
        "result": {
            "all": 53,
            "robots": [{
                "date": "2017-12-25 09:29:27",
                "end_time": "2017-12-28 17:44:21",
                "id": 66054,
                // If the value is 1, the live trading is a virtual platform live trading
                "is_sandbox": 1,                                      
                "name": "C++ test strategy",
                "node_guid": "705d9aaaaaaaa93b49baaaaa787581cb087",
                "profit": 0,
                "public": 0,
                "refresh": 151345645647000,
                "start_time": "2017-12-28 17:44:15",
                "status": 3,
                "strategy_id": 65365,
                "strategy_isowner": true,
                "strategy_name": "C++  Version Docker API Test Strategy(cryptocurrency futures and spot markets)",
                "wd": 0
            }, ...
            ]
        },
        "error": null
    }
}

Le réglage de décalage de la requête de paging. décalage faux Numéro Le réglage de la longueur de la requête de page. longueur faux Numéro Spécifier l'état de la négociation en direct à interroger, se référer à l'interface API étendueCode de négociation en directPassez.-1pour obtenir tous les échanges en direct. robotStatus faux Numéro Spécifiez l'étiquette personnalisée du trading en direct que vous souhaitez interroger, et vous pouvez filtrer tous les transactions en direct de cette étiquette. étiquette faux chaîne

Prends lePythonL'interface API étendue du langageMéthodes de vérificationà titre d'exemple:print(api('GetRobotList', 'member2')): imprimer les informations de toutes les opérations en direct avec l'étiquette personnaliséemember2. print(api('GetRobotList', 0, 5, -1, 'member2')): pages de 0 à 5 et liste jusqu'à 5 robotsmember2.

CommanderRobot

LeCommandRobotCette méthode est utilisée pour envoyer une commande d'interaction à la transaction en direct sous le compte de la plateforme de négociation quantitative FMZ correspondant à laAPI KEYL'ID de la transaction en direct recevant la commande d'interaction est l'ID de transaction en direct spécifié par lerobotIdparamètre, et la commande d'interaction est renvoyée par leGetCommand()fonction appelée dans la stratégie pour la capturer.

{
    // The API request was successfully executed
    "code": 0,
    "data": {
        // However, sending a command to live trading that is not running returns failure
        "result": false,       
        "error": null
    }
}

Le paramètrerobotIdest utilisé pour spécifier l'ID du trading en direct qui reçoit la commande interactive.GetRobotListméthode permettant d'obtenir les informations relatives aux transactions en direct sous le compte, qui contient l'identifiant des transactions en direct. robotId vrai Numéro Le paramètrecmdest la commande interactive envoyée au bot; la commande sera capturée par la fonctionGetCommand(), qui déclenche la logique interactive dans la stratégie.GetCommand()fonction dans leManuel de l'API de la plateforme de négociation quantique FMZ- Je ne sais pas. Cmd vrai chaîne

ArrêtezRobot

StopRobot(RobotId)est utilisé pour demander leAPI KEYL'identifiant de négociation en temps réel à arrêter est l'identifiant de négociation en temps réel spécifié par lerobotId parameter.

{
    "code": 0,
    "data": {
        // 2 means stopping
        "result": 2,           
        "error": null
    }
}

Le paramètrerobotIdest utilisé pour spécifier l'ID de la négociation en direct à arrêter.GetRobotListméthode permettant d'obtenir les informations relatives aux transactions en direct sous le compte, qui contient l'identifiant des transactions en direct. robotId vrai Numéro

Redémarrer le robot

LeRestartRobotLa méthode est utilisée pour redémarrer les transactions en direct dans le cadre duAPI KEYL'identifiant de la négociation en direct redémarrée est l'identifiant de la négociation en direct spécifié par lerobotId parameter.

{
    "code": 0,
    "data": {
        // 1 means running
        "result": 1,          
        "error": null
    }
}

LerobotIdLe paramètre est utilisé pour spécifier l'ID de la négociation en direct à redémarrer.GetRobotListméthode permettant d'obtenir les informations relatives aux transactions en direct sous le compte, qui contient l'identifiant des transactions en direct. robotId vrai Numéro Les paramètres de la configuration de négociation en direct, les paramètressettingsle format est le suivant:

{
    "name": "hedge test",
    // Strategy parameter
    "args": [["Interval", 500]],            
    // Strategy ID, which can be obtained with "GetStrategyList" method
    "strategy": 25189,                      
    // K-line period parameter, "60" means 60 seconds
    "period": 60,                           
    // Specify on which docker to run; if the attribute is not written, it will be automatically assigned to run
    "node" : 51924,                         
    // Custom field
    "appid": "member2",                     
    "exchanges": [
        // ZB; "pid" can be obtained by "GetPlatformList" method
        {"pid": 15445, "pair": "ETH_BTC"},     
        // OKX; 2 exchange objects are configured
        {"pid": 13802, "pair": "BCH_BTC"},     
        
        // In addition to the platforms ("pid" identification) configured by the FMZ dashboard, you can also set exchange configuration information that has not been configured to operate live trading
        {"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "xxx", "SecretKey": "yyy"}},
        {"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "xxx", "SecretKey": "yyy"}}
    ]
}

Lorsque vous utilisez des informations sensibles, telles que la plateformeAPI KEY, y compris"meta":{"AccessKey":"xxx","SecretKey":"yyy"}dans la configuration deeid, vous devez savoir que FMZ ne stocke pas les données. Les données seront envoyées directement au programme docker, donc ces informations doivent être configurées chaque fois que le trading en direct est créé ou redémarré.

Pour redémarrer le commerce en direct qui utilise le plugin pour soutenir l'échange, lors de la configuration dusettingsparamètre, vous devez effectuer les réglages suivants pour leexchangesattribut:

{"eid": "Exchange", "label" : "testXXX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123", "SecretKey": "1234", "Front" : "http://127.0.0.1:6666/XXX"}}

labelL'attribut est de définir une étiquette pour l'objet d'échange accessible par le système actuel.Protocole général, qui peut être obtenue par leexchange.GetLabel()Le rôle de l'entreprise dans la stratégie.

paramètres faux Objet JSON

Si le trading en direct est créé par l'API étendue, l'API étendueRestartRobot (RobotId, Settings)doit être utilisé pour redémarrer, et lesettingsLe trading en direct créé sur la page de la plateforme peut être redémarré via l'API étendue ou en cliquant sur le bouton sur la page.settingsParamètre. Si vous passez seulement leRobotIdparamètre, démarrer la négociation en direct selon les paramètres de négociation en direct actuels.

GetRobotDétails

LeGetRobotDetailCette méthode est utilisée pour obtenir les détails de la négociation en direct sous le compte de la plateforme de négociation quantitative FMZ correspondant à laAPI KEYL'identifiant de la transaction en direct à récupérer est l'identifiant de la transaction en direct spécifié par lerobotId parameter.

{
    "code": 0,
    "data": {
        "result": {
            "robot": {
                // Next payment time, namely the effective cut-off time after the current payment
                "charge_time": 1561992608,                                                  
                // Elapsed Time
                "charged": 3600,                                                            
                // Amount consumed (0.125 CNY = 12500000 / 1e8)
                "consumed": 12500000,                                                       
                "date": "2019-07-01 21:50:08",
                "debug": "{\"Nano\":1561989722431145193,\"Stderr\":\"\",\"Stdout\":\"\"}",  
                // Stop time
                "end_time": "2019-07-01 22:02:02",                                          
                // The docker ID assigned when live trading is running; if it is automatic, the value is -1
                "fixed_id": 85960,                                                          
                "id": 150288,
                "is_deleted": 0,
                // Whether it has the permission to manage live trading
                "is_manager": true,                                                         
                // Whether it is a simulation trading
                "is_sandbox": 0,                                                            
                // Live trading name
                "name": "Spread monitoring2",                                                         
                // Docker ID
                "node_id": 85960,                                                           
                // The exchange objects configured by live trading
                "pexchanges": {                                                             
                    // 14703 is pid, and "GateIO" is exchange name
                    "14703": "GateIO",                                                      
                    "15445": "ZB",
                    "42960": "OKEX",
                    "44314": "Huobi"
                },
                // label information of the exchange object configured by live trading
                "plabels": {                                                                
                    "14703": "Gate.IO (old name: BTER)",
                    "15445": "ZB",
                    "42960": "OKEX spot V3 test",
                    "44314": "Huobi - newest test"
                },
                "profit": 0,
                // Whether to show public
                "public": 0,                                                                
                // Recent active time
                "refresh": 1561989724000,                                                   
                "robot_args": "[[\"TickInterval\",500],[\"StrOnePair\",\"spot:Huobi:spot;spot:OKEX:spot;false;60;5;0;0\"],[\"StrTwoPair\",\"spot:ZB:spot;spot:GateIO:spot;false;60;5;0;0\"],[\"StrThreePair\",\"null\"],[\"StrFourPair\",\"null\"],[\"StrSixPair\",\"null\"],[\"StrFivePair\",\"null\"],[\"ResetChart\",false]]",
                "start_time": "2019-07-01 22:00:54",
                // Live trading status
                "status": 4,                                                                
                "strategy_args": "[[\"TickInterval\",\"Detection frequency (ms)\",\"This is millisecond. Don't set it too small.\",500],[\"StrOnePair\",\"Combination1\",\"Spread Combination\",\"spot:Huobi:spot;spot:OKCoin:spot;false;60;5;0;0\"],[\"StrTwoPair\",\"Combination2\",\"Spread Combination\",\"future:Futures_OKCoin:this_week;spot:OKCoin:spot;false;60;5;0;0\"],[\"StrThreePair\",\"Combination3\",\"Spread Combination\",\"future:Futures_OKCoin:this_week;future:Futures_OKCoin:quarter;true;60;5;0;0\"],[\"StrFourPair\",\"Combination4\",\"Spread Combination\",\"null\"],[\"StrSixPair\",\"Combination6\",\"Combination\",\"null\"],[\"StrFivePair\",\"Combination5\",\"Combination\",\"null\"],[\"ResetChart\",\"whether to clear the previous chart\",\"clear the previous chart\",false]]",
                // Configured exchange objects, set trading pair information
                "strategy_exchange_pairs": "[60,[44314,42960,15445,14703],[\"BTC_USDT\",\"BTC_USDT\",\"ETH_USDT\",\"ETH_USDT\"]]",
                // Strategy ID
                "strategy_id": 21337,                                                       
                // Strategy's last modification time
                "strategy_last_modified": "2018-11-29 12:07:58",                            
                // Strategy name
                "strategy_name": "Digital currency spread monitoring and analysis",                                       
                "summary": "Polling time consuming: 500ms\n`[{\"type\":\"table\",\"title\":\"pair basic data\",\"cols\":[\"ID\",\"NameA - NameB\",\"SymbolA - SymbolB\",\"UpdCycle\",\"isUSD\",\"Collect\"],\"rows\":[[\"0 \",\"Huobi/OKEX\",\"spot/spot\",60,false,\"612ms\"],[\"1 \",\"ZB/GateIO\",\"spot/spot\",60,false,\"501ms\"]]},{\"type\":\"table\",\"title\":\"pair ticker data\",\"cols\":[\"ID\",\"NameA - NameB\",\"SymbolA - SymbolB\",\"A_Bids1\",\"B_Asks1\",\"Plus\",\"A_Asks1\",\"B_Bids1\",\"Minus\"],\"rows\":[[\"0 \",\"Huobi/OKEX\",\"spot/spot\",10518.02,10525.1,-7.08,10520,10523,-3],[\"1 \",\"ZB/GateIO\",\"spot/spot\",285.68,286,-0.32,285.8,285.85,-0.05]]},{\"type\":\"table\",\"title\":\"pair statistical data\",\"cols\":[\"ID\",\"NameA - NameB\",\"SymbolA - SymbolB\",\"Maximum spread\",\"Minimum spread\",\"Mean positive premium\",\"Mean negative premium\"],\"rows\":[[\"0 \",\"Huobi/OKEX\",\"spot/spot\",0,-3,0,-1.47],[\"1 \",\"ZB/GateIO\",\"spot/spot\",0.03,-0.05,0.03,-0.05]]}]`\n",
                // Whether to enable offline alert
                "wd": 0                                                                      
            }
        },
        "error": null
    }
}

LerobotIdLe paramètre est utilisé pour spécifier l'Id du commerce en direct pour lequel les détails doivent être obtenus.GetRobotListméthode permettant d'obtenir des informations sur les transactions en direct sous le compte, qui contient l'identifiant des transactions en direct. robotId vrai Numéro

Lesummaryl'attribut dans les données renvoyées (informations sur la barre d'état du bot; mis en cache pendant 10 secondes; pas les données les plus récentes) a actuellement une limite de quantité de données (données mises en cache). Si vous avez besoin de plus de données de la barre d'état, vous pouvez utiliser leGetRobotLogsl'interface à obtenir (lorsqueGetRobotLogsobtient les informations de la barre d'état, le champsummarysont les données les plus récentes).

La description de l'attribut destrategy_exchange_pairsPrenons par exemple les données suivantes:

[60,[44314,42960,15445,14703],[\"BTC_USDT\",\"BTC_USDT\",\"ETH_USDT\",\"ETH_USDT\"]]

Les premières données60représente la période par défaut de la ligne K définie par la négociation en direct est de 1 minute, soit 60 secondes.[44314,42960,15445,14703]est l'objet d'échangepidconfiguré pour la négociation en direct (selon l'ordre d'ajout).[\"BTC_USDT\",\"BTC_USDT\",\"ETH_USDT\",\"ETH_USDT\"]est la paire de négociation définie pour l'objet d'échange configuré par négociation en direct (dans l'ordre d'addition et en correspondance un-à-un avecpid).

Compte de prise de vue

LeGetAccountLa méthode est utilisée pour acquérir les informations relatives au compte correspondant à laAPI KEYà la demande du compte de la plateforme de négociation quantitative FMZ.

{
    "code": 0, 
    "data": {
        "result": {
            "username": "littlelittledream",
            "level": 0,
            "consumed": 3235500000,
            "invitation_code": "1545967",
            "points": 25,
            // The value here, due to precision control, is expressed in integer. To convert it to actual value, you need to divide it by 1e8 (i.e. 10 to the 8th power), and the actual result here is: 65.421
            "balance": 6542100000               
        },
        "error": None
    }
}

Je vais vous donner une liste.

LeGetExchangeListLa méthode est utilisée pour obtenir la liste des bourses et les informations de configuration requises prises en charge par la plateforme de négociation quantitative FMZ.

{
    "code": 0,
    "data": {
        "result": {
            "exchanges": [{
                "website": "https://www.huobi.pro/",
                "name": "Huobi",
                "priority": 1,
                "meta": "[{"desc": "Access Key", "required": true, "type": "string", "name": "AccessKey", "label": "Access Key"}, {"encrypt": true, "name": "SecretKey", "required": true, "label": "Secret Key", "type": "password", "desc": "Secret Key"}]",
                "eid": "Huobi",
                "logo": "huobi.png",
                "id": 1
            }, {
                "website": "https://www.kex.com/",
                "name": "KEX",
                "priority": -99,
                "meta": "[{"desc": "Access Key", "required": true, "type": "string", "name": "AccessKey", "label": "Access Key"}, {"encrypt": true, "name": "SecretKey", "required": true, "label": "Secret Key", "type": "password", "desc": "Secret Key"}, {"encrypt": true, "required": true, "type": "password", "name": "Password", "label": "Trading Password"}]",
                "eid": "KEX",
                "logo": "",
                "id": 43
            }, 

             ...
      
            ]
        },
        "error": null
    }
}

Supprimer le nœud

LeDeleteNode(Nid)Cette méthode est utilisée pour supprimer le nœud docker correspondant à laAPI KEYdans la demande du compte de la plateforme de trading FMZ Quant.nid parameter.

{
    "code":0,
    "data":{
        "result":true,
        "error":null
    }
}

LenidLe paramètre est utilisé pour spécifier l'Id du docker à supprimer.GetNodeListméthode pour obtenir des informations sur les dockers du compte. nid vrai Numéro

SupprimerRobot

LeDeleteRobot(RobotId, DeleteLogs)Cette méthode est utilisée pour supprimer les transactions en direct correspondant à laAPI KEYL'identifiant de négociation en direct supprimé est l'identifiant de négociation en direct spécifié par lerobotId parameter.

// Return value after successful deletion
{
    "code": 0,
    "data": {
        "result": 0,
        "error": null
    }
}

Le paramètrerobotIdest utilisé pour spécifier l'ID de la transaction en direct à supprimer.GetRobotListméthode permettant d'obtenir les informations relatives aux transactions en direct sous le compte, qui contient l'identifiant des transactions en direct. robotId vrai Numéro LedeleteLogsParamètre utilisé pour définir si le journal de négociation en direct doit être supprimé si une valeur vraie est passée (par exemple:true), le journal des transactions en direct est supprimé. supprimerLogs vrai Boole

Je suis en train d' écrire une lettre.

LeGetStrategyList()La méthode est utilisée pour obtenir l'information stratégique correspondant à laAPI KEYà la demande du compte de la plateforme de négociation quantitative FMZ.

{
    "code": 0,
    "data": {
        "result": {
            "strategies": [{
                "category": 0,
                "username": "yifidslei",
                "is_owner": true,
                "name": "fmz simulation trading test strategy",
                "language": 0,
                "hasToken": false,
                "args": "[]",
                "is_buy": false,
                "public": 0,
                "last_modified": "2018-01-18 12:36:03",
                "date": "2018-01-17 09:19:32",
                "forked": 0,
                "id": 63372
            }, {
                "category": 20,
                "username": "bifndslez",
                "is_owner": true,
                "name": "Plot library",
                "language": 0,
                "hasToken": false,
                "args": "[]",
                "is_buy": false,
                "public": 0,
                "last_modified": "2017-05-08 09:44:18",
                "date": "2017-04-19 10:38:14",
                "forked": 0,
                "id": 39677
            },
            
            ...
            ],
            "all": 20
        },
        "error": null
    }
}

Je suis un robot.

LeNewRobotCette méthode est utilisée pour créer une transaction en direct dans le cadre de laAPI KEYcorrespondant au compte de la plateforme de négociation quantitative FMZ figurant dans la demande.

// Create live trading successfully
{
    "code": 0,
    "data": {
        "result": 74260,
        "error": null
    }
}

les paramètres de configuration de négociation en direct,settingsle format des paramètres est le suivant:

{
    "name": "hedge test",
    /*
    Strategy parameters; the order does not have to be in correspondence with the parameter order, but the name must be the same as the parameter name 
    Note: the second element in the parameter array ["MAType", 0, 75882] is an array including three elements,
    in which the first one "MAType" is the parameter on the pattern referred by the live trading-binding strategy
    The second one "0" is the specific value set by the parameter "MAType".
    The third element, 75882, is the ID of the template to which the MAType parameter belongs, and is used to identify which template the parameter belongs to
    */
    "args": [["Interval", 500], ["MAType", 0, 75882]],
    // Strategy ID, which can be obtained by "GetStrategyList" method
    "strategy": 25189,                      
    // K-line period parameter; "60" indicates 60 seconds
    "period": 60,                           
    // It can be specified to run on which docker; no writing of the attribute will lead to automatic assignment
    "node" : 52924,                         
    // Custom field
    "appid": "member2",
    // Specify live trading group
    "group": 1122,
    "exchanges": [
        // ZB; "pid" can be obtained by "GetPlatformList" method
        {"pid": 15445, "pair": "ETH_BTC"},     
        // OKEX
        {"pid": 13802, "pair": "BCH_BTC"},     
        // In addition to the exchanges configured by the FMZ dashboard (pid identification), you can also set exchange configuration information that has not been configured to operate the live trading
        {"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "xxx", "SecretKey": "yyy"}},
        {"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "xxx", "SecretKey": "yyy"}}
    ]
}

paramètres vrai Objet JSON

Lorsque vous utilisez des informations sensibles, telles que la plateformeAPI KEY, y compris"meta":{"AccessKey":"xxx","SecretKey":"yyy"}dans la configuration deeid, vous devez savoir que FMZ ne stocke pas les données. Les données seront envoyées directement au programme docker, de sorte que ces informations doivent être configurées chaque fois que le trading en direct est créé ou redémarré.

Si vous voulez créer le commerce en direct qui utilise le plugin pour soutenir la plate-forme, lors de la configuration dusettingsparamètre, vous devez effectuer les réglages suivants pour leexchangesattribut:

{"eid": "Exchange", "label" : "testXXX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123", "SecretKey": "1234", "Front" : "http://127.0.0.1:6666/XXX"}}

labelL'attribut est de définir une étiquette pour l'objet d'échange accessible par le protocole général actuel, qui peut être obtenue par leexchange.GetLabel()Le rôle de l'entreprise dans la stratégie.

Plugin exécuté

LePluginRunLa méthode est utilisée pour appeler leoutil de débogagefonction de la plateforme de négociation quantitative FMZ.

{
    "code": 0, 
    "data": {
        "result": "...", 
        "error": null
    }
}

Les paramètres de réglage dans l'outil de débogage,settingsconfiguration, inclure le code d'essai dans lesourceL'attributsettingsLe format du paramètre est le suivant:

    # K-line period parameter, "60" indicates 60 seconds
    "period": 60,
    "source": "function main() {Log("Hello FMZ")}", 
    # The docker ID can specify which docker to run the bot on; if the value is -1, it means automatic assignment
    "node" : 54913,
    "exchanges": [
        {"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}},
        {"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}
    ]
} ```
settings
true
JSON object

```{"eid": "OKEX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}```
```{"eid": "Huobi", "pair": "BCH_BTC", "meta" :{"AccessKey": "123abc", "SecretKey": "123abc"}}```

For the ```exchanges``` attribute in the ```settings```, the attribute only needs to be set to 1, when calling the ```PluginRun``` interface (for only one exchange object can be supported when you use the "Debug Tool" page).
No error will be reported when you set 2 exchange objects  in ```settings```, but an error will be reported when the second exchange object is accessed in the code.


### GetRobotLogs

The ```GetRobotLogs``` method is used to get the log information of the live trading under the FMZ Quant Trading Platform account corresponding to the ```API KEY``` in the request. The Id of the live trading platform to be obtained is the live trading platform Id specified by the ```robotId``` parameter.

Je ne sais pas. code: 0, données : { résultat: { statut: 1, temps de mise à jour : 1527049990197, wd: 0, // La première structure de données dans les journaux est les enregistrements de journaux dans la table de journaux de stratégie dans la base de données de trading en direct logs: [{
Max: 3984, Je ne sais pas. [3977, 3, Futures_OKCoin, , 0, 0, Sell ((688.9, 2): 20016, 1526954372591, , ], [3976, 5, , , 0, 0, OKCoin:this_week positions excessives, long: 2, 1526954372410, , ] ], Total : 1503, Min: 2482 Je ne sais pas.
// La deuxième structure de données dans les journaux est les enregistrements de journaux dans la table de journaux de stratégie dans la base de données de trading en direct max: 0, Arr: [], Total: 0, Min: 0 Je ne sais pas.
// La troisième structure de données dans les journaux est les enregistrements de journaux dans la table de journaux de stratégie dans la base de données de trading en direct max: 0, Arr: [], Total: 0, Min: 0 Les États membres graphique: , réfresh: 1527049988000, résumé: ..., "ChartTime": 0, "node_id": 50755, " en ligne ": vrai Le numéro de référence: "erreur": nul Je ne sais pas. Je ne sais pas.



The ```robotId``` parameter is used to specify the Id of the live trading for which the log information is to be obtained. You can use the ```GetRobotList``` method to obtain information about the live trading under the account, which contains the live trading Id.
robotId
true
number
The ```logMinId``` parameter is used to specify the minimum Id of the Log.
logMinId
true
number
The ```logMaxId``` parameter is used to specify the maximum Id of the Log.
logMaxId
true
number
The ```logOffset``` parameter is used to set the offset, after determining the range  by ```logMinId``` and ```logMaxId```, offset based on the ```logOffset``` (how many records are skipped). Start as the starting position for fetching data.
logOffset
true
number
The parameter ```logLimit``` is used to set the number of data records to be selected after the starting position is determined.
logLimit
true
number
The ```profitMinId``` parameter is used to set the minimum Id of the profit log.
profitMinId
true
number
The parameter ```profitMaxId``` is used to set the maximum Id of the profit log.
profitMaxId
true
number
The parameter ```profitOffset``` is used to set the offset (how many records are skipped) as the starting position.
profitOffset
true
number
The parameter ```profitLimit``` is used to set the number of data records to be selected after the starting position is determined.
profitLimit
true
number
The parameter ```chartMinId``` is used to set the minimum Id of the chart data record.
chartMinId
true
number
The parameter ```chartMaxId``` is used to set the maximum Id of the chart data record.
chartMaxId
true
number
The parameter ```chartOffset``` is used to set the offset.
chartOffset
true
number
The parameter ```chartLimit``` is used to set the number of records to obtain.
chartLimit
true
number
The parameter ```chartUpdateBaseId``` is used to set the base Id after the query is updated.
chartUpdateBaseId
true
number
The parameter ```chartUpdateDate``` is used to set the data record update timestamp, and it will filter out records greater than this timestamp.
chartUpdateDate
true
number
The parameter ```summaryLimit``` is used to set the number of bytes of status bar data to be queried. The parameter is of integer type for querying the status bar data of the live trading.
Setting to "0" means there is no need to query the status bar information, and setting to non-zero number indicates the number of bytes of the status bar information to be queried (the interface does not limit the data quantity, so you can specify a larger ```summaryLimit``` parameter to get all status bar information). The status bar data is stored in the returned data ```summary```.

summaryLimit
true
number

- The strategy log table in the database
  The ```Arr``` attribute value in the first element of the ```Logs``` attribute value (array structure) in the return data (log data) is described as follows:
  

Je ne sais pas. [3977, 3, Futures_OKCoin, , 0, 0, Sell ((688.9, 2): 20016, 1526954372591, , ], [3976, 5, , , 0, 0, OKCoin:this_week trop de positions, long: 2, 1526954372410, , ] ],


| id | logType | eid | orderId | price | amount | extra | date | contractType | direction |
| - | - | - | - | - | - | - | - | - | - |
| 3977 | 3 | "Futures_OKCoin" | "" | 0 | 0 | "Sell(688.9, 2): 20016" | 1526954372591 | "" | "" |
| 3976 | 5 | "" | "" | 0 | 0 | "OKCoin:this_week too many positions, long: 2" | 1526954372410 | "" | "" |

```extra``` is the attached message of the printed log.

The specific log types represented by the ```logType``` values are described as follows:

| logType: | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| - | - | - | - | - | - | - | - |
| Meaning of logType: | BUY | SALE | RETRACT | ERROR | PROFIT | MESSAGE | RESTART |

- Log table of the profit chart in the database
The data in the chart's log table is consistent with the profit log in the strategy log table.

Je ne sais pas. [202, 2515.44, 1575896700315], [201, 1415.44, 1575896341568] Je ne sais pas.


Take one of the log data as an example:

[202, 2515.44, 1575896700315]


```202``` is log ```ID```; ```2515.44``` is profit value; ```1575896700315``` is timestamp.
- Chart log table in the database

Je ne sais pas. Je ne sais pas si vous êtes d'accord avec moi. Je ne sais pas si tu veux que je te dise quelque chose. Je ne sais pas.


Take one of the log data as an example:

Je ne sais pas si vous êtes d'accord avec moi.


```23637``` is the log ```ID```, ```0``` is the index of the chart data series, and the last data ```"{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"``` is the log data; This data is the K-line data on the chart.
Bibliothèque intégrée Terminal de négociation