В процессе загрузки ресурсов... загрузка...

Расширенный интерфейс API

FMZ Quant открыл расширенный интерфейс API платформы для поддержки программных вызовов к различным функциям FMZ Quant Trading Platform.

Создать APIKey

FMZ Quant Trading Platform поддерживает управление разрешениями расширенный интерфейс 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поле is: Код состояния результата вызова, возвращаемый при вызове расширенного интерфейса API.

Описание Код
Успешное исполнение 0
Неправильный ключ API 1
Неправильная подпись. 2
Ошибка Nonce 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. Посмотрите следующую ссылку для отправки интерактивного командного сообщения на торговать в режиме реального времени с идентификатором торговли в режиме реального времени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- это прямая торговля.IDПлатформы FMZ Quant Trading.

Установите в поле сообщения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)
}

Используйте расширенный API на FMZ Quant для реализации предупреждения TradingView торговля сигналами

Объяснение расширенного интерфейса API

  • Расширенный интерфейс API платформы FMZ Quant Trading Добавить параметры запроса (отделены?) запроса непосредственно послеhttps://www.fmz.com/api/v1Ниже приведены параметры запроса, выраженные с использованиемPython:

    {
        "version"   : "1.0",
        "access_key": "xxx",
        "method"    : "GetNodeList",
        "args"      : [],
        "nonce"     : 1516292399361,
        "sign"      : "085b63456c93hfb243a757366600f9c2"
    }
    
    Поля Руководство
    версия Номер версии.
    access_key (ключ доступа) AccessKey, подать заявку на странице управления аккаунтом.
    метод Конкретный метод вызова.
    арги Список параметров конкретного вызванного метода.
    несуществующий Временная метка, в миллисекундах, позволяет ошибку в 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 Quant Trading Platform, соответствующему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 указывает на публичный докер.
    • загружен: загрузка, количество экземпляров стратегии.
    • public: 0 указывает на частный докер, 1 указывает на публичный докер.
    • Регион: географическое расположение.
    • версия: подробная информация о версии докера.
    • wd: включить или не включить сигнализацию в автономном режиме, 0 означает не включено. Поля начинаются с префиксовecs_иunit_, который записывает соответствующую информацию о сервере докера развертывания с одним щелчком мыши (имя оператора, конфигурация, статус и т. д.), цикл выставления счетов, цены и другую информацию, которая здесь не будет повторяться.

Нет параметра

GetRobotGroupList - список групп

GetRobotGroupList()возвращает перечень группировок прямых торгов счета FMZ Quant Trading Platform, соответствующего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 Quant Trading Platform, соответствующим к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 Quant Trading Platform, соответствующего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чтобы получить все прямые транзакции. роботСтатус ложное Номер Укажите пользовательский ярлык живой торговли, которую вы хотите запросить, и вы можете отфильтровать все живой торговли этого ярлика. маркировка ложное строка

ВозьмиPythonLanguages расширенный интерфейс APIСпособы проверкиНапример:print(api('GetRobotList', 'member2')): напечатать информацию о всех торговых операциях в режиме реального времени с пользовательской этикеткойmember2. print(api('GetRobotList', 0, 5, -1, 'member2')): страницы от 0 до 5 и список до 5 роботов, помеченныхmember2.

CommandRobot (руководство робота)

ВCommandRobotМетод используется для отправки команды взаимодействия на прямую торговлю по счету FMZ Quant Trading Platform, соответствующейAPI KEYИдентификатор торговой системы, получающей команду взаимодействия, - это идентификатор торговой системы, указанный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Используется для указания идентификатора живой торговли, которая получает интерактивную команду.GetRobotListметод получения информации о реальном трейдинге на счете, который содержит идентификатор реального трейдинга. robotId Истинно Номер Параметрcmdявляется интерактивной командой, отправленной боту; команда будет захвачена функциейGetCommand()Для конкретной реализации логики взаимодействия в кодексе стратегии обратитесь кGetCommand()Функция вРуководство по API квантовой торговой платформы FMZ- Да. CMD неправда строка

СтопРобот

StopRobot(RobotId)используется для запросаAPI KEYИдентификатор торговли в режиме реального времени, который должен быть прекращен, - это идентификатор торговли в режиме реального времени, указанныйrobotId parameter.

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

ПараметрrobotIdИспользуется для указания идентификатора торговли, которая должна быть остановлена.GetRobotListметод получения информации о реальном трейдинге на счете, который содержит идентификатор реального трейдинга. robotId Истинно Номер

ПерезагрузитьRobot

