Tài nguyên đang được tải lên... tải...

Giao diện API mở rộng

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.

Tạo ApiKey

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 KEYcó thể được thiết lập. Trên API giao diện tùy chọn trên Account settings (https://www.fmz.com/m/account) trang của nền tảng, nhấp vào Create nút ApiKey mới để tạo phần mở rộngAPI KEY.

Bạn có thể chỉnh sửa hộp nhập API Permission khi tạo mộtAPI 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 KEYsự 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 KEYtrang 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ã trả về giao diện API mở rộng

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áccodetrườ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ả
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

Mã giao dịch trực tiếp

CácGetRobotListgiao diện,GetRobotDetailgiao diện, vàGetRobotLogsgiao diện trả về dữ liệu trongstatustrường cho: mã trạng thái giao dịch trực tiếp.

  • Khởi động bình thường
    Tình trạng
    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
  • Không bình thường
    Tình trạng
    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

Phương pháp xác minh

Có hai phương pháp xác minh khi gọi giao diện API mở rộng, hỗ trợtokenxác minh và xác minh trực tiếp.

xác minh token

Sử dụngmd5phương pháp mã hóa để xác minh, ví dụ vềPython, Golangtiế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)
}

Kiểm tra trực tiếp

Nó hỗ trợ xác minh mà không cầntoken(trượt)secret_keytrự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 đểTradingViewhoặcWebHookcho các trường hợp khác.CommandRobot(RobotId, Cmd)chức năng, tham sốnoncekhô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ụ:AccessKeycủa phần mở rộng được tạoAPI KEYlà:xxxSecretKeylà: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ỉCommandRobotgiao diện được hỗ trợ để có đượcBodyVí dụ, các cài đặt trongWebHook URLcủ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 đó130350là giao dịch trực tiếpIDcủa FMZ Quant Trading Platform.

Đặt trong hộp tin nhắn củaTrading View(các Cơ quan yêu cầu Dữ liệu cần gửi):

  • Định dạng JSON:

    https://www.fmz.comimg

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

    Các giao dịch trực tiếp vớiIDcủa186515có thể nhận chuỗi lệnh tương tác:{"close": 39773.75, "name": "aaa"}.

  • Định dạng văn bản:

    https://www.fmz.comimg

    BTCUSDTPERP Crossing 39700.00 close: {{close}}
    

    Các giao dịch trực tiếp vớiIDcủa186515có thể nhận chuỗi lệnh tương tác:BTCUSDTPERP Crossing 39700.00 close: 39739.4.

Ví dụ:Python & GolangGọ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 TradingView giao dịch tín hiệu

Giải thích về giao diện API mở rộng

  • 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/v1Sau đâ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=GetNodeListví 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_keytham số trong số các tham số yêu cầu.

  • Phương pháp ký hiệu Cácsigntham 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ụngMD5thuậ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ảoPythongiao 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()
    

GetNodeList

CácGetNodeListphươ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 KEYtrong 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):

  • tất cả: Số lượng nhân viên cảng liên quan đến tài khoản vãng lai.
  • các nút: ghi lại chi tiết các nút dock.
    • xây dựng: số phiên bản.
    • Thành phố: Thành phố mà bạn đang định vị.
    • is_owner: true chỉ ra một docker riêng, false chỉ ra một docker công cộng.
    • tải: tải, số lượng các trường hợp chiến lược.
    • công cộng: 0 chỉ ra một docker riêng, 1 chỉ ra một docker công cộng.
    • khu vực: Vị trí địa lý.
    • phiên bản: Thông tin chi tiết về phiên bản của dock.
    • wd: Có phải bật báo động ngoại tuyến, 0 có nghĩa là không bật. Các trường bắt đầu với các tiền tốecs_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

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 KEYtrong yêu cầu.

