資源の読み込みに... 荷物...

拡張された API インターフェース

FMZ Quantは,FMZ Quant トレーディングプラットフォームの様々な機能へのプログラムによる呼び出しをサポートするために,プラットフォームの拡張APIインターフェースを開設しました.

ApiKey を作成する

FMZ 量子取引プラットフォームは, 拡張された API インターフェース,およびAPI KEY設定できます. アカウント設定の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"APIインターフェイス"の"API"の"API"の"API"の"API"の"API"の"API"の"API"の"API"の"API"の"API"の"API (https://www.fmz.com/m/accountページをクリックします. 新しい ApiKey ボタンをクリックして拡張子を作成します.API KEY.

作成するときに入力ボックスを編集できますAPI KEYそして,入力してください*シンボルは,すべてのことを可能にする拡張された API インターフェース権限.特定のインターフェースの権限を指定したい場合は,対応する拡張 API 機能名を入力する必要があります.例えば,区分するためにコンマを使用します:GetRobotDetail,DeleteRobotこれは,これです.API KEY呼び出すための許可ライブ取引の詳細情報を取得インターフェースとライブ取引を削除 interface.

についてAPI KEY管理ページは,また,変更する, 無効にする, 削除する創られたものAPI KEY.

拡張 API インターフェイス 返却コード

拡張 API インターフェイスが返した構造の例は以下のとおりです.

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

についてcodeフィールド is: 拡張 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 インターフェースを呼び出すときに 2 つの検証方法があります.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 URLについてTradingView:


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

    リアルタイムで取引IDについて186515インタラクティブなコマンド文字列を受信できる:{"close": 39773.75, "name": "aaa"}.

  • テキスト形式:

    https://www.fmz.comimg

    BTCUSDTPERP Crossing 39700.00 close: {{close}}
    

    リアルタイムで取引IDについて186515インタラクティブなコマンド文字列を受信できる: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)
}

TradingViewアラートを実現するために FMZ Quant の拡張 API を使用します シグナル取引

拡張 API インターフェイスの説明

  • FMZ 量子取引プラットフォームの拡張 API インターフェース クエリのパラメータを添付します.?) 要求の直後にhttps://www.fmz.com/api/v1要求のパラメータは以下の通りです.Python:

    {
        "version"   : "1.0",
        "access_key": "xxx",
        "method"    : "GetNodeList",
        "args"      : [],
        "nonce"     : 1516292399361,
        "sign"      : "085b63456c93hfb243a757366600f9c2"
    }
    
    フィールド 指示
    バージョン バージョン番号
    アクセス_キー アクセスキー,アカウント管理ページでそれを申請します.
    方法 特定の呼び出し方法
    アグス 呼び出された特定のメソッドのパラメータリスト.
    ノンセ タイムスタンプはミリ秒で,標準タイムスタンプから1時間の誤りを許します. ノンセは最後のアクセス時のノンセ値よりも大きい必要があります.
    サイン 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
    }
}

返される値のフィールドの記述 (文字どおりの意味は明白で,繰り返さない):

  • すべて: 現金口座に関連付けられている港人数.
  • ノード:ドッカーノードの詳細を記録する.
    • バージョン番号
    • 都市: あなたが位置する都市.
    • is_owner: true はプライベートドッカー, false はパブリックドッカーを示します.
    • 負荷: 負荷,戦略インスタンスの数
    • public: 0 はプライベート・ドッカー,1 はパブリック・ドッカー
    • 地域:地理的位置
    • バージョン:ドッカーに関する詳細なバージョン情報.
    • wd:オフラインアラームを有効にするかどうか 0 は有効でないことを意味します. 1 クリックで展開するドーカーは,いくつかの追加の情報を含んでいます.フィールドは前置きで始まりますecs_そしてunit_ワンクリックデプロイドッカーサーバーの関連情報 (オペレーターの名前,構成,状態など),請求サイクル,価格,その他の情報などを記録します. ここで繰り返しません.

パラメーターなし

GetRobotグループリスト

GetRobotGroupList()ライブ取引グループリストを返します. FMZ Quant トレーディング プラットフォームの口座の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リスト

についてGetRobotListFMZ 量子取引プラットフォームの口座のライブ取引のリストを取得するために使用されます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リアルタイムで取引できる ロボット 状態 偽り 番号 このラベルのすべてのライブトレードをフィルターすることができます. ラベル 偽り 文字列

やってみろPythonlanguageの拡張 API インターフェース検証方法例えば:print(api('GetRobotList', 'member2')): カスタムラベルですべてのライブ取引の情報を印刷member2. print(api('GetRobotList', 0, 5, -1, 'member2'))0 から 5 ページまで並べて,member2.

