4
Подписаться
1271
Подписчики

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

Создано: 2024-06-28 09:08:29, Обновлено: 2024-11-01 10:08:12
comments   12
hits   2053

[TOC]

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

Предисловие

Количественная торговая платформа Inventor прошла 9-летнюю технологическую итерацию и много раз реконструировалась, хотя мы, как пользователи, могли этого не заметить. За последние два года платформа провела множество оптимизаций и обновлений с точки зрения пользовательского опыта, включая комплексное обновление пользовательского интерфейса, обогащение часто используемых инструментов количественной торговли и добавление большей поддержки данных бэктестинга.

Чтобы сделать разработку стратегии более удобной, торговую логику более понятной и облегчить новичкам начало работы, платформа обновила API-интерфейс, используемый стратегией. Используйте последнюю версию вашего хоста, чтобы включить эти новые функции. Платформа сохраняет максимальную совместимость с вызовами старых интерфейсов. Информация о новых функциях интерфейса API была обновлена ​​в документации API платформы количественной торговли Inventor:

Давайте кратко рассмотрим, какие интерфейсы были обновлены и какие изменения необходимы для того, чтобы сделать старые стратегии совместимыми с текущим API.

1. Новый API-интерфейс

функция exchange.GetTickers

Для разработки многовариантных стратегий и стратегий полного мониторинга рыночной ситуации. Этот агрегированный рыночный интерфейс необходим для упрощения разработки стратегий и избежания необходимости изобретать велосипед. Количественная торговая платформа изобретателя инкапсулирует в себе такие API-интерфейсы бирж.

Если на бирже нет этого интерфейса (отдельные биржи), позвонитеexchange.GetTickers()Появится сообщение об ошибке: Не поддерживается.

Эта функция не имеет параметров и возвращает рыночные данные в реальном времени по всем разновидностям в агрегированном рыночном интерфейсе биржи. Это можно просто понять как:

exchange.GetTickers()Функция естьexchange.GetTicker()Полная версия функции (разница между двумя названиями функций заключается в единственном и множественном числе).

Для тестирования мы используем среду точечной имитации OKX:

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
}

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

функция exchange.CreateOrder

Новыйexchange.CreateOrder()Основное внимание в этом обновлении уделяется функциям.exchange.CreateOrder()Самая важная функция функции — прямое указание типа и направления заказа в параметрах функции. Таким образом, он больше не зависит от текущих настроек системы, таких как торговые пары, коды контрактов, направления торговли и т. д.

Сложность проектирования значительно снижается в сценариях с многовариантными торговыми ордерами и одновременными сценариями.exchange.CreateOrder()Четыре параметра функции:symbolsidepriceamount

Тестирование с использованием среды моделирования фьючерсов OKX:

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

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

Это заняло всего 3 разаexchange.CreateOrder()Вызов функции размещает три фьючерсных ордера разных видов и направлений.

Функция exchange.GetHistoryOrders

Новыйexchange.GetHistoryOrders()Функция используется для получения исторических заказов транзакций определенного продукта. Эта функция также требует поддержки интерфейса биржи.

Для запроса исторических заказов интерфейсы, реализованные различными биржами, существенно различаются:

  • Некоторые поддерживают постраничные запросы, а другие — нет;
  • На некоторых биржах существует период окна запросов, то есть заказы старше N дней не могут быть запрошены;
  • Большинство бирж поддерживают отправку запросов в указанное время, но некоторые этого не делают;

Такие интерфейсы инкапсулируются с максимальной степенью совместимости, и при реальном использовании следует обращать внимание на то, соответствуют ли они требованиям и ожиданиям стратегии.

Подробное описание функции здесь не повторяется, вы можете обратиться к руководству по синтаксису в документации API:

https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders

Протестировано с использованием спотовой торговой среды Binance:

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) +  "`")
}

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

функция exchange.GetPositions

Старая версия функции сбора данных о местоположении:exchange.GetPosition(). Для лучшего соответствия семантике именования функций это обновление добавляет новую функцию для получения позиций:exchange.GetPositions(). В то же время он по-прежнему совместим/обновлен с функцией GetPosition.

