리소스 로딩... 로딩...

확장된 API 인터페이스

FMZ 퀀트는 FMZ 퀀트 거래 플랫폼의 다양한 기능에 대한 프로그래밍 호출을 지원하기 위해 플랫폼의 확장 된 API 인터페이스를 열었습니다.

ApiKey를 생성합니다

FMZ 퀀트 트레이딩 플랫폼은 확장된 API 인터페이스와API KEY설정할 수 있습니다. 계정 설정에서 API 인터페이스 옵션에서 (https://www.fmz.com/m/account창업 버튼을 클릭합니다. 새로운 ApiKey 버튼을 확장자를 생성API KEY.

API Permission 입력 상자를 편집할 수 있습니다API KEY, 그리고*모든 것을 가능하게 하는확장된 API 인터페이스권한. 특정 인터페이스 권한을 지정하려면 해당 확장 API 함수 이름을 입력해야합니다. 예를 들어, 분리하기 위해 우표를 사용하십시오.GetRobotDetail,DeleteRobot이것은API KEY전화 할 수 있는 허가를실시간 거래에 대한 자세한 정보를 얻으십시오.인터페이스와라이브 거래 삭제 interface.

API KEY관리 페이지 또한수정, 비활성화, 삭제창조된API KEY.

확장된 API 인터페이스 반환 코드

확장된 API 인터페이스가 반환하는 구조의 예는 다음과 같습니다.

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

code필드는: 확장된 API 인터페이스가 호출될 때 반환되는 호출 결과 상태 코드입니다.

설명 코드
성공적 실행 0
잘못된 API 키 1
잘못된 서명 2
논스 오류 3
잘못된 방법 4
잘못된 매개 변수 5
내부 알 수 없는 오류 6

실시간 거래 코드

GetRobotList인터페이스,GetRobotDetail인터페이스 그리고GetRobotLogs인터페이스에서 데이터를 반환status필드: 실시간 거래 상태 코드

  • 정상 시작
    상태 코드
    비활성 0
    운용 중 1
    정지 2
    출력 3
    멈췄다 4
    전략에는 오류가 있습니다. 5
  • 비정상
    상태 코드
    전략은 만료되었습니다, 그리고 다시 구입하기 위해 작가에 연락하십시오 -1
    도커가 발견되지 않았습니다. -2
    전략 컴파일 오류 -3
    라이브 거래는 이미 실행 중입니다 -4
    불충분한 잔액 -5
    동시 전략의 수는 한계를 초과합니다. -6

확인 방법

확장된 API 인터페이스를 호출할 때 두 가지 검증 방법이 있습니다.token확인 및 직접 확인

토큰 검증

사용md5검증하기 위한 암호화 방법, 예를 들어Python, Golang언어 호출:

#!/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)
}

직접 확인

이 시스템은token합격secret_key직접 접속할 수 있는 URL을 생성할 수 있습니다. 예를 들어, 직접 상호 작용하는 지침을 제공하는 URL 라이브 트레이딩,TradingView또는WebHook다른 경우에 다시 호출.CommandRobot(RobotId, Cmd)함수, 매개 변수nonce확인이 필요없고, 접속 빈도와 인터페이스 방문 시간은 제한되지 않습니다.

예를 들어,AccessKey생성된 확장API KEY이 경우:xxx그리고SecretKey이 경우:yyy. 다음 링크를 참조하여 대화형 명령 메시지를 보내십시오 라이브 거래 ID를 가진 라이브 거래186515, 메시지는 content는 문자열입니다:"ok12345".


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

직접적인 검증이 뒷받침되는 경우 단지CommandRobot인터페이스가 지원됩니다Body예를 들어,WebHook URLTradingView:


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

다음 포맷에 따라 설정에 주의를 기울여:args=[130350,+""], 그 중130350실시간 거래입니다.IDFMZ 양자 거래 플랫폼의.

