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

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

Автор:FMZ~Lydia, Создано: 2024-07-05 09:44:08, Обновлено: 2024-09-20 08:52:30

[TOC]

img

Преамбула

После 9 лет технической итерации платформа FMZ Quant Trading была многократно реконструирована, хотя как пользователи мы, возможно, не заметили этого.

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

Руководство по синтаксису:https://www.fmz.com/syntax-guideРуководство пользователя:https://www.fmz.com/user-guide

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

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

Добавлена функция "GetTickers"

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

Если биржа не имеет этого интерфейса (индивидуальные биржи), при вызове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
}

img

Добавлена функция Exchange.CreateOrder

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

В многовидовых сценариях размещения торговых заказов и одновременных сценариях сложность проектирования значительно снижается.exchange.CreateOrder()Функцииsymbol, side, price, amount.

Испытание с использованием среды моделирования фьючерсов 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)
}

img

Таким образом, только три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")

    // Write to chart
    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) +  "`")
}

img

Добавлена функция Exchange.GetPositions

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

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

Вexchange.GetPositions()Функция имеет три формы вызова:

  • Обмен.GetPositions ((() Когда параметры не передаются, данные о положении всех сортов в текущем измерении запрашиваются в соответствии с настройками текущеготорговые пары / код контракта.

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

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

    Некоторые специальные подразделения по размеру валютных контрактов: USDT.futures_combo: Фьючерс_Deribit exchange's spread combined contract. USD.futures_ff: Фьючерс_Кракен exchanges контракт на поставку смешанной маржи. USD.swap_pf: Фьючерсы_Кракен exchange's смешанный марж вечный контракт. Для измерений, которые не поддерживаются интерфейсом 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) +  "`")
}

img

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

Когда параметрыexchange.GetPositions()В случае, если данные о позиции не передаются, можно получить данные о позиции всех постоянных контрактов на базе U, перечисленных на бирже (поскольку текущая торговая пара BTC_USDT, а контракт является свопом, запрос основан на текущей торговой паре и диапазоне измерений контракта).exchange.GetPositions("USDT.swap")и указание диапазона запросов.

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

Функция обновления Exchange.GetTicker

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

Параметрsymbolимеет различные форматы для спотов/фьючерсов на предмет обменаexchange:

  • Объект спотового обмена Формат:AAA_BBB, AAA обозначает baseCurrency, то есть торговую валюту, а BBB обозначает quoteCurrency, то есть валюту ценообразования. Например: спотовая торговая пара BTC_USDT.
  • Объект биржи фьючерсов Формат:AAA_BBB.XXX, AAA представляет baseCurrency, то есть торговую валюту, BBB представляет quoteCurrency, то есть валюту ценообразования, а XXX представляет собой код контракта, такой как вечный контракт swap. Например: BTC_USDT.swap, BTC's U-based perpetual contract. Испытано с помощью 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
}

img

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

Обновление функции Exchange.GetDepth

Подобно функции GetTicker,exchange.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"))
}

img

Обновление функции Exchange.GetTrades

Подобно функции GetTicker,exchange.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) +  "`")
}

img

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

Обновление функции Exchange.GetRecords

Функция GetRecords была значительно скорректирована на этот раз. В дополнение к поддержке параметра символа для прямого указания информации о типе запрашиваемых данных K-линии, исходный параметр периода сохраняется для указания периода K-линии, и добавляется предельный параметр для указания ожидаемой длины K-линии при запросе. В то же время, он также совместим со старой версией функции GetRecords, которая только проходит в параметре периода.

Способ вызоваexchange.GetRecords()Функция:

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

Испытано с использованием 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 time difference between adjacent bars:", r1[1].Time - r1[0].Time, "Milliseconds, Bar length:", r1.length)
    Log("r2 time difference between adjacent bars:", r2[1].Time - r2[0].Time, "Milliseconds, Bar length:", r2.length)
    Log("r3 time difference between adjacent bars:", r3[1].Time - r3[0].Time, "Milliseconds, Bar length:", r3.length)
    Log("r4 time difference between adjacent bars:", r4[1].Time - r4[0].Time, "Milliseconds, Bar length:", r4.length)
    Log("r5 time difference between adjacent bars:", r5[1].Time - r5[0].Time, "Milliseconds, Bar length:", r5.length)
}

img

Обновление функции Exchange.GetOrders

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

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

  • Обмен.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) запрашивает все невыполненные заказы (ожидаемые заказы) всех разновидностей в диапазоне постоянных контрактов на основе U.

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

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

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    // Write to chart
    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) и кода контракта (swap).

Когда параметрETH_USDT.swapВ случае, если указанный параметр не выполнен, требуются незавершенные заказы (ожидаемые заказы) ETH на основе USDT-вечного контракта.

Когда шнур"USDT.swap"При прохождении процедуры, требуются незавершенные заказы (ожидаемые заказы) всех бессрочных контрактов на основе USDT.

Обновление функции exchange.GetPosition

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

Обновлениеexchange.IOФункция

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

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

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

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

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

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

img

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

Влияет на функцию exchange.GetOrder

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

Например:

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

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

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

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

Влияет на функцию обмена.Отменить заказ.

Влияние этого обновления наexchange.CancelOrder()функция такая же, как иexchange.GetOrder() function.

Влияет на функцию обмена.

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

Влияет на обмен.Функция продажи.

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

Влияет на функцию exchange.GetPosition

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

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

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

exchange.GetPosition() // Equivalent to calling exchange.GetPosition("USDT.swap")

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

Влияет на функцию Exchange.GetOrders

  1. Для спотовых бирж:

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

  1. Для бирж фьючерсов:

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

Например, текущая торговая пара BTC_USD и код контракта квартал.

exchange.GetOrders()   // Equivalent to calling exchange.GetOrders("USD.futures")

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

4. Структурные изменения

Структура клеток

Данное обновление добавляет поле "Символ" в структуру Ticker, которая записывает рыночную информацию текущей структуры Ticker. Формат этого поля точно такой же, как формат параметра символаexchange.GetTicker() function.

Структура порядка

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

Структура позиции

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

5. Система обратного тестирования

Согласно обновлению интерфейса API стратегии платформы, система обратного тестирования платформы была обновлена синхронно; Кроме того, система обратного тестирования добавила поддержку:

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

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

1. Новые поля в структуре счетов

ПоляAccountструктуру, возвращеннуюGetAccountФьючерсный обменный объект.

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

  • UPnL Нереализованная прибыль и убытки всех позиций, удерживаемых в валюте текущего маржинального актива.

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

Функция-член SetMarginLevel объекта фьючерсной биржи была обновлена и добавлен символ параметра.

Пример испытания:

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    // The current trading pair is ETH_USDT, the contract code is swap, and the leverage value is set to 10
    exchange.SetMarginLevel(10)
    
    // Directly specify the trading pair BTC_USDT, contract code swap, and set the leverage value to 20
    exchange.SetMarginLevel("BTC_USDT.swap", 20)
}

В структуре рынка, возвращаемой функцией GetMarkets, добавлено поле CtValCcy

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


Больше