Sumber dimuat naik... memuat...

Antara muka API yang diperluaskan

FMZ Quant telah membuka antara muka API platform yang diperluaskan untuk menyokong panggilan berprogram ke pelbagai fungsi Platform Dagangan FMZ Quant.

Buat ApiKey

Platform Perdagangan Kuantum FMZ menyokong pengurusan kebenaran diperluaskan antara muka API, dan kebenaranAPI KEYboleh ditetapkan. Pada pilihan API antara muka pada pengaturan akaun (https://www.fmz.com/m/account) halaman platform, klik Buat butang baru ApiKey untuk mencipta sambunganAPI KEY.

Anda boleh mengedit kotak input API Permission apabila membuatAPI KEY, dan masukkan*simbol untuk membolehkan semuaAntara muka API yang diperluaskanjika anda ingin menentukan keizinan antara muka tertentu, anda perlu memasukkan nama fungsi API lanjutan yang sepadan. gunakan koma untuk memisahkan, contohnya:GetRobotDetail,DeleteRobotIni memberi iniAPI KEYizin untuk memanggilDapatkan maklumat terperinci perdagangan langsungantara muka danHapus perdagangan langsung interface.

PeraturanAPI KEYhalaman pengurusan juga membolehkan anda untukmengubah, mematikan, HapusYang diciptakanAPI KEY.

Kod Kembali Antarmuka API yang Terpanjang

Contoh struktur yang dikembalikan oleh antara muka API yang diperluaskan adalah seperti berikut:

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

Peraturancodemedan adalah: Kod status hasil panggilan yang dikembalikan apabila antara muka API lanjutan dipanggil.

Penerangan Kod
Pelaksanaan yang berjaya 0
KEY API yang salah 1
Tanda tangan yang salah 2
Kesalahan bukan 3
Kaedah yang salah 4
Parameter yang salah 5
Kesalahan dalaman yang tidak diketahui 6

Kod Dagangan Langsung

PeraturanGetRobotListantara muka,GetRobotDetailantara muka, danGetRobotLogsdata pengembalian antara muka dalamstatusmedan untuk: kod status dagangan secara langsung.

  • Permulaan biasa
    Status Kod
    Tidak aktif 0
    Dalam operasi 1
    Berhenti 2
    Ditandatangani keluar 3
    Hentikan 4
    Strategi ini mempunyai kesilapan. 5
  • Tidak normal
    Status Kod
    Strategi telah tamat tempoh, dan sila hubungi penulis untuk membelinya lagi -1
    Tiada doker dijumpai -2
    Kesalahan penyusunan strategi -3
    Perdagangan langsung sudah berjalan -4
    Saldo yang tidak mencukupi -5
    Jumlah strategi serentak melebihi had -6

Cara Pengesahan

Terdapat dua kaedah pengesahan apabila memanggil antara muka API yang dilanjutkan, menyokongtokenpengesahan dan pengesahan langsung.

Pengesahan token

Penggunaanmd5kaedah penyulitan untuk disahkan, contohPython, GolangPanggilan bahasa:

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

Pengesahan Langsung

Ia menyokong pengesahantoken(mengalir)secret_keyanda boleh menjana URL yang boleh diakses secara langsung. contohnya, URL yang secara langsung memberikan arahan interaktif untuk perdagangan langsung, yang boleh digunakan untukTradingViewatauWebHookpanggilan balik dalam kes lain.CommandRobot(RobotId, Cmd)fungsi, parameternoncetidak memerlukan pengesahan, dan kekerapan akses dan masa lawatan antara muka tidak terhad.

Sebagai contoh,AccessKeydari sambungan yang diciptaAPI KEYialah:xxxdanSecretKeyialah:yyy. Lihat pautan berikut untuk menghantar mesej arahan interaktif ke perdagangan langsung dengan ID perdagangan langsung186515, mesej content adalah rentetan:"ok12345".


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

Di bawah keadaan bahawa pengesahan langsung disokong, HanyaCommandRobotantara muka disokong untuk mendapatkanBodydata dalam permintaan. Sebagai contoh, tetapan dalamWebHook URLdaripadaTradingView:


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

Berhati-hati untuk menetapkan mengikut format berikut:args=[130350,+""], di mana130350adalah perdagangan secara langsungIDdari Platform Dagangan Kuantum FMZ.

Tetapkan dalam kotak mesejTrading View(yang diminta Badan data yang akan dihantar):

  • Format JSON:

    https://www.fmz.comimg

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

    Perdagangan langsung denganIDdaripada186515boleh menerima rentetan arahan interaktif:{"close": 39773.75, "name": "aaa"}.

  • Format teks:

    https://www.fmz.comimg

    BTCUSDTPERP Crossing 39700.00 close: {{close}}
    

    Perdagangan langsung denganIDdaripada186515boleh menerima rentetan arahan interaktif:BTCUSDTPERP Crossing 39700.00 close: 39739.4.

ContohPython & GolangPanggilan bahasa:

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

Gunakan API lanjutan di FMZ Quant untuk merealisasikan amaran TradingView Perdagangan isyarat

Penjelasan Antara muka API Terpanjang

  • Antara muka API diperluaskan Platform Dagangan Kuantum FMZ Tambahkan parameter pertanyaan (dipecah oleh?) permohonan itu selepashttps://www.fmz.com/api/v1. Berikut adalah parameter permintaan yang dinyatakan menggunakanPython:

    {
        "version"   : "1.0",
        "access_key": "xxx",
        "method"    : "GetNodeList",
        "args"      : [],
        "nonce"     : 1516292399361,
        "sign"      : "085b63456c93hfb243a757366600f9c2"
    }
    
    Lapangan Arahan
    versi Nombor versi.
    access_key AccessKey, memohonnya di halaman pengurusan akaun.
    kaedah Kaedah panggilan tertentu.
    args Senarai parameter kaedah tertentu dipanggil.
    bukan Stempel masa, dalam milidetik, membenarkan kesilapan 1 jam dari stempel masa standard. Nonce mesti lebih besar daripada nilai nonce akses terakhir.
    tanda Signature.

    Setiap nama parameter dipisahkan oleh watak&, dan nama parameter dan nilai yang berkaitan dengan simbol=. URL permintaan lengkap (mengambilmethod=GetNodeListsebagai contoh):

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

    Perhatikan bahawa tidak adasecret_keyparameter antara parameter permintaan.

  • Kaedah tandatangan Peraturansignparameter dalam parameter permintaan disulitkan seperti berikut, mengikut format:

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

    Selepas menyambung tali, gunakanMD5algoritma penyulitan untuk menyulitkan rentetan dan menukarnya kepada nilai rentetan data hexadecimal, dirujuk kepada nilai parametersignUntuk bahagian tandatangan, lihatPythonAntara muka API pelanjutan kodCara Pengesahan :

    # 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

PeraturanGetNodeListkaedah digunakan untuk mendapatkan senarai pelabuhan di bawah akaun Platform Dagangan Kuantum FMZ yang sepadan denganAPI KEYdalam permintaan.

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

Penerangan bidang nilai yang dikembalikan (makna harfiah adalah jelas dan tidak akan diulangi):

  • semua: Jumlah pelabuhan yang dikaitkan dengan akaun semasa.
  • nodes: Mencatatkan butiran nod doker.
    • bina: nombor versi.
    • Bandar: Bandar di mana anda mencari.
    • is_owner: benar menunjukkan dok peribadi, salah menunjukkan dok awam.
    • dimuat: Muat, bilangan contoh strategi.
    • awam: 0 menunjukkan pelabuhan peribadi, 1 menunjukkan pelabuhan awam.
    • rantau: Lokasi geografi.
    • Versi: Maklumat versi terperinci dari docker.
    • wd: Sama ada untuk mengaktifkan penggera luar talian, 0 bermaksud tidak diaktifkan. Docker penyebaran satu klik mengandungi beberapa maklumat tambahan. medan bermula dengan awalanecs_danunit_, yang merakam maklumat yang relevan pelayan docker penyebaran satu klik (nama pengendali, konfigurasi, status, dll.), kitaran bil, harga dan maklumat lain, yang tidak akan diulangi di sini.

Tiada parameter

GetRobotGroupList

GetRobotGroupList()Mengembalikan senarai kumpulan dagangan langsung daripada akaun Platform Dagangan Kuantum FMZ yang sepadan denganAPI KEYdalam permintaan.

{
    "code": 0,
    "data": {
        "result": {
            "items": [{
                "id": 3417,
                "name": "Test"
            }, {
                "id": 3608,
                "name": "Live trading demo"
            }]
        },
        "error": null
    }
}
  • Item: Maklumat pengelompokan dagangan langsung.
    • id: Kumpulan dagangan langsung Id.
    • Nama: Nama kumpulan perdagangan langsung. Peraturanitemsdefault kumpulan tidak dalamitems.

Tiada parameter

GetPlatformList

GetPlatformList()mengembalikan senarai bursa yang mempunyai telah ditambahkan oleh akaun Platform Dagangan Kuantum FMZ yang sepadan kepadaAPI KEYdalam permintaan.

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

Tiada parameter

GetRobotList

PeraturanGetRobotListkaedah digunakan untuk mendapatkan senarai dagangan langsung di bawah akaun Platform Dagangan Kuantum FMZ yang sepadan denganAPI KEYdalam permintaan.

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

Tetapan penyesuaian permintaan panggilan. penyesuaian palsu nombor Tetapan panjang pertanyaan pelayaran. panjang palsu nombor Tentukan status perdagangan langsung yang akan ditanyakan, merujuk kepada antara muka API yang diperluaskanKod Dagangan Langsung, lulus-1untuk mendapatkan semua dagangan hidup. robotStatus palsu nombor Tentukan label tersuai dagangan langsung yang anda ingin query, dan anda boleh menapis semua dagangan langsung label ini. label palsu senar

AmbilPythonlanguages diperluaskan antara muka APICara Pengesahansebagai contoh:print(api('GetRobotList', 'member2')): cetak maklumat semua perdagangan langsung dengan label tersuaimember2. print(api('GetRobotList', 0, 5, -1, 'member2')): halaman dari 0 hingga 5 dan senarai sehingga 5 robot dilabelkan denganmember2.

CommandRobot

PeraturanCommandRobotkaedah ini digunakan untuk menghantar perintah interaksi kepada perdagangan langsung di bawah akaun Platform Dagangan Kuantum FMZ yang sepadan denganAPI KEYID perdagangan langsung yang menerima arahan interaksi adalah ID perdagangan langsung yang ditentukan olehrobotIdparameter, dan perintah interaksi dikembalikan olehGetCommand()fungsi dipanggil dalam strategi untuk menangkapnya.

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

ParameterrobotIddigunakan untuk menentukan ID perdagangan langsung yang menerima arahan interaktif.GetRobotListkaedah untuk mendapatkan maklumat perdagangan langsung di bawah akaun, yang mengandungi ID perdagangan langsung. robotId betul nombor Parametercmdadalah perintah interaktif yang dihantar kepada bot; perintah akan ditangkap oleh fungsiGetCommand()Untuk pelaksanaan khusus logik interaksi dalam kod strategi, sila rujukGetCommand()fungsi dalamFMZ Quant Trading Platform API Manual. cmd betul senar

StopRobot

StopRobot(RobotId)digunakan untuk memintaAPI KEYID perdagangan langsung untuk berhenti berjalan adalah ID perdagangan langsung yang ditentukan olehrobotId parameter.

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

ParameterrobotIddigunakan untuk menentukan ID perdagangan langsung yang akan dihentikan.GetRobotListkaedah untuk mendapatkan maklumat perdagangan langsung di bawah akaun, yang mengandungi ID perdagangan langsung. robotId betul nombor

Mulakan semulaRobot

PeraturanRestartRobotkaedah ini digunakan untuk memulakan semula perdagangan langsung di bawahAPI KEYID perdagangan langsung yang dimulakan semula adalah ID perdagangan langsung yang ditentukan olehrobotId parameter.

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

PeraturanrobotIdparameter digunakan untuk menentukan ID perdagangan hidup yang akan dimulakan semula.GetRobotListkaedah untuk mendapatkan maklumat perdagangan langsung di bawah akaun, yang mengandungi ID perdagangan langsung. robotId betul nombor Parameter konfigurasi dagangan langsung, parametersettingsformat adalah seperti berikut:

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

Apabila anda menggunakan maklumat sensitif, seperti platformAPI KEY, termasuk"meta":{"AccessKey":"xxx","SecretKey":"yyy"}dalam konfigurasieid, anda harus tahu bahawa FMZ tidak menyimpan data. Data akan dihantar terus ke program docker, jadi maklumat ini mesti dikonfigurasi setiap kali perdagangan langsung dibuat atau dimulakan semula.

Untuk memulakan semula perdagangan hidup yang menggunakan pemalam untuk menyokong pertukaran, apabila mengkonfigurasisettingsparameter, anda harus membuat tetapan berikut untukexchangesatribut:

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

labelatribut adalah untuk menetapkan label untuk objek pertukaran diakses oleh yang semasaProtokol am, yang boleh diperolehi olehexchange.GetLabel()fungsi dalam strategi.

tetapan palsu Objek JSON

Jika perdagangan langsung dicipta oleh API yang dilanjutkan, API yang dilanjutkanRestartRobot (RobotId, Settings)mesti digunakan untuk memulakan semula, dansettingsParameter mesti dilewatkan. Perdagangan langsung yang dicipta di halaman platform boleh dimulakan semula melalui API yang diperluaskan atau dengan mengklik butang di halaman.settingsJika anda hanya lulus parameterRobotIdparameter, mulakan perdagangan langsung mengikut tetapan perdagangan langsung semasa.

GetRobotDetail

PeraturanGetRobotDetailkaedah ini digunakan untuk mendapatkan butiran perdagangan langsung di bawah akaun Platform Dagangan Kuantum FMZ yang sepadan denganAPI KEYID dagangan langsung yang akan diambil adalah ID dagangan langsung yang ditentukan olehrobotId 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
    }
}