메시지의 상자에 설정Trading View(청구된 체) 전송해야 하는 데이터):

  • JSON 형식:

    https://www.fmz.comimg

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

    라이브 거래ID186515인터랙티브 명령 문자열을 받을 수 있습니다:{"close": 39773.75, "name": "aaa"}.

  • 텍스트 형식:

    https://www.fmz.comimg

    BTCUSDTPERP Crossing 39700.00 close: {{close}}
    

    라이브 거래ID186515인터랙티브 명령 문자열을 받을 수 있습니다:BTCUSDTPERP Crossing 39700.00 close: 39739.4.

예를 들어Python & Golang언어 호출:

#!/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)
}

FMZ Quant의 확장 API를 사용하여 TradingView 알림을 실현하십시오. 신호 거래

확장된 API 인터페이스 설명

  • FMZ 양자 거래 플랫폼의 확장 된 API 인터페이스 쿼리 매개 변수를 추가합니다.?) 의 신청을 받은 직후https://www.fmz.com/api/v1아래는 요청 매개 변수입니다.Python:

    {
        "version"   : "1.0",
        "access_key": "xxx",
        "method"    : "GetNodeList",
        "args"      : [],
        "nonce"     : 1516292399361,
        "sign"      : "085b63456c93hfb243a757366600f9c2"
    }
    
    필드 방향
    버전 버전 번호
    접근_키 AccessKey, 계정 관리 페이지에서 신청합니다.
    방법 특정 호출 방법.
    아그스 호출된 특정 메소드의 매개 변수 목록.
    무단 시간표, 밀리초로, 표준 시간표에서 1시간의 오류를 허용합니다. Nonce는 마지막 액세스의 nonce 값보다 커야합니다.
    표지 Signature.

    매 매개 변수 이름은 문자&, 그리고 매개 변수 이름과 값은 기호와 연결되어 있습니다=전체 요청 URL (취소)method=GetNodeList예를 들어):

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

    참고로,secret_key요청 매개 변수 중 하나의 매개 변수입니다.

  • 서명 방법 의sign요청 매개 변수에 있는 매개 변수는 다음과 같이 암호화 됩니다.

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

    문자열을 연결한 후,MD5암호 알고리즘은 문자열을 암호화하고, 매개 변수의 값으로 지칭되는 열여섯 자리 데이터 문자열 값으로 변환합니다.sign서명 부분에 대해서는Python코드 확장 API 인터페이스확인 방법 :

    # 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를 얻으세요

GetNodeList이 방법은 항구 관리자 목록을 얻기 위해 사용됩니다. FMZ 양상 거래 플랫폼 계정에API KEY신청서에서

{
    "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
    }
}

반환 값 필드의 설명 ( 문자적 의미는 분명하고 반복되지 않습니다):

  • 모두: 현금 계좌에 연결된 항구 노동자 수.
  • 노드: 도커 노드 세부 정보를 기록합니다.
    • build: 버전 번호
    • 도시: 당신이 위치하는 도시.
    • is_owner: true는 개인 도커를 나타냅니다. false는 공개 도커를 나타냅니다.
    • 로드: 로드, 전략 인스턴스 수
    • 공개: 0은 개인 도커를 나타내고 1은 공개 도커를 나타냅니다.
    • 지역: 지리적 위치
    • 버전: 도커의 자세한 버전 정보.
    • wd: 오프라인 경보를 활성화하는지 여부, 0은 활성화되지 않았다는 것을 의미합니다. 한 클릭 배포 도커는 몇 가지 추가 정보를 포함합니다. 필드는 접두어로 시작ecs_그리고unit_, 한 클릭 배포 도커 서버의 관련 정보를 기록 (운영자 이름, 구성, 상태, 등), 청구 주기, 가격 및 기타 정보, 여기에 반복되지 않습니다.

매개 변수가 없습니다.

GetRobot그룹 리스트

GetRobotGroupList()라이브 거래 그룹 리스트를 반환합니다. FMZ 퀀트 트레이딩 플랫폼 계정API KEY신청서에서

