[TOC]
После девяти лет технологических ретроспекций и многочисленных реконструирований, которые мы, как пользователи, возможно, не заметили. За последние два года платформа сделала множество оптимизаций и обновлений в области пользовательского опыта, включая полную модернизацию интерфейса пользовательского интерфейса, богатое количество часто используемых инструментов для количественной торговли и добавление большей поддержки ретроспективных данных.
Для того, чтобы упростить разработку стратегии, сделать логику транзакций более понятной и легкой для начинающих, платформа обновила API-интерфейс, используемый стратегией. Для того, чтобы использовать новейшие версии хостера, можно включить эти новые функции. Платформа по-прежнему максимально совместима с вызовами на старых интерфейсах.
Грамматический справочник:https://www.fmz.com/syntax-guideПользовательские инструкции:https://www.fmz.com/user-guide
Давайте посмотрим, какие обновления для обновления интерфейсов есть и какие изменения требуются для использования старых стратегий, чтобы быть совместимыми с текущим API.
Такой агрегированный рыночный интерфейс необходим для разработки стратегии многообразия, стратегии мониторинга рынка в целом. Он позволяет более легко разрабатывать стратегии и избегать дублирования колес.
Если биржа не имеет такого интерфейса (отдельные биржи), вызовexchange.GetTickers()
Позже в Twitter появилась статья, в которой говорится:
Функция не имеет никаких параметров и возвращает на биржу данные о рынке в режиме реального времени, объединяющие все разновидности рынка в интерфейсе.
exchange.GetTickers()
Функция будетexchange.GetTicker()
Все варианты запрошенных версий функций ((внимательно посмотрите, разница между этими двумя функциями заключается только в единственном множественном числе) ‒).
Мы проверили окружающую среду с помощью ОКХ:
function main() {
exchange.IO("simulate", true)
var tickers = exchange.GetTickers()
if (!tickers) {
throw "tickers error"
}
var tbl = {type: "table", title: "test tickers", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
for (var i in tickers) {
var ticker = tickers[i]
tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
}
LogStatus("`" + JSON.stringify(tbl) + "`")
return tickers.length
}
Новоеexchange.CreateOrder()
Функции являются основными в этом обновлении.exchange.CreateOrder()
Максимальная функция функции - это указание прямо в параметрах функции разновидности, направления и т. д.
В многообразных сценариях сделок с односторонним участием значительно снижается сложность дизайна в сценариях сходства.exchange.CreateOrder()
У нас есть четыре параметра функции.symbol
、side
、price
、amount
。
Опрос на ОКХ с использованием фьючерсных дисков:
function main() {
exchange.IO("simulate", true)
var id1 = exchange.CreateOrder("ETH_USDT.swap", "buy", 3300, 1)
var id2 = exchange.CreateOrder("BTC_USDC.swap", "closebuy", 70000, 1)
var id3 = exchange.CreateOrder("LTC_USDT.swap", "sell", 110, 1)
Log("id1:", id1, ", id2:", id2, ", id3:", id3)
}
Это было три раза.exchange.CreateOrder()
Функциональные вызовы приводят к трем различным видам фьючерсных заказов, которые идут в разных направлениях.
Новоеexchange.GetHistoryOrders()
Функция используется для получения исторических торговых заказов определенного сорта, которая также требует поддержки интерфейса биржи.
Для поиска исторических заказов интерфейсы, реализуемые различными биржами, сильно различаются:
Для того, чтобы упаковать такие интерфейсы с максимальной степенью совместимости, в практическом использовании необходимо обратить внимание на то, соответствуют ли они потребностям, ожиданиям политики.
Подробная информация о функциях больше не описывается здесь. Вы можете ознакомиться с руководством по грамматике в документации API:
https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders
Проверка с помощью Binance Live Display:
function main() {
var orders = exchange.GetHistoryOrders("ETH_USDT")
// 写入图表
var tbl = {type: "table", title: "test GetHistoryOrders", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
for (var order of orders) {
tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
}
LogStatus("orders.length:", orders.length, "\n", "`" + JSON.stringify(tbl) + "`")
}
Старые версии функций доступа к хранимым данным былиexchange.GetPosition()
В этом обновлении добавлена новая функция доступа к хранилищу, чтобы лучше соответствовать семантике названия функции:exchange.GetPositions()
│ при этом сохраняет совместимость/усовершенствование функции GetPosition│
exchange.GetPositions()
Функции могут быть вызваны тремя способами:
Опрос на ОКХ с использованием фьючерсных дисков:
function main() {
exchange.IO("simulate", true)
exchange.SetCurrency("BTC_USDT")
exchange.SetContractType("swap")
var p1 = exchange.GetPositions()
var p2 = exchange.GetPositions("")
var tbls = []
for (var positions of [p1, p2]) {
var tbl = {type: "table", title: "test GetPosition/GetPositions", cols: ["Symbol", "Amount", "Price", "FrozenAmount", "Type", "Profit", "Margin", "ContractType", "MarginLevel"], rows: []}
for (var p of positions) {
tbl.rows.push([p.Symbol, p.Amount, p.Price, p.FrozenAmount, p.Type, p.Profit, p.Margin, p.ContractType, p.MarginLevel])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
}
Когда проникаетexchange.GetPositions()
Параметры функции:ETH_USDT.swap
В этом случае можно получить данные о хранении постоянных контрактов ETH на U-битах.
Когда проникаетexchange.GetPositions()
Параметры функции - это пустые строки.""
Если вы хотите получить данные о всех контрактах, которые вы храните, вы можете использовать этот веб-сайт.
Функцииexchange.GetTicker()
Это обновление в основном связано с добавлением параметров символа. Это позволяет отделить эту функцию от текущей пары сделок, запросить информацию о сортах контрактного кода непосредственно в соответствии с параметрами, упрощает процесс написания кода.
Параметрыsymbol
Объекты биржиexchange
На данный момент существуют две версии:
AAA_BBB
ААА обозначает базовую валюту, BBB обозначает котировочную валюту.
Например: BTC_USDT - насущная торговая пара.AAA_BBB.XXX
ААА обозначает базовую валюту, BBB обозначает котировочную валюту, XXX обозначает контрактный код, например, бессрочный контракт swap.
Например: BTC_USDT.swap, постоянный контракт на U-бит BTC.Проверка в условиях реального рынка фьючерсов:
var symbols = ["BTC_USDT.swap", "BTC_USDT.quarter", "BTC_USD.swap", "BTC_USD.next_quarter", "ETH_USDT.swap"]
function main() {
exchange.SetCurrency("ETH_USD")
exchange.SetContractType("swap")
var arr = []
var t = exchange.GetTicker()
arr.push(t)
for (var symbol of symbols) {
var ticker = exchange.GetTicker(symbol)
arr.push(ticker)
}
var tbl = {type: "table", title: "test GetTicker", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
for (var ticker of arr) {
tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
}
LogStatus("`" + JSON.stringify(tbl) + "`")
return arr
}
Запрос на наборы данных о рынке с указанием разновидности становится проще.
Это то же самое, что и функция GetTicker.exchange.GetDepth()
Функция также добавляет параметры symbol. Это позволяет напрямую указывать разновидности при запросе данных глубины.
Проверка в условиях реального рынка фьючерсов:
function main() {
exchange.SetCurrency("LTC_USD")
exchange.SetContractType("swap")
Log(exchange.GetDepth())
Log(exchange.GetDepth("ETH_USDT.quarter"))
Log(exchange.GetDepth("BTC_USD.swap"))
}
Это то же самое, что и функция GetTicker.exchange.GetTrades()
Функция также добавляет параметры symbol.
Проверка в условиях реального рынка фьючерсов:
function main() {
var arr = []
var arrR = []
var symbols = ["LTC_USDT.swap", "ETH_USDT.quarter", "BTC_USD.swap"]
for (var symbol of symbols) {
var r = exchange.Go("GetTrades", symbol)
arrR.push(r)
}
for (var r of arrR) {
arr.push(r.wait())
}
var tbls = []
for (var i = 0; i < arr.length; i++) {
var trades = arr[i]
var symbol = symbols[i]
var tbl = {type: "table", title: symbol, cols: ["Time", "Amount", "Price", "Type", "Id"], rows: []}
for (var trade of trades) {
tbl.rows.push([trade.Time, trade.Amount, trade.Price, trade.Type, trade.Id])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
}
В этом обновлении также принято совместимость.exchange.Go()
Функция одновременно вызывает API-интерфейс платформы при передаче информации о видах, указанных параметрами символов.
Функция GetRecords в этот раз сделала большие изменения, кроме того, что поддерживает информацию о разновидностях данных K-строка, которые запрос указывает непосредственно с параметрами символов.
exchange.GetRecords()
Призыв функции:
Проверка в условиях реального рынка фьючерсов:
function main() {
exchange.SetCurrency("ETH_USDT")
exchange.SetContractType("swap")
var r1 = exchange.GetRecords()
var r2 = exchange.GetRecords(60 * 60)
var r3 = exchange.GetRecords("BTC_USDT.swap")
var r4 = exchange.GetRecords("BTC_USDT.swap", 60)
var r5 = exchange.GetRecords("LTC_USDT.swap", 60, 3000)
Log("r1相邻Bar时间差值:", r1[1].Time - r1[0].Time, "毫秒, Bar长度:", r1.length)
Log("r2相邻Bar时间差值:", r2[1].Time - r2[0].Time, "毫秒, Bar长度:", r2.length)
Log("r3相邻Bar时间差值:", r3[1].Time - r3[0].Time, "毫秒, Bar长度:", r3.length)
Log("r4相邻Bar时间差值:", r4[1].Time - r4[0].Time, "毫秒, Bar长度:", r4.length)
Log("r5相邻Bar时间差值:", r5[1].Time - r5[0].Time, "毫秒, Bar长度:", r5.length)
}
Функция GetOrders также добавленаsymbol
Параметры, которые позволяют напрямую задать запрос на разновидности, которые в настоящее время не завершены; также поддерживает запрос на все разновидности; совместим с первоначальным способом вызова.
exchange.GetOrders()
Призывы к функциям выполняются следующим образом:
Опрос на ОКХ с использованием фьючерсных дисков:
function main() {
exchange.IO("simulate", true)
exchange.SetCurrency("BTC_USDT")
exchange.SetContractType("swap")
// 写入图表
var tbls = []
for (var symbol of ["null", "ETH_USDT.swap", ""]) {
var tbl = {type: "table", title: symbol, cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
var orders = null
if (symbol == "null") {
orders = exchange.GetOrders()
} else {
orders = exchange.GetOrders(symbol)
}
for (var order of orders) {
tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
}
При отсутствии параметров, по умолчанию запрашивается текущая BTC_USDT торговая пара, все незавершенные подвешенные списки на постоянные контракты swap.
Укажите параметрыETH_USDT.swap
При параметре, запрашиваемом для длительных контрактов в паре ETH_USDT, все незавершенные подвешенные списки.
Введите пустую строку""
В этом случае, если вы не хотите, чтобы ваш долг был оплачен, вы можете обратиться за помощью к клиенту.
По-прежнему совместимая с старыми функциями получения имен для хранения, также добавлен параметр символа, который позволяет указать информацию о разновидностих хранения данных для конкретных запросов.
Использование функцийexchange.GetPositions()
В этом случае мы должны быть готовы.
Дляexchange.IO("api", ...)
Призыв функций, обновленный для всех объектов биржи, поддерживает возможность прямого ввода полного адреса запроса.
Например, если вы хотите вызвать интерфейс OKX:
// GEThttps://www.okx.com/api/v5/account/max-withdrawal ccy: BTC
Поддержка прямого ввода адресов базhttps://www.okx.com
, без необходимости переключать адрес базы и вызывать функцию IO.
Опрос на ОКХ с использованием фьючерсных дисков:
function main() {
exchange.IO("simulate", true)
return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}
В частности, это вызвало серьезные проблемы.exchange.GetOrder(id)
Параметры функцииid
Параметр id был изменен с оригинального формата id ордера на бирже в формат строки, содержащий разновидности сделок.
Все упакованные заказы на платформе FMZ имеют ID в этом формате.
Например:
123456
До этого обновления, если вы хотите вызвать функцию GetOrder, то ID заказа будет:123456
。BTC-USDT
Я не знаю.
Обратите внимание, что здесь речь идет о коде торговой разновидности, названной биржей, а не о паре, определенной платформой FMZ.В результате этого обновления мы получим более высокую оценку.exchange.GetOrder(id)
Формат параметра id, который должна передать функция, изменяется на:BTC-USDT,123456
。
Например: "Я хочу, чтобы вы знали, что я не хочу, чтобы вы меняли". Поскольку в этом случае функция CreateOrder была усовершенствована, чтобы напрямую указывать сорт подзаказа (сорт подзаказа и текущая пара сделок, код контракта может отличаться), если возвращенный ID заказа не содержит информацию о сортах, то этот ID заказа не будет использоваться. Поскольку не известно, какой сорт этого заказа (контракт) на момент конкретного запроса. Большинство сделок, в которых требуется указать параметры, описывающие код сорта.
Как сочетать это влияние: Если заказ используется с помощью функции exchange.IO, которая напрямую вызывает интерфейс заказа на бирже, то возвращаемое значение обычно содержит первоначальный символ биржи (разновидность кода) и первоначальный идентификатор заказа. Также, если использовать интерфейс заказа, упакованный на платформе FMZ, то, поскольку начальная часть ID заказа - это код сорта сделки, если необходимо использовать оригинальный ID заказа, нужно просто удалить код сорта и запятую.
Это повышениеexchange.CancelOrder()
Влияние функцийexchange.GetOrder()
Функции одинаковые.
Это повышениеexchange.Buy()
Влияние функцийexchange.GetOrder()
Функции одинаковые.exchange.Buy()
Функция возвращает ID ордера для новой структуры, например, ID, возвращаемый при размещении ордера на биржевых фьючерсах OKX:LTC-USDT-SWAP,1578360858053058560
。
Это повышениеexchange.Sell()
Влияние функцийexchange.GetOrder()
Функции одинаковые.exchange.Sell()
Функция возвращает ID ордера для новой структуры, например, ID, возвращаемый при размещении ордера на биржевых фьючерсах OKX:ETH-USDT-SWAP,1578360832820125696
。
Это обновление добавляет в конструкцию Ticker поле Symbol, которое записывает информацию о том, для какой разновидности существует нынешняя структура Ticker.
Формат поляexchange.GetTicker()
Формат параметров символов функции полностью совпадает.
Это обновление добавляет в структуру Order поле Symbol, которое форматируется так, чтобы соответствоватьexchange.GetTicker()
Формат параметров символов функции полностью совпадает.
Это обновление также изменило поле Id в структуре Order, чтобы записать информацию о сортах, исходную информацию о заказах в новом формате Order Id.exchange.GetOrder()
Указание на ID заказа в функции, больше не обсуждается здесь.
Это обновление добавляет в конструктор Position поле Symbol, которое форматируется сexchange.GetTicker()
Формат параметров символов функции полностью совпадает.
Для удовлетворения потребностей пользователей обновление будет совместимо с дисками, и система ретроспекции будет полностью адаптирована в течение недели. Если коды отдельных стратегий затронуты, пожалуйста, сделайте изменения в соответствии с инструкцией этой статьи.
Функции-члены для объектов фьючерсных биржGetAccount
ВозвращениеAccount
Структура была расширена.
Equity В настоящее время общий доход в виде валют, не поддерживаемых отдельными фьючерсными биржами, в основном поддерживает этот поле. В основном используется для расчета прибыли и убытков в реальном времени.
UPnL Нереализованные прибыли от всех позиций, которые в настоящее время держат валютные активы, за исключением крайне отдельных фьючерсных бирж, которые не поддерживают, большинство из них поддерживают этот сегмент.
Для членской функции SetMarginLevel на объектах фьючерсных бирж был добавлен параметровый символ.
Тесты:
function main() {
exchange.SetCurrency("ETH_USDT")
exchange.SetContractType("swap")
// 当前交易对为ETH_USDT,合约代码为swap,设置杠杆值为10
exchange.SetMarginLevel(10)
// 直接指定交易对BTC_USDT,合约代码swap,设置杠杆值20
exchange.SetMarginLevel("BTC_USDT.swap", 20)
}
Я не знаю.Я спросил, что случилось с моим новым роботом, возвращающий ID, который также содержит имена транзакций, долгое время изучал, а также логин после заказа, который теперь не отображается, также из-за обновления администратора?
Чан Чжи Чжун/upload/asset/2ffc0f961149326b78aed.png Если вы не знаете, что это за проблема, пожалуйста, ответьте, что это за проблема, вызванная обновлением интерфейса.
Экнемюс 希望exchange.Buy函数能增加开止损单的功能。。
НанСЕГОригинальное название
Я не знаю.Хорошо.
Изобретатели количественного измерения - мечтыХорошо, попробуйте на этой странице. Спасибо за вопрос.
Я не знаю.Да, extMsg1, extMsg2 не отображается.
Изобретатели количественного измерения - мечтыЗдравствуйте, это неизбежное изменение, поскольку обновленная система напрямую указывает разновидность заказа, и ID заказа должен содержать информацию о разновидности, иначе невозможно определить, какая разновидность этого заказа, и не может быть вызван при отзыве (поскольку большинство бирж требуют указать разновидность и указать ID при отзыве). Вы сказали, что послезаказная информация не отображается, то есть: exchange.Buy ((price, amount, extMsg1, extMsg2) при вызове extMsg1, extMsg2 не отображается в журнале?
Изобретатели количественного измерения - мечтыЗдравствуйте, вы отправляете текущие настройки биржи, торговые пары, коды контрактов.
Изобретатель количественныйПожалуйста, отправьте подробности о тестовом коде и конфигурации на форму, инженеры ответят вам в первое время.
Изобретатели количественного измерения - мечтыВ то же время, в некоторых странах существуют существенные различия в условиях и механизмах поддержки.
Изобретатели количественного измерения - мечтыСпасибо за поддержку, если у вас возникли проблемы с использованием, отправьте заявку или оставьте комментарий.