Обратите внимание, что имена двух функций отличаются только завершающим s. Поскольку GetPositions семантически более корректен, рекомендуется использовать GetPositions в будущем.

exchange.GetPositions()Существует три формы вызовов функций:

  • exchange.GetPositions() Если параметры не переданы, текущийТорговые пары / Код контрактаЗапросить данные о местоположении всех разновидностей в текущем измерении.

  • exchange.GetPositions(“ETH_USDT.swap”) При указании конкретной информации о продукте (формат ETH_USDT.swap определяется платформой FMZ) запросите данные о позиции конкретного продукта. Пример:BTC_USD.swapETH_USDT.swapETH_USDT.quarterждать. BTC_USD.swap: бессрочный контракт на валюту BTC. ETH_USDT.swap: бессрочный контракт ETH на основе U. ETH_USDC.swap: бессрочный контракт с маржой USDC на ETH. (Помимо USDT, вы также можете указать другую quoteCurrency, которая не будет здесь повторяться) ETH_USDT.quarter: квартальный контракт на поставку ETH на основе U. BTC_USD.BTC-USD-201226-24250-C: опционный контракт с маржинальной торговлей монетами BTC.

  • exchange.GetPositions(“USDT.swap”) Запросить данные о положении всех символов в соответствии с указанным диапазоном размеров. USDT.swap: диапазон бессрочных контрактов на основе U. USDT.futures: Диапазон контрактов на поставку, деноминированных в U. USDC.swap: диапазон бессрочных контрактов с маржой USDC. (Помимо USDT, вы также можете указать другую quoteCurrency, которая не будет здесь повторяться) USDC.futures: Диапазон фьючерсных контрактов с маржой USDC. USD.swap: Диапазон бессрочных контрактов на основе валюты. USD.futures: Диапазон фьючерсных контрактов на валюту. USDT.option: диапазон опционных контрактов на основе U. USD.option: Диапазон опционных контрактов на основе валюты.

Некоторые специальные подразделения размеров биржевых контрактов: USDT.futures_combo: комбинация CFD биржи Futures_Deribit. USD.futures_ff:Контракт на поставку смешанной маржи на бирже Futures_Craken. USD.swap_pf: Фьючерсы_Гибридно-маржинальный бессрочный контракт на бирже Kraken.

Для измерений, которые не поддерживаются интерфейсом API обмена, будет выведено сообщение об ошибке и при вызове будет возвращено нулевое значение.

Тестирование с использованием среды моделирования фьючерсов OKX:

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) +  "`")
}

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

При входящемexchange.GetPositions()Параметры функции:ETH_USDT.swapПри использовании бессрочного контракта на основе ETH U вы можете получить данные о позиции бессрочного контракта на основе ETH U.

Если не импортированоexchange.GetPositions()При использовании функции в качестве параметра можно получить данные о позициях всех бессрочных контрактов U-margin, котирующихся на бирже (поскольку текущей торговой парой является BTC_USDT, а контрактом является своп, запрос основан на текущей торговой паре и Диапазон размеров контракта). Это эквивалентно вызовуexchange.GetPositions("USDT.swap"), укажите область запроса.

функция exchange.GetFundings

Недавно добавленная функция GetFundings позволяет получить ставку финансирования бессрочных контрактов на фьючерсных биржах. Функция принимает один параметр-символ. Функция возвращает массив структур финансирования.

  • Укажите параметр символа: Возвращает массив структуры информации о ставке финансирования (массив Funding) указанного продукта. Параметр символа может быть установлен в диапазоне, аналогично параметру символа функции GetOrders/GetPositions.
  • Без указания параметра символа: возвращает все данные о продукте текущего измерения в соответствии с измерением, в котором находится текущая торговая пара и код контракта. Механизм такой же, как у функции GetOrders/GetPositions.
  • Если биржа должна указать конкретный продукт, необходимо передать параметр символа, то есть код конкретного продукта, например:BTC_USDT.swap. Если в функцию не передано ни одного параметра или передан диапазон, появится сообщение об ошибке, сообщающее о том, что параметр символа не поддерживается.