{
    "code": 0,
    "data": {
        "result": {
            "items": [{
                "id": 3417,
                "name": "Test"
            }, {
                "id": 3608,
                "name": "Live trading demo"
            }]
        },
        "error": null
    }
}
  • 항목: 실시간 거래 그룹 정보.
    • id: 실시간 거래 그룹 ID.
    • 이름: 라이브 거래 그룹 이름 의items필드는 새로 만든 그룹만을 기록합니다.items.

매개 변수가 없습니다.

GetPlatformList를 얻으십시오

GetPlatformList()화폐 거래소 목록을 반환 해당하는 FMZ 양자 거래 플랫폼 계정으로 추가되었습니다. 에 대한API KEY신청서에서

{
    "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
    }
}

매개 변수가 없습니다.

GetRobot 목록

GetRobotList이 방법은 FMZ 양자 거래 플랫폼 계정에 해당하는 라이브 거래 목록을 얻기 위해 사용됩니다.API KEY신청서에서

{
    "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
    }
}

페이징 쿼리 오프셋 설정 오프셋 거짓 번호 페이징 쿼리 길이 설정 길이가 거짓 번호 쿼리해야 하는 라이브 거래의 상태를 지정하고 확장된 API 인터페이스를 참조하십시오.실시간 거래 코드합격-1모든 라이브 트레이딩을 얻기 위해. robot상황 거짓 번호 쿼리하려는 라이브 트레이딩의 사용자 지정 레이블을 지정하면 이 레이블의 모든 라이브 트레이딩을 필터링할 수 있습니다. 라벨 거짓 문자열

이봐요Pythonlanguages 확장된 API 인터페이스확인 방법예를 들어:print(api('GetRobotList', 'member2')): 사용자 지정 라벨로 모든 라이브 거래의 정보를 인쇄member2. print(api('GetRobotList', 0, 5, -1, 'member2')): 0에서 5까지의 페이지와member2.

명령 로봇

CommandRobot이 방법은 FMZ 양자 거래 플랫폼 계정에 대한 실시간 거래에 상호 작용 명령을 보내기 위해 사용됩니다.API KEY상호 작용 명령어를 받는 라이브 거래의 ID는 라이브 거래 ID가robotId매개 변수, 그리고 상호 작용 명령은GetCommand()포착하기 위한 전략에서 호출된 함수입니다.

{
    // 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
    }
}

매개 변수robotId상호 작용 명령어를 수신하는 라이브 거래의 Id를 지정하는 데 사용됩니다.GetRobotList라이브 트레이딩 ID를 포함하는 계정에 라이브 트레이딩 정보를 얻는 방법. 로봇 사실 번호 매개 변수cmdbot에 전송되는 인터랙티브 명령어입니다. 명령어는 함수에 의해 캡처됩니다GetCommand()전략 코드에서 상호 작용 논리를 구체적으로 구현하려면GetCommand()기능FMZ 양자 거래 플랫폼 API 설명서... cmd 사실 문자열

정지Robot

StopRobot(RobotId)를 요청하는 데 사용됩니다API KEYFMZ 퀀트 거래 플랫폼 계정의 실시간 거래에 대응합니다. 실행을 중지하는 실시간 거래 ID는robotId parameter.

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

매개 변수robotId사용 하 여 라이브 거래의 ID를 지정 하 고 중지 됩니다.GetRobotList라이브 트레이딩 ID를 포함하는 계정에 라이브 트레이딩 정보를 얻는 방법. 로봇 사실 번호

다시 시작Robot

RestartRobot이 방법은 라이브 거래를 재개하기 위해 사용됩니다.API KEY요청에 해당하는 FMZ 양 거래 플랫폼 계정입니다. 다시 시작 된 라이브 거래의 ID는robotId parameter.

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

robotId이 매개 변수를 사용 하 여 라이브 거래의 ID를 지정 하 고 다시 시작 됩니다.GetRobotList라이브 트레이딩 ID를 포함하는 계정에 라이브 트레이딩 정보를 얻는 방법. 로봇 사실 번호 실시간 거래 구성 매개 변수, 매개 변수settings포맷은 다음과 같습니다.