コマンドロボット

についてCommandRobotFMZ 量子取引プラットフォームのアカウントのライブ取引にインタラクションコマンドを送信するために使用されます.API KEYインタラクションコマンドを受信するライブ取引の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が含まれます. ロボット 本当 番号 パラメーターcmdボットに送信されるインタラクティブなコマンドです.コマンドは関数によってキャプチャされます.GetCommand()戦略コードにおけるインタラクティブ・ロジックの具体的実施については,GetCommand()機能についてFMZ 量子取引プラットフォーム API マニュアル- わかった cmd 本当 文字列

ストップロボット

StopRobot(RobotId)要求するために使用されます.API KEYFMZ 量子取引プラットフォームアカウントのライブ取引に対応します. 実行を停止するライブ取引IDは,robotId parameter.

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

パラメータrobotId停止するライブ取引のIDを指定するために使用されます.GetRobotListリアル取引の情報を取得するための方法,そのアカウントにはリアル取引のIDが含まれます. ロボット 本当 番号

ロボットを再起動

についてRestartRobot直接取引を再開するために使用されます.API KEYFMZ Quant トレーディング プラットフォームのアカウントに対応するリニューアルされたライブ トレーディングの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"}配置でeidFMZはデータを格納しません. データがドッカープログラムに直接送信されるので,ライブ取引が作成または再起動するたびにこの情報は設定する必要があります.

交換をサポートするためにプラグインを使用するライブ取引を再起動するには,設定するときに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によって生動取引が作成される場合,拡張APIRestartRobot (RobotId, Settings)再起動するために使用する必要があります.settingsパラメータをパスする必要があります. プラットフォームのページで作成されたライブ取引は,拡張APIまたはページのボタンをクリックして再起動できます.settingsパラメーター.RobotIdパラメータ,現在のライブ取引設定に従ってライブ取引を開始します.

GetRobot詳細について

についてGetRobotDetailFMZ 量子取引プラットフォームの口座のライブ取引の詳細を取得するために使用されます.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口座内のライブ取引に関する情報を入手するための方法,そのアカウントにはライブ取引IDが含まれます. ロボット 本当 番号

についてsummary返されたデータ (ボット状態バーの情報; 10秒間キャッシュ; 最新データではありません) の属性には,現在データ量制限 (キャッシュされたデータ) があります. 余分なデータが切断されます. 状態バーの情報データをもっと必要とする場合は,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口座情報を取得するために使用されます.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 を取得する

についてGetExchangeListFMZ 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
    }
}

削除Node

についてDeleteNode(Nid)この方法が,ドッカーノードを削除するAPI KEY削除されたドーカーノードIDは,ドーカーノードIDによって指定されたものです.nid parameter.

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

についてnid削除するドーカーのIDを指定するために使用されます.GetNodeList口座のドーカーに関する情報を得る方法です. ニード 本当 番号

削除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),ライブ取引日記は削除されます. 削除ログ 本当 ボール

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 KEYFMZ 量子取引プラットフォームの口座に対応する

// 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"}配置でeidFMZはデータを保存しない. データがドッカープログラムに直接送信されるので,この情報はライブ取引が作成されたり再起動されたりするたびに設定する必要があります.

プラットフォームをサポートするためにプラグインを使用します.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.

{ \ a1pos (110,268) } コード: 0, データ: { 結果: { ステータス: 1, 更新時間: 1527049990197 wd: 0 // ログの最初のデータ構造は,ライブ取引データベースの戦略ログ表のログ記録です logs: [{
マックス: 3984 arr: [ [3977, 3, Futures_OKCoin, , 0, 0, Sell ((688.9, 2): 20016, 1526954372591, , ], [3976, 5, , , 0, 0, OKCoin:this_week過剰ポジション,長: 2, 1526954372410, , ] ] 合計: 1503 Min: 2482 { \ pos (192,220) }, { \ pos (192,220) } ほら
// ログの2番目のデータ構造は,ライブ取引データベースの戦略ログ表のログ記録です 最大: 0 Arr: [], 合計: 0 Min: 0 { \ pos (192,220) }, { \ pos (192,220) } ほら
// ログの3番目のデータ構造は,ライブ取引データベースの戦略ログ表のログ記録です 最大: 0 Arr: [], 合計: 0 Min: 0 ) ] : , リフレッシュ: 1527049988000, 要約: ..., "チャートタイム": 0 "node_id": 50755, "オンライン": true }, "error": ゼロ { \ pos (192,220) } { \ pos (192,220) }



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, :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, :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.
内蔵ライブラリ トレーディング・ターミナル