FMZ Quant đã mở giao diện API mở rộng của nền tảng để hỗ trợ các cuộc gọi theo chương trình đến các chức năng khác nhau của nền tảng giao dịch FMZ Quant.
Nền tảng giao dịch lượng tử FMZ hỗ trợ quản lý giấy phép của
giao diện API mở rộng, và quyền củaAPI KEY
có thể được thiết lập. Trên API KEY
.
Bạn có thể chỉnh sửa hộp nhập API KEY
, và nhập vào*
biểu tượng để cho phép tất cảGiao diện API mở rộngquyền. Nếu bạn muốn xác định quyền giao diện cụ thể, bạn cần nhập tên hàm API mở rộng tương ứng. Sử dụng dấu phẩy để tách, ví dụ:GetRobotDetail,DeleteRobot
Điều này cho thấyAPI KEY
sự cho phép gọiNhận thông tin chi tiết về giao dịch trực tiếpgiao diện vàXóa giao dịch trực tiếp interface.
CácAPI KEY
trang quản lý cũng cho phép bạnsửa đổi,
vô hiệu, xóaNhững người được tạo raAPI KEY
.
Một ví dụ về cấu trúc được trả về bởi giao diện API mở rộng là như sau:
"code":0,
"data":{
// ...
}
}
Cáccode
trường is: Mã trạng thái kết quả cuộc gọi được trả về khi gọi giao diện API mở rộng.
Mô tả | Mã |
---|---|
Hoạt động thành công | 0 |
KEY API sai | 1 |
Chữ ký sai | 2 |
Lỗi nonce | 3 |
Phương pháp sai | 4 |
Parameter không chính xác | 5 |
Lỗi không rõ bên trong | 6 |
CácGetRobotList
giao diện,GetRobotDetail
giao diện,
vàGetRobotLogs
giao diện trả về dữ liệu trongstatus
trường cho: mã trạng thái giao dịch trực tiếp.
Tình trạng | Mã |
---|---|
Không hoạt động | 0 |
Trong hoạt động | 1 |
Ngừng | 2 |
Được ký kết | 3 |
Ngừng | 4 |
Chiến lược có lỗi. | 5 |
Tình trạng | Mã |
---|---|
Chiến lược đã hết hạn, và xin vui lòng liên hệ với nhà văn để mua lại nó | -1 |
Không tìm thấy docker | -2 |
Lỗi biên dịch chiến lược | -3 |
Giao dịch trực tiếp đã được chạy | -4 |
Số dư không đủ | -5 |
Số chiến lược đồng thời vượt quá giới hạn | -6 |
Có hai phương pháp xác minh khi gọi giao diện API mở rộng, hỗ trợtoken
xác minh và xác minh trực tiếp.
Sử dụngmd5
phương pháp mã hóa để xác minh, ví dụ vềPython
, Golang
tiếng gọi:
#!/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)
}
Nó hỗ trợ xác minh mà không cầntoken
(trượt)secret_key
trực tiếp), bạn có thể tạo ra một URL có thể được truy cập trực tiếp.
ví dụ, URL trực tiếp cung cấp các hướng dẫn tương tác để
giao dịch trực tiếp, có thể được sử dụng đểTradingView
hoặcWebHook
cho các trường hợp khác.CommandRobot(RobotId, Cmd)
chức năng, tham sốnonce
không cần xác minh, và tần suất truy cập và
Thời gian truy cập giao diện không bị giới hạn.
Ví dụ:AccessKey
của phần mở rộng được tạoAPI KEY
là:xxx
vàSecretKey
là:yyy
. Xem liên kết sau để gửi một thông báo lệnh tương tác đến
giao dịch trực tiếp với ID giao dịch trực tiếp186515
, thông điệp
content là một chuỗi:"ok12345"
.
https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=[186515,"ok12345"]
Trong trường hợp xác minh trực tiếp được hỗ trợ,
chỉCommandRobot
giao diện được hỗ trợ để có đượcBody
Ví dụ, các cài đặt trongWebHook URL
củaTradingView
:
https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyy&method=CommandRobot&args=[186515,+""]
Chú ý để thiết lập theo định dạng sau:args=[130350,+""]
, trong đó130350
là giao dịch trực tiếpID
của FMZ Quant Trading Platform.
Đặt trong hộp tin nhắn củaTrading View
(các
Định dạng JSON:
{"close": {{close}}, "name": "aaa"}
Các giao dịch trực tiếp vớiID
của186515
có thể nhận chuỗi lệnh tương tác:{"close": 39773.75, "name": "aaa"}
.
Định dạng văn bản:
BTCUSDTPERP Crossing 39700.00 close: {{close}}
Các giao dịch trực tiếp vớiID
của186515
có thể nhận chuỗi lệnh tương tác:BTCUSDTPERP Crossing 39700.00 close: 39739.4
.
Ví dụ:Python
& Golang
Gọi ngôn ngữ:
#!/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)
}
Sử dụng API mở rộng trên FMZ Quant để nhận ra cảnh báo
Giao diện API mở rộng của FMZ Quant Trading Platform
Thêm các tham số truy vấn (loại biệt bởi?
) của yêu cầu ngay sau khihttps://www.fmz.com/api/v1
Sau đây là các tham số yêu cầu được thể hiện bằng cách sử dụngPython
:
{
"version" : "1.0",
"access_key": "xxx",
"method" : "GetNodeList",
"args" : [],
"nonce" : 1516292399361,
"sign" : "085b63456c93hfb243a757366600f9c2"
}
Vùng đất | Hướng dẫn |
---|---|
phiên bản | Số phiên bản. |
access_key | AccessKey, xin nó trên trang quản lý tài khoản. |
phương pháp | Phương pháp gọi cụ thể. |
args | Danh sách tham số của phương thức cụ thể được gọi. |
nonce | Mẫu thời gian, bằng millisecond, cho phép một lỗi 1 giờ từ dấu thời gian tiêu chuẩn. Nonce phải lớn hơn giá trị nonce của lần truy cập cuối cùng. |
ký hiệu | Signature. |
Mỗi tên tham số được tách bởi ký tự&
, và các tên và giá trị tham số được kết nối với biểu tượng=
. URL yêu cầu đầy đủmethod=GetNodeList
ví dụ:
https://www.fmz.com/api/v1?access_key=xxx&nonce=1516292399361&args=%5B%5D&sign=085b63456c93hfb243a757366600f9c2&version=1.0&method=GetNodeList
Lưu ý rằng không cósecret_key
tham số trong số các tham số yêu cầu.
Phương pháp ký hiệu
Cácsign
tham số trong tham số yêu cầu được mã hóa như sau, theo định dạng:
version + "|" + method + "|" + args + "|" + nonce + "|" + secretKey
Sau khi kết nối chuỗi, sử dụngMD5
thuật toán mã hóa để mã hóa chuỗi và chuyển đổi nó thành một giá trị chuỗi dữ liệu thập phân, được gọi là giá trị của tham sốsign
Đối với phần chữ ký, hãy tham khảoPython
giao diện API mở rộng mãPhương pháp xác minh :
# 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()
CácGetNodeList
phương pháp được sử dụng để có được danh sách các dockers
theo tài khoản nền tảng giao dịch lượng tử FMZ tương ứng vớiAPI KEY
trong yêu cầu.
{
"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
}
}
Mô tả các trường giá trị trả về (ý nghĩa theo nghĩa đen là hiển nhiên và sẽ không được lặp lại):
ecs_
vàunit_
, ghi lại các thông tin liên quan của máy chủ docker triển khai một nhấp chuột (tên nhà điều hành, cấu hình, trạng thái, vv), chu kỳ thanh toán, giá và các thông tin khác, sẽ không được lặp lại ở đây.Không có tham số
GetRobotGroupList()
trả về danh sách nhóm giao dịch trực tiếp
của tài khoản FMZ Quant Trading Platform tương ứngAPI KEY
trong yêu cầu.
{
"code": 0,
"data": {
"result": {
"items": [{
"id": 3417,
"name": "Test"
}, {
"id": 3608,
"name": "Live trading demo"
}]
},
"error": null
}
}
items
trường chỉ ghi lại các nhóm mới được tạo.items
.Không có tham số
GetPlatformList()
trả về danh sách các sàn giao dịch có
đã được thêm bởi các tài khoản FMZ Quant Trading Platform tương ứng
đếnAPI KEY
trong yêu cầu.
{
"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
}
}
Không có tham số
CácGetRobotList
phương pháp được sử dụng để có được danh sách giao dịch trực tiếp dưới tài khoản FMZ Quant Trading Platform tương ứng vớiAPI KEY
trong yêu cầu.
{
"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
}
}
Cài đặt chuyển hướng truy vấn.
bù đắp
sai
số
Cài đặt chiều dài truy vấn tìm kiếm.
chiều dài
sai
số
Xác định trạng thái giao dịch trực tiếp được truy vấn, tham khảo giao diện API mở rộngMã giao dịch trực tiếp, vượt qua-1
để có được tất cả các giao dịch trực tiếp.
robotStatus
sai
số
Xác định nhãn tùy chỉnh của giao dịch trực tiếp mà bạn muốn truy vấn, và bạn có thể lọc tất cả các giao dịch trực tiếp của nhãn này.
nhãn
sai
chuỗi
Hãy lấyPython
giao diện API mở rộng của languageprint(api('GetRobotList', 'member2'))
: in thông tin của tất cả các giao dịch trực tiếp với nhãn tùy chỉnhmember2
. print(api('GetRobotList', 0, 5, -1, 'member2'))
: trang từ 0 đến 5 và liệt kê tối đa 5 robot được gắn nhãnmember2
.
CácCommandRobot
phương pháp được sử dụng để gửi lệnh tương tác đến giao dịch trực tiếp dưới tài khoản nền tảng giao dịch FMZ Quant tương ứng vớiAPI KEY
ID của giao dịch trực tiếp nhận lệnh tương tác là ID giao dịch trực tiếp được chỉ định bởirobotId
tham số, và lệnh tương tác được trả về bởi cácGetCommand()
chức năng được gọi trong chiến lược để nắm bắt nó.
{
// 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
}
}
Các thông sốrobotId
được sử dụng để chỉ định ID của giao dịch trực tiếp nhận lệnh tương tác.GetRobotList
phương pháp để có được thông tin giao dịch trực tiếp dưới tài khoản, chứa ID giao dịch trực tiếp.
robotId
đúng
số
Các thông sốcmd
là lệnh tương tác được gửi đến bot; lệnh sẽ được chụp bởi hàmGetCommand()
, kích hoạt logic tương tác trong chiến lược.GetCommand()
chức năng trongFMZ Quant Trading Platform API Manual.
cmd
đúng
chuỗi
StopRobot(RobotId)
được sử dụng để yêu cầuAPI KEY
tương ứng với giao dịch trực tiếp của tài khoản nền tảng giao dịch FMZ Quant.robotId
parameter.
{
"code": 0,
"data": {
// 2 means stopping
"result": 2,
"error": null
}
}
Các thông sốrobotId
được sử dụng để chỉ định ID của giao dịch trực tiếp để được dừng lại.GetRobotList
phương pháp để có được thông tin giao dịch trực tiếp dưới tài khoản, chứa ID giao dịch trực tiếp.
robotId
đúng
số
CácRestartRobot
phương pháp được sử dụng để khởi động lại giao dịch trực tiếp theoAPI KEY
ID của giao dịch trực tiếp được khởi động lại là ID giao dịch trực tiếp được chỉ định bởirobotId
parameter.
{
"code": 0,
"data": {
// 1 means running
"result": 1,
"error": null
}
}
CácrobotId
Các tham số được sử dụng để chỉ định ID của giao dịch trực tiếp để được khởi động lại.GetRobotList
phương pháp để có được thông tin giao dịch trực tiếp dưới tài khoản, chứa ID giao dịch trực tiếp.
robotId
đúng
số
Các thông số cấu hình giao dịch trực tiếp, các thông sốsettings
định dạng như sau:
{
"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"}}
]
}
Khi bạn sử dụng thông tin nhạy cảm, như nền tảngAPI KEY
, bao gồm"meta":{"AccessKey":"xxx","SecretKey":"yyy"}
trong cấu hình củaeid
, bạn nên biết rằng FMZ không lưu trữ dữ liệu. Dữ liệu sẽ được gửi trực tiếp đến chương trình docker, vì vậy thông tin này phải được cấu hình mỗi khi giao dịch trực tiếp được tạo hoặc khởi động lại.
Để khởi động lại giao dịch trực tiếp sử dụng plugin để hỗ trợ trao đổi, khi cấu hình cácsettings
tham số, bạn nên thực hiện các thiết lập sau đây cho cácexchanges
thuộc tính:
{"eid": "Exchange", "label" : "testXXX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123", "SecretKey": "1234", "Front" : "http://127.0.0.1:6666/XXX"}}
label
thuộc tính là để thiết lập một nhãn cho đối tượng trao đổi truy cập bởi các hiện tạigiao thức chung, có thể thu được bằng cáchexchange.GetLabel()
trong chiến lược.
cài đặt sai Đối tượng JSON
Nếu giao dịch trực tiếp được tạo bởi API mở rộng, API mở rộngRestartRobot (RobotId, Settings)
phải được sử dụng để khởi động lại, vàsettings
Các giao dịch trực tiếp được tạo trên trang nền tảng có thể được khởi động lại thông qua API mở rộng hoặc bằng cách nhấp vào nút trên trang.settings
Nếu bạn chỉ vượt qua cácRobotId
tham số, bắt đầu giao dịch trực tiếp theo cài đặt giao dịch trực tiếp hiện tại.
CácGetRobotDetail
phương pháp được sử dụng để có được chi tiết của giao dịch trực tiếp dưới tài khoản FMZ Quant Trading Platform tương ứng vớiAPI KEY
ID của giao dịch trực tiếp được truy xuất là ID giao dịch trực tiếp được chỉ định bởirobotId
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
}
}
CácrobotId
Các tham số được sử dụng để chỉ định ID của giao dịch trực tiếp mà các chi tiết được thu thập.GetRobotList
phương pháp để thu thập thông tin về giao dịch trực tiếp dưới tài khoản, chứa ID giao dịch trực tiếp.
robotId
đúng
số
Cácsummary
thuộc tính trong dữ liệu được trả về (thông tin trên thanh trạng thái bot; được lưu trữ trong 10 giây; không phải dữ liệu mới nhất) hiện có giới hạn số lượng dữ liệu (dữ liệu được lưu trữ).
Nếu bạn cần thêm dữ liệu thông tin thanh trạng thái, bạn có thể sử dụngGetRobotLogs
giao diện để nhận (khiGetRobotLogs
lấy thông tin của thanh trạng thái, trườngsummary
là dữ liệu mới nhất).
Mô tả thuộc tính củastrategy_exchange_pairs
, lấy ví dụ các dữ liệu sau:
[60,[44314,42960,15445,14703],[\"BTC_USDT\",\"BTC_USDT\",\"ETH_USDT\",\"ETH_USDT\"]]
Dữ liệu đầu tiên60
đại diện cho thời gian K-line mặc định được thiết lập bằng giao dịch trực tiếp là 1 phút, cụ thể là 60 giây.[44314,42960,15445,14703]
là đối tượng trao đổipid
được cấu hình để giao dịch trực tiếp (theo lệnh bổ sung).[\"BTC_USDT\",\"BTC_USDT\",\"ETH_USDT\",\"ETH_USDT\"]
là cặp giao dịch được thiết lập cho đối tượng giao dịch được cấu hình bằng giao dịch trực tiếp (theo thứ tự cộng và tương ứng một-một vớipid
).
CácGetAccount
phương pháp được sử dụng để có được thông tin tài khoản tương ứng vớiAPI KEY
trong yêu cầu của tài khoản nền tảng giao dịch FMZ Quant.
{
"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
}
}
CácGetExchangeList
phương pháp được sử dụng để có được danh sách các sàn giao dịch và thông tin cấu hình cần thiết được hỗ trợ bởi FMZ Quant Trading Platform.
{
"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
}
}
CácDeleteNode(Nid)
phương pháp được sử dụng để xóa các nút docker tương ứng vớiAPI KEY
trong yêu cầu tài khoản nền tảng giao dịch FMZ Quant. ID nút docker bị xóa là ID nút docker được chỉ định bởinid
parameter.
{
"code":0,
"data":{
"result":true,
"error":null
}
}
Cácnid
bạn có thể sử dụngGetNodeList
phương pháp để có được thông tin về các dockers của tài khoản.
không
đúng
số
CácDeleteRobot(RobotId, DeleteLogs)
phương pháp được sử dụng để xóa giao dịch trực tiếp tương ứng vớiAPI KEY
trong yêu cầu dưới tài khoản nền tảng giao dịch FMZ Quant.robotId
parameter.
// Return value after successful deletion
{
"code": 0,
"data": {
"result": 0,
"error": null
}
}
Các thông sốrobotId
được sử dụng để chỉ định ID của giao dịch trực tiếp để được xóa.GetRobotList
phương pháp để có được thông tin giao dịch trực tiếp dưới tài khoản, chứa ID giao dịch trực tiếp.
robotId
đúng
số
CácdeleteLogs
tham số được sử dụng để thiết lập xem có nên xóa nhật ký giao dịch trực tiếp hay không, nếu thông qua một giá trị thực (ví dụ:true
), nhật ký giao dịch trực tiếp sẽ bị xóa.
deleteLogs
đúng
bool
CácGetStrategyList()
phương pháp được sử dụng để có được các thông tin chiến lược tương ứng vớiAPI KEY
trong yêu cầu của tài khoản nền tảng giao dịch FMZ Quant.
{
"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
}
}
CácNewRobot
phương pháp được sử dụng để tạo ra một giao dịch trực tiếp theoAPI KEY
tương ứng với tài khoản nền tảng giao dịch lượng tử FMZ trong yêu cầu.
// Create live trading successfully
{
"code": 0,
"data": {
"result": 74260,
"error": null
}
}
Các thông số cấu hình giao dịch trực tiếp,settings
định dạng tham số là như sau:
{
"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"}}
]
}
cài đặt đúng Đối tượng JSON
Khi bạn sử dụng thông tin nhạy cảm, như nền tảngAPI KEY
, bao gồm"meta":{"AccessKey":"xxx","SecretKey":"yyy"}
trong cấu hình củaeid
, bạn nên biết FMZ không lưu trữ dữ liệu.
Dữ liệu sẽ được gửi trực tiếp đến chương trình dock, vì vậy thông tin này phải được cấu hình mỗi khi giao dịch trực tiếp được tạo hoặc khởi động lại.
Nếu bạn muốn tạo giao dịch trực tiếp sử dụng plugin để hỗ trợ nền tảng, khi cấu hình cácsettings
tham số, bạn nên thực hiện các thiết lập sau đây cho cácexchanges
thuộc tính:
{"eid": "Exchange", "label" : "testXXX", "pair": "ETH_BTC", "meta" :{"AccessKey": "123", "SecretKey": "1234", "Front" : "http://127.0.0.1:6666/XXX"}}
label
thuộc tính là để thiết lập một nhãn cho đối tượng trao đổi truy cập bởi các giao thức chung hiện tại, có thể được thu thập bởi cácexchange.GetLabel()
trong chiến lược.
CácPluginRun
phương pháp được sử dụng để gọicông cụ debugchức năng của nền tảng giao dịch lượng tử FMZ.
{
"code": 0,
"data": {
"result": "...",
"error": null
}
}
Các thông số cài đặt trong công cụ gỡ lỗi,settings
cấu hình, bao gồm mã thử nghiệm trongsource
thuộc tính.settings
định dạng tham số là như sau:
# 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.
♪
// Cấu trúc dữ liệu thứ hai trong nhật ký là các bản ghi nhật ký trong bảng đăng ký chiến lược trong cơ sở dữ liệu giao dịch trực tiếp
// Cấu trúc dữ liệu thứ ba trong nhật ký là các bản ghi nhật ký trong bảng nhật ký chiến lược trong cơ sở dữ liệu giao dịch trực tiếp
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:
| 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.
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
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.
Thư viện tích hợp
Địa điểm giao dịch