PeraturanrobotIdParameter digunakan untuk menentukan ID perdagangan langsung yang butir-butirnya akan diperoleh.GetRobotListkaedah untuk mendapatkan maklumat mengenai dagangan langsung di bawah akaun, yang mengandungi ID dagangan langsung. robotId betul nombor

Peraturansummaryatribut dalam data yang dikembalikan (maklumat pada bar status bot; disimpan dalam cache selama 10 saat; bukan data terkini) kini mempunyai had jumlah data (data disimpan dalam cache). Had jumlah data adalah 200KB, dan data yang berlebihan akan dipotong. Jika anda memerlukan lebih banyak data maklumat bar status, anda boleh menggunakanGetRobotLogsantara muka untuk mendapatkan (apabilaGetRobotLogsmendapatkan maklumat bar status, medansummaryadalah data terkini).

Penerangan atributstrategy_exchange_pairs, mengambil data berikut sebagai contoh:

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

Data pertama60mewakili tempoh K-line lalai yang ditetapkan oleh perdagangan langsung adalah 1 minit, iaitu 60 saat.[44314,42960,15445,14703]adalah objek pertukaranpidyang dikonfigurasi untuk perdagangan langsung (mengikut perintah penambahan).[\"BTC_USDT\",\"BTC_USDT\",\"ETH_USDT\",\"ETH_USDT\"]adalah pasangan dagangan yang ditetapkan untuk objek pertukaran yang dikonfigurasikan oleh dagangan langsung (dalam urutan penambahan dan dalam surat-menyurat satu-ke-satu denganpid).

DapatkanAkaun

PeraturanGetAccountkaedah digunakan untuk memperoleh maklumat akaun yang sepadan denganAPI KEYdalam permintaan akaun Platform Dagangan Kuantum FMZ.

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

PeraturanGetExchangeListkaedah ini digunakan untuk memperoleh senarai bursa dan maklumat konfigurasi yang diperlukan yang disokong oleh Platform Dagangan Kuantum 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

PeraturanDeleteNode(Nid)kaedah digunakan untuk memadam nod docker yang sepadan denganAPI KEYdalam permintaan akaun Platform Dagangan Kuantum FMZ. ID nod dok yang dipadamkan adalah ID dok yang ditentukan olehnid parameter.

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

Peraturannidparameter digunakan untuk menentukan ID docker yang akan dipadam.GetNodeListkaedah untuk mendapatkan maklumat mengenai pelabuhan akaun. tidak betul nombor

HapusRobot

PeraturanDeleteRobot(RobotId, DeleteLogs)kaedah digunakan untuk memadamkan perdagangan langsung yang sepadan denganAPI KEYdalam permintaan di bawah akaun Platform Dagangan Kuantum FMZ. ID dagangan langsung yang dipadamkan adalah ID dagangan langsung yang ditentukan olehrobotId parameter.

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

ParameterrobotIddigunakan untuk menentukan ID perdagangan langsung yang akan dipadamkan.GetRobotListkaedah untuk mendapatkan maklumat perdagangan langsung di bawah akaun, yang mengandungi ID perdagangan langsung. robotId betul nombor PerkhidmatandeleteLogsParameter digunakan untuk menetapkan sama ada untuk memadamkan log dagangan langsung, jika lulus nilai yang benar (contohnya:true), log dagangan langsung dihapuskan. deleteLogs betul bool

GetStrategyList

PeraturanGetStrategyList()kaedah digunakan untuk mendapatkan maklumat strategi yang sepadan denganAPI KEYdalam permintaan akaun Platform Dagangan Kuantum FMZ.

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

PeraturanNewRobotkaedah digunakan untuk membuat perdagangan langsung di bawahAPI KEYyang sepadan dengan akaun Platform Dagangan Kuantum FMZ dalam permintaan.

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

Parameter konfigurasi dagangan langsung,settingsformat parameter adalah seperti berikut:

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

tetapan betul Objek JSON

Apabila anda menggunakan maklumat sensitif, seperti platformAPI KEY, termasuk"meta":{"AccessKey":"xxx","SecretKey":"yyy"}dalam konfigurasieid, anda harus tahu FMZ tidak menyimpan data. Data akan dihantar terus ke program docker, jadi maklumat ini mesti dikonfigurasikan setiap kali perdagangan langsung dibuat atau dimulakan semula.

Jika anda ingin membuat perdagangan hidup yang menggunakan pemalam untuk menyokong platform, apabila mengkonfigurasisettingsparameter, anda harus membuat tetapan berikut untukexchangesatribut:

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

labelAtribut adalah untuk menetapkan label untuk objek pertukaran diakses oleh protokol umum semasa, yang boleh diperoleh olehexchange.GetLabel()fungsi dalam strategi.

PluginRun

PeraturanPluginRunkaedah digunakan untuk memanggilalat debugfungsi Platform Dagangan Kuantum FMZ.

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

Parameter tetapan dalam alat debugging,settingskonfigurasi, termasuk kod ujian dalamsourceAtribut.settingsFormat parameter adalah seperti berikut:

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

{ kod: 0, data: { hasil: status: 1, updateTime: 1527049990197, wd: 0, // Struktur data pertama dalam log adalah rekod log dalam jadual log strategi dalam pangkalan data perdagangan langsung 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, , ] ], Seluruh: 1503, Min: 2482 ♪, ♪
// Struktur data kedua dalam log adalah rekod log dalam jadual log strategi dalam pangkalan data perdagangan langsung Max: 0, Arr: [], Seluruh: 0, Min: 0 ♪, ♪
// Struktur data ketiga dalam log adalah rekod log dalam jadual log strategi dalam pangkalan data perdagangan langsung Max: 0, Arr: [], Seluruh: 0, Min: 0 {], grafik: , refresh: 1527049988000, kesimpulan: ..., "ChartTime": 0, "node_id": 50755, "online": benar }, "kesilapan": 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, {dekat:648,tinggi:650.5,rendah:647,terbuka:650,x:1575960300000}, [23636, 5, {x:1575960300000, y:3.0735}] ]


Take one of the log data as an example:

[23637, 0, {dekat:648,tinggi:650.5,rendah:647,terbuka: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.
Perpustakaan terbina dalam Terminal Perdagangan