{
    "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"}}
    ]
}

플랫폼과 같은 민감한 정보를 사용할 때API KEY,"meta":{"AccessKey":"xxx","SecretKey":"yyy"}구성을 통해eid, 당신은 FMZ가 데이터를 저장하지 않는다는 것을 알아야합니다. 데이터는 직접 도커 프로그램에 전송됩니다. 그래서 이 정보는 실시간 거래가 생성되거나 다시 시작될 때마다 구성되어야합니다.

교환을 지원하는 플러그인을 사용하는 라이브 거래를 다시 시작하려면,settings매개 변수, 당신은 다음 설정을 해야 합니다exchanges속성:

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

label이 속성은 현재에 의해 액세스 교환 객체에 대한 라벨을 설정합니다.일반 프로토콜,exchange.GetLabel()전략의 역할입니다.

설정 거짓 JSON 객체

만약 라이브 거래가 확장된 API에 의해 생성된다면, 확장된 API는RestartRobot (RobotId, Settings)재시작에 사용해야 합니다.settings매개 변수를 통과해야 합니다. 플랫폼 페이지에서 생성 된 라이브 거래는 확장 된 API를 통해 또는 페이지의 버튼을 클릭하여 다시 시작할 수 있습니다.settings매개 변수를 통과하면RobotId매개 변수, 현재 실시간 거래 설정에 따라 라이브 거래를 시작합니다.

GetRobot 상세한 정보

GetRobotDetail이 방법은 FMZ 양자 거래 플랫폼 계정에 대한 실시간 거래의 세부 정보를 얻기 위해 사용됩니다.API KEY요청에서 검색해야 하는 라이브 거래의 ID는 라이브 거래 ID에 의해 지정된robotId 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
    }
}

robotId이 매개 변수를 사용 하 여 실시간 거래의 ID를 지정 합니다.GetRobotList실시간 거래 아이디를 포함하는 계정에 있는 실시간 거래에 대한 정보를 얻는 방법. 로봇 사실 번호

summary반환된 데이터의 속성 (보트 상태 표시줄에 있는 정보; 10초 동안 캐시; 최신 데이터가 아닙니다) 는 현재 데이터 양 제한 (캐시된 데이터) 이 있습니다. 데이터 양 제한은 200KB이며, 과도한 데이터는 줄여집니다. 더 많은 상태 표시줄 정보 데이터가 필요하면,GetRobotLogs인터페이스를 얻을 때GetRobotLogs상태 표시줄, 필드 정보를 얻습니다summary가장 최근의 데이터입니다.)

그 속성의 설명strategy_exchange_pairs예를 들어 다음 자료를 들 수 있습니다.

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