2. Обновление интерфейса API

функция exchange.GetTicker

Функция рынкаexchange.GetTicker()Это обновление в основном добавляет параметры символов. Эту функцию можно использовать для прямого запроса рыночных данных в соответствии с информацией о продукте, указанной в параметрах, независимо от текущей торговой пары и кода контракта. Упрощает процесс написания кода. При этом он по-прежнему совместим с методом вызова без передачи параметров и в максимальной степени совместим со старыми стратегиями платформы.

параметрsymbolДля обмена объектамиexchangeСуществуют различные форматы для спотовых/фьючерсных сделок:

  • Объекты обмена пятнами Формат:AAA_BBBAAA представляет baseCurrency, т. е. валюту транзакции, а BBB представляет quoteCurrency, т. е. валюту ценообразования. Названия валют написаны заглавными буквами. Например: спотовая торговая пара BTC_USDT.
  • Объекты фьючерсной биржи Формат:AAA_BBB.XXX, AAA представляет baseCurrency, т. е. валюту транзакции, BBB представляет quoteCurrency, т. е. валюту ценообразования, а XXX представляет код контракта, например, бессрочный контрактный своп. Названия валют указаны заглавными буквами, а коды контрактов — строчными буквами. Например: BTC_USDT.swap, бессрочный контракт BTC на основе U.

Протестировано с использованием реальной среды Binance Futures:

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
}

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

Запрос пакета рыночных данных по указанному символу стал намного проще.

функция exchange.GetDepth

То же, что и функция GetTickerexchange.GetDepth()На этот раз функция также добавляет параметр символа. Тип можно указать напрямую при запросе данных о глубине.

Протестировано с использованием реальной среды Binance Futures:

function main() {
    exchange.SetCurrency("LTC_USD")
    exchange.SetContractType("swap")

    Log(exchange.GetDepth())
    Log(exchange.GetDepth("ETH_USDT.quarter"))
    Log(exchange.GetDepth("BTC_USD.swap"))
}

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

функция exchange.GetTrades

То же, что и функция GetTickerexchange.GetTrades()На этот раз функция также добавляет параметр символа. При запросе данных о рыночных транзакциях можно напрямую указать продукт.

Протестировано с использованием реальной среды Binance Futures:

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) +  "`")
}

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

Это обновление также совместимо сexchange.Go()Когда функция одновременно вызывает интерфейс API платформы, параметр символа передается для указания информации о продукте.

функция exchange.GetRecords

На этот раз функция GetRecords была существенно скорректирована, в дополнение к поддержке параметра symbol для непосредственного указания информации о типе запрашиваемых данных K-line. Исходный параметр периода сохраняется для указания периода K-линии, а параметр предела добавляется для указания ожидаемой длины K-линии при запросе. Он также совместим со старой версией функции GetRecords, которая передает только параметр периода.

exchange.GetRecords()Как вызвать функцию:

  • exchange.GetRecords() Если параметры не указаны, запрашиваются данные K-line продукта, соответствующие текущей торговой паре/коду контракта. Период K-line — это период K-line по умолчанию, установленный в интерфейсе бэктестинга стратегии или в реальной торговле.
  • exchange.GetRecords(60 * 15) Если указан только параметр периода K-линии, запрашиваются данные K-линии продукта, соответствующие текущей торговой паре/коду контракта.
  • exchange.GetRecords(“BTC_USDT.swap”) Если указана только информация о продукте, запрашиваются данные K-line указанного продукта. Период K-line — это период K-line по умолчанию, установленный в интерфейсе бэктестинга стратегии или в реальной торговле.
  • exchange.GetRecords(“BTC_USDT.swap”, 60 * 60) Укажите информацию о продукте и конкретный период K-line для запроса данных K-line.
  • exchange.GetRecords(“BTC_USDT.swap”, 60, 1000) Укажите информацию о продукте, конкретный период K-линии и желаемую длину K-линии для запроса данных K-линии. Обратите внимание, что когда параметр limit превышает максимальную длину одного запроса от биржи, будет сгенерирован пейджинговый запрос (т. е. несколько вызовов интерфейса K-line биржи).

