FMZ Quant hat die erweiterte API-Schnittstelle der Plattform eröffnet, um programmatische Aufrufe zu verschiedenen Funktionen der FMZ Quant Trading Platform zu unterstützen.
Die FMZ Quant Trading Plattform unterstützt das Berechtigungsmanagement der
die erweiterte API-Schnittstelle und die Berechtigung derAPI KEY
kann eingestellt werden. Auf der API KEY
.
Sie können das Eingabefeld API KEY
, und geben Sie die*
Symbol für alleErweiterte API-SchnittstelleBerechtigungen. Wenn Sie bestimmte Benutzeroberflächenberechtigungen angeben möchten, müssen Sie den entsprechenden erweiterten API-Funktionsnamen eingeben. Verwenden Sie Kommas, um zu trennen, zum Beispiel:GetRobotDetail,DeleteRobot
Das gibt uns dasAPI KEY
die Erlaubnis zur Anrufung derErhalten Sie detaillierte Informationen zum Live-HandelSchnittstelle undLive-Handel gelöscht interface.
DieAPI KEY
Die Verwaltungseite ermöglicht es Ihnen auch,Änderungen,
Ausfall, Löschendie erschaffen wurdenAPI KEY
.
Ein Beispiel für die Struktur, die durch die erweiterte API-Schnittstelle zurückgegeben wird, ist wie folgt:
"code":0,
"data":{
// ...
}
}
Diecode
Feld is: Der beim Aufruf der erweiterten API-Schnittstelle zurückgegebene Statuscode für das Ergebnis des Aufrufs.
Beschreibung | Code |
---|---|
Erfolgreiche Ausführung | 0 |
Falscher API-Schlüssel | 1 |
Falsche Unterschrift | 2 |
Nicht-Fehler | 3 |
Falsche Methode | 4 |
Falscher Parameter | 5 |
Interner unbekannter Fehler | 6 |
DieGetRobotList
SchnittstelleGetRobotDetail
Schnittstelle,
und derGetRobotLogs
Daten aus der Schnittstelle in diestatus
Feld für: Code für den Status des Live-Handels.
Status | Code |
---|---|
Inaktivität | 0 |
In Betrieb | 1 |
Aufhören | 2 |
Ausgeschrieben | 3 |
Aufgehalten | 4 |
Die Strategie hat Fehler. | 5 |
Status | Code |
---|---|
Die Strategie ist abgelaufen, und bitte kontaktieren Sie den Autor, um es wieder zu kaufen | -1 |
Kein Docker gefunden | -2 |
Fehler bei der Kompilierung der Strategie | -3 |
Der Live-Handel läuft bereits. | -4 |
Unzureichende Bilanz | -5 |
Die Anzahl der gleichzeitigen Strategien überschreitet die Grenze | -6 |
Es gibt zwei Verifizierungsmethoden beim Aufruf der erweiterten API-Schnittstelle, dietoken
Überprüfung und direkte Überprüfung.
Verwendungmd5
Verschlüsselungsmethode zur Überprüfung, BeispielPython
, Golang
Sprachruf:
#!/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)
}
Es unterstützt die Überprüfung ohnetoken
(übergeben)secret_key
Sie können eine URL generieren, die direkt zugänglich ist.
Beispiel: die URL, die direkt interaktive Anweisungen an
Live-Handel, der fürTradingView
oder derWebHook
In anderen Fällen wird ein Rückruf verlangt.CommandRobot(RobotId, Cmd)
Funktion, der Parameternonce
die Daten nicht überprüft werden müssen, und die Zugriffsfrequenz und
Die Besuchszeiten der Schnittstelle sind nicht begrenzt.
Zum BeispielAccessKey
der erstellten ErweiterungAPI KEY
ist:xxx
und derSecretKey
ist:yyy
. Senden Sie eine interaktive Befehlsnachricht an
der Live-Handel mit der Live-Handel-ID186515
, die Botschaft
Content ist eine Zeichenfolge:"ok12345"
.
https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=[186515,"ok12345"]
Unter der Voraussetzung, dass die direkte Überprüfung unterstützt wird,
nurCommandRobot
Interface wird unterstützt, um dieBody
Die Daten in der Anfrage.WebHook URL
vonTradingView
:
https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=[186515,+""]
Achten Sie auf die Einstellung nach folgendem Format:args=[130350,+""]
, in denen130350
ist der Live-HandelID
der FMZ Quant Trading Plattform.
In der Nachrichtenbox vonTrading View
(die angeforderte
JSON-Format
{"close": {{close}}, "name": "aaa"}
Der Live-Handel mitID
von186515
kann die interaktive Befehlszeile empfangen:{"close": 39773.75, "name": "aaa"}
.
Textformat:
BTCUSDTPERP Crossing 39700.00 close: {{close}}
Der Live-Handel mitID
von186515
kann die interaktive Befehlszeile empfangen:BTCUSDTPERP Crossing 39700.00 close: 39739.4
.
Beispiele fürPython
& Golang
Sprachanrufe:
#!/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)
}
Verwenden Sie die erweiterte API auf FMZ Quant, um
Die erweiterte API-Schnittstelle der FMZ Quant Trading Platform
Anschließen der Abfrageparameter?
) des Antrags unmittelbarhttps://www.fmz.com/api/v1
Die folgenden Anforderungsparameter werden mitPython
:
{
"version" : "1.0",
"access_key": "xxx",
"method" : "GetNodeList",
"args" : [],
"nonce" : 1516292399361,
"sign" : "085b63456c93hfb243a757366600f9c2"
}
Felder | Anweisungen |
---|---|
Ausgabe | Versionnummer. |
Zugriff_Schlüssel | AccessKey, beantragen Sie es auf der Account-Management-Seite. |
Methode | Die spezifische Anrufmethode. |
Args | Die Parameterliste der bestimmten aufgerufenen Methode. |
nicht | Zeitstempel, in Millisekunden, erlaubt einen Fehler von 1 Stunde vom Standardzeitstempel. Nonce muss größer sein als der Nonce-Wert des letzten Zugriffs. |
Zeichen | Signature. |
Jeder Parametername wird durch das Zeichen getrennt&
, und die Parameternamen und -werte sind mit dem Symbol verbunden=
. Die vollständige Anfrage-URL (mitmethod=GetNodeList
zum Beispiel):
https://www.fmz.com/api/v1?access_key=xxx&nonce=1516292399361&args=%5B%5D&sign=085b63456c93hfb243a757366600f9c2&version=1.0&method=GetNodeList
Beachten Sie, dass es keinesecret_key
Parameter unter den Anforderungsparametern.
Signaturmethode
Diesign
Parameter im Anforderungsparameter wird entsprechend dem Format wie folgt verschlüsselt:
version + "|" + method + "|" + args + "|" + nonce + "|" + secretKey
Nachdem Sie die Zeichenketten verbunden haben, verwenden SieMD5
Verschlüsselungsalgorithmus zur Verschlüsselung der Zeichenfolge und Umwandlung in einen hexadezimalen Datenzeichenwert, der als Parameterwert bezeichnet wirdsign
- für den Unterschriftenteil siehePython
Code-Erweiterungs-API-SchnittstelleÜberprüfungsverfahren :
# 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()
DieGetNodeList
Verfahren wird verwendet, um die Liste der Hafenarbeiter zu erhalten
der FMZ Quant Trading Plattform, die demAPI KEY
in der Anfrage.
{
"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
}
}
Beschreibung der zurückgegebenen Wertfelder (die wörtliche Bedeutung ist offensichtlich und wird nicht wiederholt):
ecs_
undunit_
, die die relevanten Informationen des One-Click-Deployment-Docker-Servers (Betreibername, Konfiguration, Status usw.), Rechnungszyklus, Preis und andere Informationen, die hier nicht wiederholt werden, erfasst.Keine Parameter
GetRobotGroupList()
Gibt die Liste der Live-Handelsgruppen zurück
des FMZ Quant Trading Platform-Kontos, das demAPI KEY
in der Anfrage.
{
"code": 0,
"data": {
"result": {
"items": [{
"id": 3417,
"name": "Test"
}, {
"id": 3608,
"name": "Live trading demo"
}]
},
"error": null
}
}
items
Das Feld items
.Keine Parameter
GetPlatformList()
Gibt die Liste der Börsen zurück, die
wurde durch das entsprechende Konto der FMZ Quant Trading Platform hinzugefügt
DieAPI KEY
in der Anfrage.
{
"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
}
}
Keine Parameter
DieGetRobotList
Die Methode wird verwendet, um die Liste der Live-Handelsgeschäfte unter dem Konto der FMZ Quant Trading Platform zu erhalten.API KEY
in der Anfrage.
{
"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
}
}
Die Auslagerung der Paging-Abfrage.
Verzögerung
falsche
Zahl
Die Längeneinstellung der Paging-Abfrage.
Länge
falsche
Zahl
Geben Sie den Status des zu abfragenden Live-Handels an, siehe erweiterte API-SchnittstelleLive-Handelskode- Gehen Sie durch.-1
um alle Live-Tradings zu bekommen.
RobotStatus
falsche
Zahl
Geben Sie das benutzerdefinierte Label des Live-Handels an, den Sie abfragen möchten, und Sie können alle Live-Handels von diesem Label filtern.
Etikett
falsche
String
Nehmen Sie diePython
Spracheprint(api('GetRobotList', 'member2'))
: Drucken Sie die Informationen für alle Live-Handlungen mit dem benutzerdefinierten Etikettmember2
. print(api('GetRobotList', 0, 5, -1, 'member2'))
: Seiten von 0 bis 5 und Liste von bis zu 5 Robotern mitmember2
.
DieCommandRobot
Die Methode wird verwendet, um einen Interaktionsbefehl an den Live-Handel unter dem Konto der FMZ Quant Trading Platform zu senden, der demAPI KEY
Die ID des Live-Handels, der den Interaktionsbefehl erhält, ist die von derrobotId
Der Interaktionsbefehl wird von derGetCommand()
Funktion in der Strategie aufgerufen, um es zu erfassen.
{
// 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
}
}
Der ParameterrobotId
Wird verwendet, um die ID des Live-Handels anzugeben, der den interaktiven Befehl erhält.GetRobotList
Methode, um die Informationen über den Live-Handel unter dem Konto zu erhalten, das die Live-Handel-ID enthält.
RobotId
- Das stimmt.
Zahl
Der Parametercmd
ist der interaktive Befehl, der an den Bot gesendet wird; der Befehl wird von der Funktion erfasstGetCommand()
, die die interaktive Logik in der Strategie auslöst.GetCommand()
Funktion imFMZ Quant Trading Plattform API Handbuch- Ich weiß.
cmd
wahr
String
StopRobot(RobotId)
wird verwendet, um dieAPI KEY
Die Live-Trading-ID, mit der der Betrieb beendet werden soll, ist die von der FMZ Quant Trading Platform angegebene Live-Trading-ID.robotId
parameter.
{
"code": 0,
"data": {
// 2 means stopping
"result": 2,
"error": null
}
}
Der ParameterrobotId
Sie können die ID des Live-Handels, der gestoppt werden soll, angeben.GetRobotList
Methode, um die Informationen über den Live-Handel unter dem Konto zu erhalten, das die Live-Handel-ID enthält.
RobotId
- Das stimmt.
Zahl
DieRestartRobot
Die Methode wird zur Wiederaufnahme des Live-Handels im Rahmen derAPI KEY
Die ID des wieder aufgenommenen Live-Handels ist die von der FMZ Quant Trading Platform angegebene Live-Handels-ID.robotId
parameter.
{
"code": 0,
"data": {
// 1 means running
"result": 1,
"error": null
}
}
DierobotId
Der Parameter wird verwendet, um die ID des Live-Handels anzugeben, der neu gestartet wird.GetRobotList
Methode, um die Informationen über den Live-Handel unter dem Konto zu erhalten, das die Live-Handel-ID enthält.
RobotId
- Das stimmt.
Zahl
Die Parameter der Live-Handelskonfiguration, die Parametersettings
Das Format ist wie folgt:
{
"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"}}
]
}
Wenn Sie die sensiblen Informationen verwenden, wie zum Beispiel die PlattformAPI KEY
, einschließlich"meta":{"AccessKey":"xxx","SecretKey":"yyy"}
in der Konfiguration voneid
, sollten Sie wissen, dass FMZ die Daten nicht speichert. Die Daten werden direkt an das Dockerprogramm gesendet, so dass diese Informationen jedes Mal konfiguriert werden müssen, wenn Live-Handel erstellt oder neu gestartet wird.
Um den Live-Handel neu zu starten, der das Plugin verwendet, um den Austausch zu unterstützen, wenn die Konfiguration dersettings
Sie sollten die folgenden Einstellungen für dieexchanges
Eigenschaft:
{"eid": "Exchange", "label" : "testXXX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123", "SecretKey": "1234", "Front" : "http://127.0.0.1:6666/XXX"}}
label
Attribut ist, um ein Etikett für das Exchange-Objekt zu setzen, auf das der aktuelleAllgemeines Protokoll, die durch dieexchange.GetLabel()
die Rolle der Kommission in der Strategie.
Einstellungen falsche JSON-Objekt
Wenn der Live-Handel durch die erweiterte API erstellt wird, wird die erweiterte APIRestartRobot (RobotId, Settings)
Die Anlage muss für den Neustart verwendet werden, und diesettings
Der auf der Plattformseite erstellte Live-Handel kann über die erweiterte API oder durch Klicken auf die Schaltfläche auf der Seite neu gestartet werden.settings
Wenn Sie nur dieRobotId
Parameter, starten Sie den Live-Handel gemäß den aktuellen Live-Handelseinstellungen.
DieGetRobotDetail
Die Methode wird verwendet, um die Einzelheiten des Live-Handels unter dem Konto der FMZ Quant Trading Platform zu erhalten, die demAPI KEY
Die zu abrufende ID des Live-Handels ist die von derrobotId
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
}
}
DierobotId
Der Parameter wird verwendet, um die ID des Live-Handels anzugeben, für den die Details zu erhalten sind.GetRobotList
Methode zur Erfassung von Informationen über den Live-Handel auf dem Konto, die die Live-Handel-ID enthält.
RobotId
- Das stimmt.
Zahl
Diesummary
Attribut in den zurückgegebenen Daten (Informationen auf der Bot-Statusleiste; 10 Sekunden lang zwischengespeichert; nicht die neuesten Daten) hat derzeit ein Datenmengelimit (zwischengespeicherte Daten).
Die Datenmenge beträgt 200KB, und die überschüssigen Daten werden abgeschnitten.GetRobotLogs
Schnittstelle zu erhalten (wennGetRobotLogs
Erhält die Informationen der Statusleiste, das Feldsummary
ist die jüngste Daten).
Die Attributbeschreibung vonstrategy_exchange_pairs
, nehmen wir beispielsweise folgende Daten:
[60,[44314,42960,15445,14703],[\"BTC_USDT\",\"BTC_USDT\",\"ETH_USDT\",\"ETH_USDT\"]]
Die ersten Daten60
stellt die Standard K-Line-Periode dar, die durch den Live-Handel festgelegt wurde und 1 Minute, also 60 Sekunden beträgt.[44314,42960,15445,14703]
ist das Austauschobjektpid
für den Live-Handel konfiguriert (nach der Addition-Order).[\"BTC_USDT\",\"BTC_USDT\",\"ETH_USDT\",\"ETH_USDT\"]
ist das Handelspaar, das für das von Live-Handel konfigurierte Tauschobjekt gesetzt wurde (in der Reihenfolge der Addition und in einer Eins-zu-Eins-Korrespondenz mitpid
).
DieGetAccount
Die Methode wird verwendet, um die Kontoinformationen zu erfassen, die derAPI KEY
in der Anfrage des Kontos der FMZ Quant Trading Platform.
{
"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
}
}
DieGetExchangeList
Diese Methode wird verwendet, um die Liste der Börsen und die erforderlichen Konfigurationsinformationen zu erhalten, die von der FMZ Quant Trading Platform unterstützt werden.
{
"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
}
}
DieDeleteNode(Nid)
Methode wird verwendet, um den Docker-Knoten zu löschen, der demAPI KEY
Die gelöschte Docker-Knoten-ID ist die von dernid
parameter.
{
"code":0,
"data":{
"result":true,
"error":null
}
}
Dienid
Sie können die Parameter für die Identifizierung des zu löschenden Dockers verwenden.GetNodeList
Die Kommission hat eine Reihe von Maßnahmen ergriffen.
Nied
wahr
Zahl
DieDeleteRobot(RobotId, DeleteLogs)
Die Methode wird verwendet, um den Live-Handel zu löschen, der demAPI KEY
Die gelöschte Live-Trading-ID ist die Live-Trading-ID, die vomrobotId
parameter.
// Return value after successful deletion
{
"code": 0,
"data": {
"result": 0,
"error": null
}
}
Der ParameterrobotId
Sie können die ID des zu löschenden Live-Handels verwenden.GetRobotList
Methode, um die Informationen über den Live-Handel unter dem Konto zu erhalten, das die Live-Handel-ID enthält.
RobotId
- Das stimmt.
Zahl
DiedeleteLogs
Der Parameter wird verwendet, um festzulegen, ob das Live-Trading-Log gelöscht werden soll, wenn ein wahrer Wert übergeben wird (z. B.:true
), wird das Live-Handelsprotokoll gestrichen.
DeleteLogs
wahr
Boole
DieGetStrategyList()
Die Methode wird verwendet, um die Strategieinformationen zu erhalten, die derAPI KEY
in der Anfrage des Kontos der FMZ Quant Trading Platform.
{
"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
}
}
DieNewRobot
Die Methode wird verwendet, um einen Live-Handel im Rahmen derAPI KEY
dem im Antrag angegebenen Konto der FMZ Quant Trading Platform entspricht.
// Create live trading successfully
{
"code": 0,
"data": {
"result": 74260,
"error": null
}
}
Die Live-Handelskonfigurationsparameter,settings
Das Format der Parameter ist wie folgt:
{
"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"}}
]
}
Einstellungen wahr JSON-Objekt
Wenn Sie die sensiblen Informationen verwenden, wie zum Beispiel die PlattformAPI KEY
, einschließlich"meta":{"AccessKey":"xxx","SecretKey":"yyy"}
in der Konfiguration voneid
, sollten Sie wissen, FMZ speichert die Daten nicht.
Die Daten werden direkt an das Dockerprogramm gesendet, so dass diese Informationen jedes Mal konfiguriert werden müssen, wenn der Live-Handel erstellt oder neu gestartet wird.
Wenn Sie wollen, um Live-Handel zu erstellen, die das Plugin verwendet, um die Plattform zu unterstützen, bei der Konfiguration dersettings
Sie sollten die folgenden Einstellungen für dieexchanges
Eigenschaft:
{"eid": "Exchange", "label" : "testXXX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123", "SecretKey": "1234", "Front" : "http://127.0.0.1:6666/XXX"}}
label
Das Attribut ist ein Etikett für das Exchange-Objekt, auf das das aktuelle allgemeine Protokoll zugreift, zu setzen, das durch dieexchange.GetLabel()
die Rolle der Kommission in der Strategie.
DiePluginRun
Die Methode wird verwendet, um dieDebug-ToolFunktion der FMZ Quant Trading Plattform.
{
"code": 0,
"data": {
"result": "...",
"error": null
}
}
Die Einstellungsparameter im Debugger,settings
die Prüfungskode in diesource
Das Attributsettings
Das Parameterformat ist wie folgt:
# 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.
- Ich weiß.
// Die zweite Datenstruktur in Logs ist die Log-Einträge in der Strategie-Log-Tabelle in der Live-Trading-Datenbank
// Die dritte Datenstruktur in Logs ist die Log-Einträge in der Strategie-Log-Tabelle in der Live-Trading-Datenbank
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:
Ich bin nicht derjenige, der das Problem hat.
[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.
Ich bin nicht derjenige, der das Problem hat. [202, 2515.44, 1575896700315], [201, 1415.44, 1575896341568] ]
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
Ich bin nicht derjenige, der das Problem hat.
[23637, 0,
Take one of the log data as an example:
[23637, 0,
```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.
Eingebettete Bibliothek
Handelsterminal