{
    "code": 0,
    "data": {
        "result": {
            "items": [{
                "id": 3417,
                "name": "Test"
            }, {
                "id": 3608,
                "name": "Live trading demo"
            }]
        },
        "error": null
    }
}
  • Các mục: Thông tin nhóm giao dịch trực tiếp.
    • ID: Nhóm giao dịch trực tiếp ID.
    • Tên: Tên nhóm giao dịch trực tiếp. Cácitemstrường chỉ ghi lại các nhóm mới được tạo.items.

Không có tham số

GetPlatformList

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 KEYtrong 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ố

GetRobotList

CácGetRobotListphươ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 KEYtrong 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ấyPythongiao diện API mở rộng của languagesPhương pháp xác minhví dụ:print(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.

CommandRobot

CácCommandRobotphươ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 KEYID 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ởirobotIdtham 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.GetRobotListphươ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ốcmdlà 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

StopRobot(RobotId)được sử dụng để yêu cầuAPI KEYtươ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.GetRobotListphươ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ố

Khởi động lạiRobot

CácRestartRobotphương pháp được sử dụng để khởi động lại giao dịch trực tiếp theoAPI KEYID 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ácrobotIdCá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.GetRobotListphươ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ácsettingstham số, bạn nên thực hiện các thiết lập sau đây cho cácexchangesthuộc tính:

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

labelthuộ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àsettingsCá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.settingsNếu bạn chỉ vượt qua cácRobotIdtham 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.

GetRobotDetail

CácGetRobotDetailphươ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 KEYID 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ácrobotIdCá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.GetRobotListphươ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ácsummarythuộ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ụngGetRobotLogsgiao diện để nhận (khiGetRobotLogslấy thông tin của thanh trạng thái, trườngsummarylà 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).

GetAccount

CácGetAccountphương pháp được sử dụng để có được thông tin tài khoản tương ứng vớiAPI KEYtrong 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
    }
}

GetExchangeList

CácGetExchangeListphươ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
    }
}

DeleteNode

CácDeleteNode(Nid)phương pháp được sử dụng để xóa các nút docker tương ứng vớiAPI KEYtrong 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ácnidbạn có thể sử dụngGetNodeListphương pháp để có được thông tin về các dockers của tài khoản. không đúng số

DeleteRobot

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 KEYtrong 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.GetRobotListphươ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ácdeleteLogstham 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

GetStrategyList

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

NewRobot

CácNewRobotphương pháp được sử dụng để tạo ra một giao dịch trực tiếp theoAPI KEYtươ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ácsettingstham số, bạn nên thực hiện các thiết lập sau đây cho cácexchangesthuộc tính:

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

labelthuộ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.

PluginRun

CácPluginRunphươ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,settingscấu hình, bao gồm mã thử nghiệm trongsourcethuộ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.

: 0, dữ liệu: { Kết quả: status: 1, thời gian cập nhật: 1527049990197, wd: 0, // Cấu trúc dữ liệu đầu tiên 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 logs: [{
Max: 3984, Arr: [ [3977, 3, Futures_OKCoin, , 0, 0, Sell ((688.9, 2): 20016, 1526954372591, , ], [3976, 5, , , 0, 0, OKCoin:this_week excessive positions, long: 2, 1526954372410, , ] ], Tổng cộng: 1503, Min: 2482 {, {
// 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 Max: 0, Arr: [], Tổng: 0, Min: 0 {, {
// 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 Max: 0, Arr: [], Tổng: 0, Min: 0 }], thẻ: , thêm thông tin: 1527049988000, summary: ..., "chartTime": 0, "node_id": 50755, "online": đúng "error": null } }



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:
  

Arr: [ [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, , ] ],


| 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.

Arr: [ [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

Arr: [ [23637, 0, {close:648,high:650.5,low:647,open:650,x:1575960300000}, [23636, 5, {x:1575960300000, y:3.0735}] ]


Take one of the log data as an example:

[23637, 0, {close:648,high:650.5,low:647,open:650,x:1575960300000},


```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