Протестировано с использованием реальной среды Binance Futures:

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

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

функция exchange.GetOrders

Функция GetOrders также добавляетsymbolПараметры, вы можете указать конкретный продукт и запросить незавершенные заказы (отложенные заказы) этого продукта; вы также можете запросить незавершенные заказы (отложенные заказы) всех продуктов в указанном диапазоне измерений.

exchange.GetOrders()Функцию можно вызвать следующими способами:

  • exchange.GetOrders() Для фьючерсных бирж: если параметры не переданы, текущаяТорговые пары / Код контрактаЗапросить все открытые ордера (отложенные ордера) для всех символов в текущем диапазоне измерений.
    Для спотовых бирж: если параметры не переданы, запросы отправляются на все невыполненные заказы (отложенные заказы) по всем спотовым продуктам.
  • exchange.GetOrders(“BTC_USDT.swap”) или exchange.GetOrders(“BTC_USDT”) Для фьючерсных бирж: exchange.GetOrders(“BTC_USDT.swap”) для запроса всех незавершенных ордеров (отложенных ордеров) для бессрочного контракта BTC с маржой USDT. Для спотовых бирж: exchange.GetOrders(“BTC_USDT”), запрос всех незавершенных ордеров (отложенных ордеров) для спотовой торговой пары BTC_USDT.
  • Поддерживается только для фьючерсных бирж exchange.GetOrders(“USDT.swap”) Запрос невыполненных ордеров (отложенных ордеров) всех разновидностей в указанном диапазоне измерений Диапазон деления размерности соответствует диапазону в функции GetPositions. Например: exchange.GetOrders(“USDT.swap”) запрашивает все невыполненные ордера (отложенные ордера) всех разновидностей в диапазоне бессрочных контрактов с маржой USDT.

Тестирование с использованием среды моделирования фьючерсов OKX:

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) +  "`")
}
  • Если параметры не переданы, запрашиваются незавершенные ордера (отложенные ордера) всех разновидностей в размерном диапазоне текущей торговой пары (BTC_USDT) и кода контракта (своп).
  • Указание параметровETH_USDT.swapПараметр, запрос невыполненных ордеров (отложенных ордеров) бессрочного контракта ETH с маржой USDT.
  • Передача строки"USDT.swap"Запросить все невыполненные ордера (отложенные ордера) бессрочных контрактов с маржой USDT.

функция exchange.GetPosition

Он по-прежнему совместим со старым наименованием функций получения местоположения, а также добавляет параметр символа, который может указывать информацию о типе конкретных запрошенных данных местоположения. Использование функций иexchange.GetPositions()Полностью соответствует.

Функция обмена.IO

дляexchange.IO("api", ...)Метод вызова функции был обновлен для поддержки прямой передачи полного адреса запроса для всех объектов обмена.

Например, если вы хотите вызвать интерфейс OKX:

GET https://www.okx.com /api/v5/account/max-withdrawal ccy: BTC

Поддержка прямой записи на базовый адресhttps://www.okx.com, нет необходимости переключать базовый адрес перед вызовом функции ввода-вывода.

Тестирование с использованием среды моделирования фьючерсов OKX:

function main() {
    exchange.IO("simulate", true)

    return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}

Подробное объяснение обновления API платформы количественной торговли Inventor: улучшение опыта разработки стратегии

3. Влияние интерфейса API

функция exchange.GetOrder

Это обновление в основном затрагиваетexchange.GetOrder(id)Параметры функцииidПараметр id изменяется с исходного идентификатора биржевого ордера на строковый формат, содержащий разновидность торговли. Все упакованные идентификаторы заказов на платформе FMZ имеют этот формат.

