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.
La plateforme de négociation quantitative FMZ prend en charge la gestion des autorisations
l'interface API étendue, et l'autorisation deAPI KEY
peut être réglé. Sur l'option API KEY
.
Vous pouvez modifier la zone d'entrée API 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 KEY
l'autorisation d'appeler leObtenez des informations détaillées sur le trading en directl'interface et leSupprimer les opérations en direct interface.
LeAPI KEY
la page de gestion vous permet également demodifier,
désactiver, supprimerLes créaturesAPI KEY
.
Un exemple de la structure renvoyée par l'interface API étendue est le suivant:
"code":0,
"data":{
// ...
}
}
Lecode
champ 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 |
LeGetRobotList
l'interface, leGetRobotDetail
une interface,
et leGetRobotLogs
Les données de retour de l'interface dans lestatus
champ pour: le code de l'état de négociation en direct.
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 |
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 |
Il y a deux méthodes de vérification lors de l'appel de l'interface API étendue,token
la vérification et la vérification directe.
Utilisationmd5
méthode de chiffrement à vérifier, exemple dePython
, Golang
Appel 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)
}
Il prend en charge la vérificationtoken
(passer)secret_key
Vous 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 pourTradingView
ou leWebHook
Pour les autres cas.CommandRobot(RobotId, Cmd)
fonction, le paramètrenonce
n'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, leAccessKey
de l'extension crééeAPI KEY
est:xxx
et leSecretKey
est: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,
seulementCommandRobot
l'interface est prise en charge pour obtenir leBody
Par exemple, les paramètres dans leWebHook URL
deTradingView
:
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 lequel130350
est la négociation en directID
de la plateforme de négociation quantitative FMZ.
Mettre dans la boîte de message deTrading View
(l'organisme requis)
données à envoyer):
Format JSON:
{"close": {{close}}, "name": "aaa"}
Les échanges en direct avecID
de186515
peut recevoir la chaîne de commande interactive:{"close": 39773.75, "name": "aaa"}
.
Format du texte:
BTCUSDTPERP Crossing 39700.00 close: {{close}}
Les échanges en direct avecID
de186515
peut recevoir la chaîne de commande interactive:BTCUSDTPERP Crossing 39700.00 close: 39739.4
.
Exemples dePython
& Golang
appels 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
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/v1
Les 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_key
paramètre parmi les paramètres de demande.
Méthode de signature
Lesign
le 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, utilisezMD5
algorithme 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 lePython
Interface 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()
LeGetNodeList
la 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 KEY
dans 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):
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
GetRobotGroupList()
renvoie la liste des groupes de négociation en direct
du compte de la plateforme de négociation quantitative FMZ correspondant auAPI KEY
dans la demande.
{
"code": 0,
"data": {
"result": {
"items": [{
"id": 3417,
"name": "Test"
}, {
"id": 3608,
"name": "Live trading demo"
}]
},
"error": null
}
}
items
Le champ n'enregistre que les groupes nouvellement créés.items
.Aucun paramètre
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 KEY
dans 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
LeGetRobotList
Cette 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 KEY
dans 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.-1
pour 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 lePython
L'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
.
LeCommandRobot
Cette 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 KEY
L'ID de la transaction en direct recevant la commande d'interaction est l'ID de transaction en direct spécifié par lerobotId
paramè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ètrerobotId
est utilisé pour spécifier l'ID du trading en direct qui reçoit la commande interactive.GetRobotList
mé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ètrecmd
est 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
StopRobot(RobotId)
est utilisé pour demander leAPI KEY
L'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ètrerobotId
est utilisé pour spécifier l'ID de la négociation en direct à arrêter.GetRobotList
mé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
LeRestartRobot
La méthode est utilisée pour redémarrer les transactions en direct dans le cadre duAPI KEY
L'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
}
}
LerobotId
Le paramètre est utilisé pour spécifier l'ID de la négociation en direct à redémarrer.GetRobotList
mé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ètressettings
le 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 dusettings
paramètre, vous devez effectuer les réglages suivants pour leexchanges
attribut:
{"eid": "Exchange", "label" : "testXXX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123", "SecretKey": "1234", "Front" : "http://127.0.0.1:6666/XXX"}}
label
L'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 lesettings
Le 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.settings
Paramètre. Si vous passez seulement leRobotId
paramètre, démarrer la négociation en direct selon les paramètres de négociation en direct actuels.
LeGetRobotDetail
Cette 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 KEY
L'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
}
}
LerobotId
Le paramètre est utilisé pour spécifier l'Id du commerce en direct pour lequel les détails doivent être obtenus.GetRobotList
mé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
Lesummary
l'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 leGetRobotLogs
l'interface à obtenir (lorsqueGetRobotLogs
obtient les informations de la barre d'état, le champsummary
sont les données les plus récentes).
La description de l'attribut destrategy_exchange_pairs
Prenons par exemple les données suivantes:
[60,[44314,42960,15445,14703],[\"BTC_USDT\",\"BTC_USDT\",\"ETH_USDT\",\"ETH_USDT\"]]
Les premières données60
repré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'échangepid
configuré 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
).
LeGetAccount
La 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
}
}
LeGetExchangeList
La 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
}
}
LeDeleteNode(Nid)
Cette méthode est utilisée pour supprimer le nœud docker correspondant à laAPI KEY
dans la demande du compte de la plateforme de trading FMZ Quant.nid
parameter.
{
"code":0,
"data":{
"result":true,
"error":null
}
}
Lenid
Le paramètre est utilisé pour spécifier l'Id du docker à supprimer.GetNodeList
méthode pour obtenir des informations sur les dockers du compte.
nid
vrai
Numéro
LeDeleteRobot(RobotId, DeleteLogs)
Cette méthode est utilisée pour supprimer les transactions en direct correspondant à laAPI KEY
L'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ètrerobotId
est utilisé pour spécifier l'ID de la transaction en direct à supprimer.GetRobotList
mé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
LedeleteLogs
Paramè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
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
}
}
LeNewRobot
Cette méthode est utilisée pour créer une transaction en direct dans le cadre de laAPI KEY
correspondant 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,settings
le 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 dusettings
paramètre, vous devez effectuer les réglages suivants pour leexchanges
attribut:
{"eid": "Exchange", "label" : "testXXX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123", "SecretKey": "1234", "Front" : "http://127.0.0.1:6666/XXX"}}
label
L'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.
LePluginRun
La 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,settings
configuration, inclure le code d'essai dans lesource
L'attributsettings
Le 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.
// 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
// 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
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,
| 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