ВRestartRobotПри этом, в случае, если данный метод используется для возобновления торговли в режиме реального времени в соответствии сAPI KEYИдентификатор возобновляемой реальной торговли - это идентификатор реальной торговли, указанный в заявке.robotId parameter.

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

ВrobotIdПараметр используется для указания ID живой торговли, которая должна быть возобновлена.GetRobotListметод получения информации о реальном трейдинге на счете, который содержит идентификатор реального трейдинга. robotId Истинно Номер Параметры конфигурации торговли в реальном времени, параметры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, расширенный APIRestartRobot (RobotId, Settings)должен быть использован для перезагрузки, иsettingsВы можете перейти или не перейти к параметру.settingsПараметр. Если вы только пройтиRobotIdпараметр, запустить прямую торговлю в соответствии с текущими настройками прямой торговли.

GetRobotDetail (Подробное описание)

ВGetRobotDetailЭтот метод используется для получения подробной информации о торговле в режиме реального времени по счету FMZ Quant Trading Platform, соответствующейAPI KEYИдентификатор торговой сделки в режиме реального времени, который должен быть получен, является идентификатором торговой сделки в режиме реального времени, указанным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Параметр используется для указания идентификатора торговли в режиме реального времени, для которой необходимо получить данные.GetRobotListметод получения информации о торговле в режиме реального времени по счету, который содержит идентификатор торговли в режиме реального времени. robotId Истинно Номер

В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\"]является торговой парой, установленной для обменного объекта, выполненного в режиме реального времени (в порядке сложения и в одно-к-одному соответствии сpid).

Получить учетную запись

ВGetAccountМетод используется для получения информации о счете, соответствующейAPI KEYв запросе счета квантовой торговой платформы 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
    }
}

ПолучитьExchangeList

ВGetExchangeListМетод используется для получения списка бирж и требуемой конфигурационной информации, поддерживаемой платформой FMZ Quant Trading.

{
    "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Идентификатор удаленного узла докера - это идентификатор докера, указанныйnid parameter.

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

Вnidпараметр используется для указания идентификатора докера, который будет удален.GetNodeListметод получения информации о докерах счета. нид неправда Номер

УдалитьRobot

ВDeleteRobot(RobotId, DeleteLogs)Метод используется для удаления торгов на живом экране, соответствующейAPI KEYУдалённый идентификатор реального торговли - это идентификатор реального торговли, указанныйrobotId parameter.

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

ПараметрrobotIdИспользуется для указания идентификатора торговой операции, которая должна быть удалена.GetRobotListметод получения информации о реальном трейдинге на счете, который содержит идентификатор реального трейдинга. robotId Истинно Номер ВdeleteLogsпараметр используется для установки необходимости удалять журнал торгов в режиме реального времени, если передано истинное значение (например:true), журнал торговли в режиме реального времени исключается. deleteLogs неправда Буль

GetStrategyList (Получить стратегию)

ВGetStrategyList()Метод используется для получения информации о стратегии, соответствующейAPI KEYв запросе счета квантовой торговой платформы 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метод используется для создания торговли в режиме реального времени в рамкахAPI KEYсоответствующий счету Quant Trading Platform 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, // Первая структура данных в журналах - это записи журнала в таблице журнала стратегии в базе данных торговли в реальном времени logs: [{
Макс: 3984, Арр: [ [3977, 3, Futures_OKCoin, , 0, 0, Sell ((688.9, 2): 20016, 1526954372591, , ], [3976, 5, , , 0, 0, OKCoin:this_week excessive positions, long: 2, 1526954372410, , ] ], Всего : 1503, Min: 2482 { \ cHFFFFFF }, { \ cHFFFFFF }
// Вторая структура данных в журналах - это записи журнала в таблице журнала стратегии в базе данных торговли в реальном времени Max: 0, Arr: [], Всего : 0, Min: 0 { \ cHFFFFFF }, { \ cHFFFFFF }
// Третья структура данных в журналах - это записи журнала в таблице журнала стратегии в базе данных торговли в реальном времени Max: 0, Arr: [], Всего : 0, Min: 0 }], графика: , обновление: 1527049988000, резюме: ..., "chartTime": 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:
  

Арр: [ [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.

Арр: [ [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

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


Take one of the log data as an example:

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


```23637``` is the log ```ID```, ```0``` is the index of the chart data series, and the last data ```"{\"close\":648,\"high\":650.5,\"low\":647,\"open\":650,\"x\":1575960300000}"``` is the log data; This data is the K-line data on the chart.
Встроенная библиотека Торговый терминал