Например:

  • Исходный идентификатор заказа на обмен, указанный в заказе на обмен, следующий:123456 До этого обновления, если вы хотите вызвать функцию GetOrder, передаваемый идентификатор заказа будет следующим:123456
  • Биржевой символ продукта, определенный в заказе на обмен:BTC-USDT。 Обратите внимание, что здесь упоминается код торгового продукта, названный биржей, а не торговая пара, определенная платформой FMZ.

После этого обновления,exchange.GetOrder(id)Формат идентификатора параметра, который должна передать функция, изменяется следующим образом:BTC-USDT,123456

  • Позвольте мне сначала объяснить, почему сделан именно такой дизайн: Поскольку на этот раз функция CreateOrder была обновлена ​​для непосредственного указания продукта для размещения заказа (заказанный продукт может отличаться от текущей установленной торговой пары и кода контракта), если возвращаемый идентификатор заказа не содержит информации о продукте. Тогда этот идентификатор заказа будет недоступен для использования. Потому что при проверке заказа вы не знаете, к какому типу (контракту) относится заказ. Большинство бирж требуют указывать параметры, описывающие код товара при проверке и отмене заказов.

  • Как учесть этот эффект: Если вы используете функцию exchange.IO для прямого вызова интерфейса заказа биржи с целью размещения заказа, возвращаемое значение обычно содержит исходный символ биржи (код продукта) и исходный идентификатор заказа. Затем, объединив эти два значения с помощью английских запятых, вы получите идентификатор заказа, определенный платформой FMZ. Аналогично, если вы используете интерфейс заказа, инкапсулированный платформой FMZ, для размещения заказа, поскольку начало идентификатора заказа — это торговый код продукта, если вам нужно использовать исходный идентификатор заказа, вам нужно только удалить код продукта и запятая.

функция exchange.CancelOrder

Это обновление предназначено дляexchange.CancelOrder()Влияние функций иexchange.GetOrder()Функции те же.

Функция обмена.Купить

Это обновление предназначено дляexchange.Buy()Влияние функций иexchange.GetOrder()Функции те же.exchange.Buy()Идентификатор ордера, возвращаемый функцией, представляет собой новую структуру, например, идентификатор, возвращаемый при размещении фьючерсного ордера на бирже OKX:LTC-USDT-SWAP,1578360858053058560

Функция обмена.Продажи

Это обновление предназначено дляexchange.Sell()Влияние функций иexchange.GetOrder()Функции те же.exchange.Sell()Идентификатор ордера, возвращаемый функцией, представляет собой новую структуру, например, идентификатор, возвращаемый при размещении фьючерсного ордера на бирже OKX:ETH-USDT-SWAP,1578360832820125696

функция exchange.GetPosition

Эту функцию поддерживают только объекты фьючерсной биржи. Для функции exchange.GetPosition() для получения данных о позиции добавлено новое имя exchange.GetPositions(), и их поведение абсолютно одинаково.

Старое определение: функция exchange.GetPosition(). При вызове без указания каких-либо параметров она получает данные о позиции конкретного контракта, заданного текущей торговой парой и кодом контракта.

После корректировки и модификации новое определение выглядит так: функция exchange.GetPosition(). При вызове без указания каких-либо параметров она получает позиции всех разновидностей в диапазоне измерений, определяемом текущей установленной торговой парой и кодом контракта.

Например, текущая торговая пара — BTC_USDT, а код контракта — swap. В это время звоните:

exchange.GetPosition() // 等价于调用 exchange.GetPosition("USDT.swap")

Эта функция запросит данные о позициях бессрочных контрактов U-margin всех валют.

функция exchange.GetOrders

  1. Для спотовых обменов:

Старое определение: функция exchange.GetOrders(). При вызове без указания каких-либо параметров она извлекает все невыполненные ордера для текущей торговой пары.

После корректировки и модификации новое определение выглядит так: функция exchange.GetOrders(). При вызове без указания каких-либо параметров она получает незавершенные ордера всех спотовых торговых пар.

  1. Для фьючерсных бирж:

Старое определение: функция exchange.GetOrders(). При вызове без указания каких-либо параметров она извлекает все незавершенные ордера определенного контракта, заданного текущей торговой парой и кодом контракта.

