[TOC]
После девяти лет технологических ретроспекций и многочисленных реконструирований, которые мы, как пользователи, возможно, не заметили. За последние два года платформа сделала множество оптимизаций и обновлений в области пользовательского опыта, включая полную модернизацию интерфейса пользовательского интерфейса, богатое количество часто используемых инструментов для количественной торговли и добавление большей поддержки ретроспективных данных.
Для того, чтобы упростить разработку стратегии, сделать логику транзакций более понятной и легкой для начинающих, платформа обновила API-интерфейс, используемый стратегией. Для того, чтобы использовать новейшие версии хостера, можно включить эти новые функции. Платформа по-прежнему максимально совместима с вызовами на старых интерфейсах.
Давайте посмотрим, какие обновления для обновления интерфейсов есть и какие изменения требуются для использования старых стратегий, чтобы быть совместимыми с текущим 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│
Обратите внимание, что названия двух функций отличаются только окончанием s, так как GetPositions более семантичны, поэтому рекомендуется использовать GetPositions в последующих версиях.
exchange.GetPositions()
Функции могут быть вызваны тремя способами:
exchange.GetPositions ((() Если вы не передаете никаких параметров,Сделка да / Контрактный кодНастройка, требующая хранить данные для всех сортов в текущем измерении.
exchange.GetPositions ((BTC_USD.swap
、ETH_USDT.swap
、ETH_USDT.quarter
И так далее.
BTC_USD.swap: постоянный контракт на BTC.
ETH_USDT.swap: U-битный постоянный контракт на ETH.
ETH_USDC.swap: USDC-основанный постоянный контракт на ETH. (кроме USDT, можно указать и другую котируемую валюту, больше не упоминается)
ETH_USDT.quarter: U-битный квартальный коэффициент обмена ETH.
BTC_USD.BTC-USD-201226-24250-C: Контракты на опционы на BTC.
exchange.GetPositions ((
Некоторые специальные биржи делятся по размеру контрактов: USDT.futures_combo:Futures_Deribit - контракт с дифференцированным портфелем. USD.futures_ff:Фьючерс_Кракен обменивается смешанными кошельками. USD.swap_pf:Futures_Kraken - долгосрочные контракты на смешанные ценные бумаги.
Для измерений, которые не поддерживаются интерфейсом API биржи, призыв возвращает пустое значение.
Опрос на ОКХ с использованием фьючерсных дисков:
function main() {
exchange.IO("simulate", true)
exchange.SetCurrency("BTC_USDT")
exchange.SetContractType("swap")
var p1 = exchange.GetPositions()
var p2 = exchange.GetPositions("BTC_USDT.swap")
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()
Параметры функции позволяют получить данные о хранениях всех U-битных перманентных контрактов, размещенных на бирже (поскольку текущая сделка - это BTC_USDT, контракт - это swap, в соответствии с текущей сделкой, запрос на диапазон контракта), при этом стоимость эквивалентна вызову.exchange.GetPositions("USDT.swap")
, укажите область запроса.
Новая функция GetFundings позволяет получить процентную ставку на постоянные контракты на фьючерсных биржах. Функция имеет параметры symbol. Функция возвращает строку Array of Funding.
BTC_USDT.swap
│ не передать параметры или передать функцию диапазона ошибки symbol параметры не поддерживаются │Функции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", "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) + "`")
}
ETH_USDT.swap
При параметре "неоконченные заказы" ("подвешенные заказы") USDT на постоянных контрактах с запросом ETH."USDT.swap"
В этом случае, если вы не можете получить оплату за покупку, вы можете обратиться к USDT с просьбой о предоставлении всех незавершенных заказов ("подвешенных заказов") на постоянные контракты 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 был изменен с оригинального формата exchange order 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
。
Только объекты фьючерсных бирж поддерживают эту функцию, и они полностью совпадают в поведении.
Старый определение: exchange.GetPosition () функция, не указывая никаких параметров при вызове, получает данные о наличии текущей сделки пары, конкретного контракта, установленного в коде контракта.
Изменение, после изменения, новое определение: exchange.GetPosition (()) функция, при вызове без указания каких-либо параметров, получает хранение всех сортов текущих настроенных пар сделок, в диапазоне измерений, определенных контрактным кодом.
Например, текущая торговая пара будет называться BTC_USDT, контрактный код будет swap.
exchange.GetPosition() // 等价于调用 exchange.GetPosition("USDT.swap")
Функция запрашивает хранилищные данные постоянных контрактов на U-битах для всех валют.
В частности, в частности:
Старый определение: exchange.GetOrders ((), при вызове без указания каких-либо параметров, получает все незавершенные заказы в текущей транзакционной паре.
Изменение, после изменения, новое определение: exchange.GetOrders (()) функция, при вызове без указания каких-либо параметров, получает все незавершенные заказы на разновидности.
Второе, для фьючерсных бирж:
Старая дефиниция: exchange.GetOrders ((), при вызове без указания каких-либо параметров, получает все незавершенные заказы на текущие пары сделок, установленные конкретным контрактом.
После корректировки, переопределения: exchange.GetOrders (()) функция, призыв которой не указывает никаких параметров, получает все незавершенные заказы в диапазоне измерений, определенных контрактным кодом.
Например, текущая торговая пара - BTC_USD, контрактный код - quarter.
exchange.GetOrders() // 等价于调用 exchange.GetOrders("USD.futures")
Функция запрашивает данные о незавершенных заказах, относящиеся к коэффициенту обмена копей на всех валютах.
Это обновление добавляет в конструкцию Ticker поле Symbol, которое записывает информацию о том, для какой разновидности является текущая структура Ticker.exchange.GetTicker()
Формат параметров символов функции полностью совпадает.
Это обновление добавляет в структуру Order поле Symbol, которое форматируется так, чтобы соответствоватьexchange.GetTicker()
Формат параметров символа функции полностью соответствует. Это обновление также изменило поле Id в структуре Order, чтобы записать информацию о сортах, исходную информацию о порядке, в новом формате Order Id.exchange.GetOrder()
Указание на ID заказа в функции, больше не обсуждается здесь.
Это обновление добавляет в конструктор Position поле Symbol, которое форматируется сexchange.GetTicker()
Формат параметров символов функции полностью совпадает.
Функция GetFundings возвращает массив структур Funding.
{
"Info": {...}, // 交易所资金费率接口原始应答数据
"Symbol": "BTC_USDT.swap", // FMZ平台定义的品种名称
"Interval": 28800000, // 8小时间隔,单位毫秒
"Time": 1729728000000, // 本期资金费率收取时间
"Rate": 0.0001, // 资金费率,即 0.01 %
}
Для удовлетворения потребностей пользователей обновление будет совместимо с дисками, и система ретроспекции будет полностью адаптирована в течение недели. Если коды отдельных стратегий затронуты, пожалуйста, сделайте изменения в соответствии с инструкцией этой статьи.
В соответствии с обновлением API-интерфейсов платформы, все API-интерфейсы в системе рецензирования платформы были синхронизированы и обновлены. Кроме того, система рецензирования поддерживает:
Функции-члены для объектов фьючерсных биржGetAccount
ВозвращениеAccount
Структура была расширена.
Для членской функции 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)
}
CtValCcy
Записывается единица стоимости контракта, которая может быть: BTC, USD, ETH и т.д.CtVal
Записывает стоимость контракта на бирже, соответствующую стоимости контракта на бирже, в единицеCtValCcy
Например, вы можете указать валюту, в которой записано поле.CtVal
Это 0.01,CtValCcy
Для "BTC" означает контракт стоимостью 0.01 BTC.Я не знаю.Я спросил, что случилось с моим новым роботом, возвращающий ID, который также содержит имена транзакций, долгое время изучал, а также логин после заказа, который теперь не отображается, также из-за обновления администратора?
Чан Чжи Чжун/upload/asset/2ffc0f961149326b78aed.png Если вы не знаете, что это за проблема, пожалуйста, ответьте, что это за проблема, вызванная обновлением интерфейса.
Экнемюс 希望exchange.Buy函数能增加开止损单的功能。。
НанСЕГОригинальное название
Я не знаю.Хорошо.
Изобретатели количественного измерения - мечтыХорошо, попробуйте на этой странице. Спасибо за вопрос.
Я не знаю.Да, extMsg1, extMsg2 не отображается.
Изобретатели количественного измерения - мечтыЗдравствуйте, это неизбежное изменение, поскольку обновленная система напрямую указывает разновидность заказа, и ID заказа должен содержать информацию о разновидности, иначе невозможно определить, какая разновидность этого заказа, и не может быть вызван при отзыве (поскольку большинство бирж требуют указать разновидность и указать ID при отзыве). Вы сказали, что послезаказная информация не отображается, то есть: exchange.Buy ((price, amount, extMsg1, extMsg2) при вызове extMsg1, extMsg2 не отображается в журнале?
Изобретатели количественного измерения - мечтыЗдравствуйте, вы отправляете текущие настройки биржи, торговые пары, коды контрактов.
Изобретатель количественныйПожалуйста, отправьте подробности о тестовом коде и конфигурации на форму, инженеры ответят вам в первое время.
Изобретатели количественного измерения - мечтыВ то же время, в некоторых странах существуют существенные различия в условиях и механизмах поддержки.
Изобретатели количественного измерения - мечтыСпасибо за поддержку, если у вас возникли проблемы с использованием, отправьте заявку или оставьте комментарий.