첫 번째 자료60라이브 거래로 설정된 기본 K 라인 기간은 1분, 즉 60초입니다.[44314,42960,15445,14703]교환 대상이 됩니다.pid라이브 거래를 위해 구성된 것 (첨가 순서에 따라)[\"BTC_USDT\",\"BTC_USDT\",\"ETH_USDT\",\"ETH_USDT\"]실시간 거래로 구성된 거래 대상에 대한 거래 쌍 세트 (첨가 순서와 1 대 1 대응)pid).

GetAccount를 사용하세요

GetAccount이 방법은API KEYFMZ 퀀트 거래 플랫폼 계정의 요청에

{
    "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를 사용하세요

GetExchangeList이 방법은 FMZ 양자 거래 플랫폼에서 지원되는 거래소 목록과 필요한 구성 정보를 얻기 위해 사용됩니다.

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

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

삭제 노드

DeleteNode(Nid)도커 노드를 삭제하는 방법API KEYFMZ 양자 거래 플랫폼 계정 요청에서 삭제 된 도커 노드 ID는nid parameter.

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

nid이 매개 변수는 삭제할 도커의 id를 지정하는 데 사용됩니다.GetNodeList계좌의 도커에 대한 정보를 얻기 위한 방법. nid 사실 번호

삭제Robot

DeleteRobot(RobotId, DeleteLogs)이 방법은 실시간 거래에 해당하는API KEYFMZ 퀀트 거래 플랫폼 계정 아래의 요청에서 삭제 된 라이브 거래 ID는robotId parameter.

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

매개 변수robotId삭제 할 라이브 거래의 ID를 지정하는 데 사용됩니다.GetRobotList라이브 트레이딩 ID를 포함하는 계정에 라이브 트레이딩 정보를 얻는 방법. 로봇 사실 번호 의deleteLogs이 매개 변수는 실시간 거래 로그를 삭제할 것인지 여부를 설정하는 데 사용됩니다.true), 라이브 거래 로그는 삭제됩니다. 삭제 로그 사실 bool

GetStrategyList를 사용하세요

GetStrategyList()이 방법은 전략 정보를 얻기 위해 사용됩니다.API KEYFMZ 퀀트 거래 플랫폼 계정의 요청에

{
    "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이 방법은 라이브 거래를 만들기 위해 사용 됩니다API KEY요청에 있는 FMZ 양상 거래 플랫폼 계좌에 해당하는 것.

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

실시간 거래 구성 매개 변수settings매개 변수 포맷은 다음과 같습니다.

{
    "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"}}
    ]
}

설정 사실 JSON 객체

플랫폼과 같은 민감한 정보를 사용할 때API KEY,"meta":{"AccessKey":"xxx","SecretKey":"yyy"}구성을 통해eid, FMZ는 데이터를 저장하지 않는다는 것을 알아야 합니다. 데이터는 도커 프로그램에 직접 전송됩니다. 그래서 이 정보는 실시간 거래가 생성되거나 다시 시작될 때마다 구성되어야 합니다.

당신이 플랫폼을 지원하는 플러그인을 사용하는 라이브 거래를 만들고 싶다면,settings매개 변수, 당신은 다음 설정을 해야 합니다exchanges속성:

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

label이 속성은 현재 일반적인 프로토콜에 의해 액세스되는 교환 객체에 대한 라벨을 설정하는 것입니다.exchange.GetLabel()전략의 역할입니다.

플러그인 실행

PluginRun이 방법은디버그 도구FMZ 양자 거래 플랫폼의 기능

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

디버깅 도구의 설정 매개 변수,settings구성, 테스트 코드 포함source속성.settings매개 변수 형식은 다음과 같습니다.

    # 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 데이터: { 결과: { 상태: 1, 업데이트 시간: 1527049990197, wd: 0, // 로그에서 첫 번째 데이터 구조는 실시간 거래 데이터베이스에서 전략 로그 테이블의 로그 기록입니다 로그: [{
최대: 3984 Arr: [ [3977, 3, Futures_OKCoin, , 0, 0, Sell ((688.9, 2): 20016, 1526954372591, , ], [3976, 5, , , 0, 0, OKCoin:this_week 과잉 포지션, 긴: 2, 1526954372410, , ] ], 총 1503명 : 2482 }, {
// 로그에서 두 번째 데이터 구조는 실시간 거래 데이터베이스의 전략 로그 테이블의 로그 기록입니다 최대: 0 Arr: [], 총: 0 : 0 }, {
// 로그에서 세 번째 데이터 구조는 실시간 거래 데이터베이스의 전략 로그 테이블의 로그 기록입니다 최대: 0 Arr: [], 총: 0 : 0 ]] 차트: 신보: 1527049988000, 결과: ..., "차트타임": 0, "node_id": 50755, "온라인": 사실 }, "실점": 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, {接近:648, 高:650.5, 低:647, open:650, x:1575960300000}, [23636, 5, {x:1575960300000, y:3.0735}] ]


Take one of the log data as an example:

[23637, 0, {接近:648, 高:650.5, 低: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.
내장 라이브러리 거래 터미널