После корректировки и модификации новое определение: функция exchange.GetOrders(). При вызове без указания каких-либо параметров она получает все незавершенные ордера в диапазоне измерений, определяемом текущей установленной торговой парой и кодом контракта.

Например, текущая торговая пара — BTC_USD, а код контракта — quarter. В это время звоните:

exchange.GetOrders()   // 等价于调用 exchange.GetOrders("USD.futures")

Эта функция запросит данные о невыполненных заказах по всем фьючерсным контрактам с маржой на монеты.

4. Структурная перестройка

Структура тикера

Это обновление добавляет поле «Символ» в структуру тикера, в котором регистрируется рыночная информация о продукте текущей структуры тикера. Формат этого поля:exchange.GetTicker()Формат символьных параметров функции точно такой же.

Структура заказа

Это обновление добавляет поле Символ в структуру Заказа. Формат этого поля такой же, какexchange.GetTicker()Формат символьных параметров функции точно такой же. Это обновление также изменяет поле «Идентификатор» структуры заказа для записи информации о продукте и исходной информации о заказе в новом формате идентификатора заказа. ссылаться наexchange.GetOrder()Описание идентификатора заказа в функции здесь повторяться не будет.

Структура должности

Это обновление добавляет поле Символ в структуру Позиция. Формат этого поля такой же, какexchange.GetTicker()Формат символьных параметров функции точно такой же.

Структура финансирования

Функция GetFundings возвращает массив структур финансирования.

{
    "Info": {...},               // 交易所资金费率接口原始应答数据
    "Symbol": "BTC_USDT.swap",   // FMZ平台定义的品种名称
    "Interval": 28800000,        // 8小时间隔,单位毫秒
    "Time": 1729728000000,       // 本期资金费率收取时间
    "Rate": 0.0001,              // 资金费率,即 0.01 %
}

5. Система бэктестинга

Для удовлетворения потребностей пользователей это обновление сначала будет совместимо с реальным рынком, а система бэктестинга будет адаптирована в течение недели. Если затронуты отдельные коды стратегий, следуйте инструкциям в этой статье, чтобы внести изменения и адаптации.

В соответствии с обновлением интерфейса API стратегии платформы, интерфейсы API в системе бэктестинга платформы были обновлены синхронно; кроме того, в систему бэктестинга добавлена ​​поддержка:

  • Поддержка большего количества данных бэктестинга биржи.
  • Поддерживает данные бэктестинга всех типов бирж.
  • Смешанная торговля контрактами на основе U, валютными поставками и бессрочными контрактами.
  • Объекты фьючерсной биржи поддерживают переключение торговых пар во время бэктестинга.
  • Система бэктестинга добавляет поддержку новых функций, таких как функция GetTickers и функция GetMarkets.

Дополнительные обновления

1. Добавлены поля «Капитал» и «UPnL» в структуру счета.

Функции-члены для объектов фьючерсной биржиGetAccountВозвращатьсяAccountСтруктура была расширена за счет полей.

  • Equity Общий капитал текущей валюты маржинального актива. За исключением нескольких фьючерсных бирж, которые не поддерживают это поле, большинство бирж поддерживают это поле. В основном используется для расчета маржинальной прибыли и убытков по счету в режиме реального времени.
  • UPnL Нереализованная прибыль и убыток всех позиций, удерживаемых в текущей валюте маржинального актива. Большинство фьючерсных бирж поддерживают это поле, за исключением нескольких, которые этого не делают.

2. Функция SetMarginLevel обновляет поддержку параметров символов.

Функция-член 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)
}

3. Добавьте поле CtValCcy в структуру Market, возвращаемую функцией GetMarkets.

  • ПоляCtValCcyЗапишите единицу стоимости контракта. Единицей стоимости контракта может быть: BTC, USD, ETH и т. д.
  • ПоляCtValЗапишите стоимость одного контракта этого торгового продукта на бирже, в единицахCtValCcyАктуальность полевой записи. Например:CtValсоставляет 0,01,CtValCcy«BTC» означает, что один контракт стоит 0,01 BTC.