avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

Creado el: 2024-06-28 09:08:29, Actualizado el: 2024-11-01 10:08:12
comments   12
hits   2053

[TOC]

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

Prefacio

La plataforma de comercio cuantitativo Inventor ha pasado por 9 años de iteración tecnológica y ha sido reconstruida muchas veces, aunque como usuarios puede que no lo hayamos notado. En los últimos dos años, la plataforma ha realizado muchas optimizaciones y actualizaciones en términos de experiencia del usuario, incluida una actualización integral de la interfaz de usuario, enriqueciendo las herramientas de comercio cuantitativo comúnmente utilizadas y agregando más soporte de datos de backtesting.

Para que el diseño de la estrategia sea más conveniente, la lógica comercial más clara y más fácil para los principiantes comenzar, la plataforma actualizó la interfaz API utilizada por la estrategia. Utilice la última versión de su host para habilitar estas nuevas funciones. La plataforma sigue siendo compatible con llamadas a interfaces antiguas en la mayor medida posible. La información sobre las nuevas funciones de la interfaz API se ha actualizado en la documentación de la API de la plataforma de comercio cuantitativo de Inventor:

Ahora echemos un vistazo rápido a qué interfaces se han actualizado y qué cambios son necesarios para que las estrategias antiguas sean compatibles con la API actual.

1. Nueva interfaz API

Función exchange.GetTickers

Para diseñar estrategias multivariantes y estrategias de seguimiento completo de la situación del mercado. Esta interfaz de mercado agregada es esencial para facilitar el desarrollo de estrategias y evitar reinventar la rueda. La plataforma de comercio cuantitativo del inventor encapsula dichas API de intercambios.

Si el exchange no tiene esta interfaz (changes individuales), llameexchange.GetTickers()Se informará un mensaje de error: No compatible.

Esta función no tiene ningún parámetro y devolverá los datos del mercado en tiempo real de todas las variedades en la interfaz de mercado agregada del exchange. Se puede entender simplemente como:

exchange.GetTickers()La función esexchange.GetTicker()La versión completa de la función (la diferencia entre los dos nombres de función es el singular y el plural).

Utilizamos el entorno de simulación de puntos OKX para realizar pruebas:

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
}

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

Función exchange.CreateOrder

Nuevoexchange.CreateOrder()Las funciones son el foco de esta actualización.exchange.CreateOrder()La función más importante de la función es especificar directamente el tipo y la dirección de la orden en los parámetros de la función. De esta manera, ya no depende de las configuraciones actuales del sistema, como pares comerciales, códigos de contrato, direcciones comerciales, etc.

La complejidad del diseño se reduce en gran medida en escenarios de órdenes comerciales de múltiples productos y escenarios concurrentes.exchange.CreateOrder()Los cuatro parámetros de la función sonsymbolsidepriceamount

Prueba utilizando el entorno de simulación de futuros 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)
}

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

Esto solo me tomó 3 vecesexchange.CreateOrder()La llamada de función coloca tres órdenes de futuros de diferentes variedades y direcciones.

Función exchange.GetHistoryOrders

Nuevoexchange.GetHistoryOrders()La función se utiliza para obtener los pedidos de transacciones históricas de un determinado producto. Esta función también requiere el soporte de la interfaz de intercambio.

Para consultar pedidos históricos, las interfaces implementadas por los distintos exchanges varían enormemente:

  • Algunos admiten consultas paginadas, mientras que otros no;
  • Algunos intercambios tienen un período de ventana de consulta, es decir, no se pueden consultar órdenes con más de N días de antigüedad;
  • La mayoría de los intercambios admiten la realización de consultas en un momento específico, pero algunos no;

Estas interfaces están encapsuladas con el mayor grado de compatibilidad y, en el uso real, se debe prestar atención a si cumplen los requisitos y expectativas de la estrategia.

La descripción detallada de la función no se repite aquí, puede consultar el manual de sintaxis en la documentación de la API:

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

Probado utilizando el entorno de trading spot de 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) +  "`")
}

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

Función exchange.GetPositions

La versión anterior de la función de adquisición de datos de posición es:exchange.GetPosition(). Para que coincida mejor con la semántica de nombres de funciones, esta actualización agrega una nueva función para obtener posiciones:exchange.GetPositions(). Al mismo tiempo, todavía es compatible/actualizado con la función GetPosition.

Tenga en cuenta que los dos nombres de función difieren únicamente en la s final. Debido a que GetPositions es semánticamente más correcto, se recomienda que utilice GetPositions en el futuro.

exchange.GetPositions()Hay tres formas de llamadas de función:

  • exchange.GetPositions() Cuando no se pasan parámetros, la corrientePares comerciales / Código de contratoSolicitar los datos de posición de todas las variedades en la dimensión actual.

  • exchange.GetPositions(“ETH_USDT.swap”) Al especificar información específica del producto (el formato ETH_USDT.swap está definido por la plataforma FMZ), solicite los datos de posición del producto específico. Ejemplo:BTC_USD.swapETH_USDT.swapETH_USDT.quarteresperar. BTC_USD.swap: contrato perpetuo basado en la moneda BTC. ETH_USDT.swap: contrato perpetuo basado en U de ETH. ETH_USDC.swap: contrato perpetuo con margen USDC para ETH. (Además de USDT, también puede especificar diferentes monedas de cotización, que no se repetirán aquí) ETH_USDT.quarter: contrato de entrega trimestral basado en U de ETH. BTC_USD.BTC-USD-201226-24250-C: contrato de opción con margen de moneda BTC.

  • exchange.GetPositions(“USDT.swap”) Solicitar datos de posición para todos los símbolos según el rango de dimensión especificado. USDT.swap: rango de contrato perpetuo basado en U. USDT.futures: Gama de contratos de entrega basados ​​en U. USDC.swap: rango de contrato perpetuo con margen del USDC. (Además de USDT, también puede especificar diferentes monedas de cotización, que no se repetirán aquí) USDC.futures: gama de contratos de futuros con margen de USDC. USD.swap: rango de contrato perpetuo basado en moneda. USD.futures: Gama de contratos de futuros basados ​​en divisas. USDT.option: rango de contrato de opción basado en U. USD.option: Rango de contratos de opciones basados ​​en divisas.

Algunas divisiones especiales de la dimensión del contrato de intercambio: USDT.futures_combo: combinación de CFD del mercado de futuros Deribit. USD.futures_ff: contrato de entrega de margen mixto del exchange Futures_Craken. USD.swap_pf: Futuros_Un contrato perpetuo con margen híbrido en el intercambio Kraken.

Para las dimensiones que no son compatibles con la interfaz API de intercambio, se informará un error y se devolverá un valor nulo al realizar la llamada.

Prueba utilizando el entorno de simulación de futuros 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) +  "`")
}

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

Al entrarexchange.GetPositions()Los parámetros de la función sonETH_USDT.swapCuando utiliza el contrato perpetuo basado en ETH U, puede obtener los datos de posición del contrato perpetuo basado en ETH U.

Cuando no se importaexchange.GetPositions()Cuando la función se utiliza como parámetro, se pueden obtener los datos de posición de todos los contratos perpetuos de margen U que figuran en el intercambio (debido a que el par comercial actual es BTC_USDT y el contrato es swap, la solicitud se basa en el par comercial actual y rango de dimensión del contrato). Esto equivale a llamarexchange.GetPositions("USDT.swap"), especifique un alcance de solicitud.

Función exchange.GetFundings

La función GetFundings recientemente agregada puede obtener la tasa de financiación de contratos perpetuos en bolsas de futuros. La función toma un símbolo de parámetro. La función devuelve una matriz de estructuras de financiación.

  • Especifique el parámetro de símbolo: devuelve la matriz de estructura de información de tasa de financiación (matriz de financiación) del producto especificado. El parámetro de símbolo se puede configurar en un rango, similar al parámetro de símbolo de la función GetOrders/GetPositions.
  • Sin especificar el parámetro de símbolo: devuelve todos los datos de producto de la dimensión actual según la dimensión en la que se encuentran el par de negociación actual y el código de contrato. El mecanismo es el mismo que el de la función GetOrders/GetPositions.
  • Si el intercambio debe especificar un producto específico, se debe pasar el parámetro símbolo, es decir, el código del producto específico, por ejemplo:BTC_USDT.swap. Si no se pasan parámetros o se pasa un rango a la función, se mostrará un mensaje de error indicando que el parámetro de símbolo no es compatible.

2. Actualización de la interfaz API

Función exchange.GetTicker

Función del mercadoexchange.GetTicker()Esta actualización agrega principalmente parámetros de símbolo. Esta función se puede utilizar para solicitar datos del mercado directamente de acuerdo con la información del producto especificada por los parámetros, independientemente del par comercial actual y el código del contrato. Simplifica el proceso de escritura de código. Al mismo tiempo, todavía es compatible con el método de llamada sin pasar parámetros y es compatible con las antiguas estrategias de la plataforma en la mayor medida.

parámetrosymbolPara objetos de intercambioexchangeExisten diferentes formatos para spot/futuros:

  • Objetos de intercambio al contado El formato es:AAA_BBBAAA representa la moneda base, es decir, la moneda de transacción, y BBB representa la moneda de cotización, es decir, la moneda de fijación de precios. Los nombres de las monedas están todos en letras mayúsculas. Por ejemplo: par de operaciones spot BTC_USDT.
  • Objetos de la Bolsa de Futuros El formato es:AAA_BBB.XXXAAA representa la moneda base, es decir, la moneda de transacción, BBB representa la moneda de cotización, es decir, la moneda de fijación de precios, y XXX representa el código del contrato, como el swap de contrato perpetuo. Los nombres de las monedas están todos en letras mayúsculas y los códigos de contrato están en letras minúsculas. Por ejemplo: BTC_USDT.swap, contrato perpetuo basado en U de BTC.

Probado utilizando el entorno en vivo de 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
}

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

Solicitar un lote de datos de mercado para un símbolo específico se ha vuelto mucho más sencillo.

Función exchange.GetDepth

Igual que la función GetTickerexchange.GetDepth()La función también agrega un parámetro de símbolo esta vez. Es posible especificar el tipo directamente al solicitar datos de profundidad.

Probado utilizando el entorno en vivo de 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"))
}

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

Función exchange.GetTrades

Igual que la función GetTickerexchange.GetTrades()La función también agrega un parámetro de símbolo esta vez. Es posible especificar directamente el producto al solicitar datos de transacciones del mercado.

Probado utilizando el entorno en vivo de 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) +  "`")
}

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

Esta actualización también es compatible conexchange.Go()Cuando la función llama simultáneamente a la interfaz API de la plataforma, se pasa el parámetro de símbolo para especificar la información del producto.

Función exchange.GetRecords

La función GetRecords se ha ajustado significativamente esta vez, además de admitir el parámetro de símbolo para especificar directamente la información de tipo de los datos de la línea K solicitados. Se conserva el parámetro de período original para especificar el período de la línea K y se agrega un parámetro de límite para especificar la longitud de la línea K esperada al realizar la solicitud. También es compatible con la versión anterior de la función GetRecords que solo pasa el parámetro de período.

exchange.GetRecords()Cómo llamar a la función:

  • exchange.GetRecords() Si no se especifican parámetros, se solicitan los datos de la línea K del producto correspondiente al código de contrato/par de negociación actual. El período de la línea K es el período de la línea K predeterminado establecido en la interfaz de backtesting de la estrategia o en la negociación real.
  • exchange.GetRecords(60 * 15) Cuando solo se especifica el parámetro de período de la línea K, se solicitan los datos de la línea K del producto correspondiente al código de contrato/par comercial actual.
  • exchange.GetRecords(“BTC_USDT.swap”) Cuando solo se especifica la información del producto, se solicitan los datos de la línea K del producto especificado. El período de la línea K es el período de la línea K predeterminado establecido en la interfaz de backtesting de la estrategia o en el trading real.
  • exchange.GetRecords(“BTC_USDT.swap”, 60 * 60) Especifique la información del producto y el período específico de la línea K para solicitar datos de la línea K.
  • exchange.GetRecords(“BTC_USDT.swap”, 60, 1000) Especifique la información del producto, el período de línea K específico y la longitud de línea K deseada para solicitar datos de línea K. Tenga en cuenta que cuando el parámetro de límite excede la longitud máxima de una sola solicitud del intercambio, se generará una solicitud de paginación (es decir, múltiples llamadas a la interfaz de línea K del intercambio).

Probado utilizando el entorno en vivo de 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)
}

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

Función exchange.GetOrders

La función GetOrders también agregasymbolParámetros, puede especificar un producto específico y consultar los pedidos no terminados (pedidos pendientes) del producto; también puede consultar los pedidos no terminados (pedidos pendientes) de todos los productos en el rango de dimensión especificado.

exchange.GetOrders()La función se puede llamar de las siguientes maneras:

  • exchange.GetOrders() Para intercambios de futuros: cuando no se pasan parámetros, la corrientePares comerciales / Código de contratoSolicitar todas las órdenes abiertas (órdenes pendientes) para todos los símbolos en el rango de dimensión actual.
    Para intercambios al contado: cuando no se pasan parámetros, se realizan solicitudes para todos los pedidos pendientes de todos los productos al contado.
  • intercambio.GetOrders(“BTC_USDT.swap”) o intercambio.GetOrders(“BTC_USDT”) Para intercambios de futuros: exchange.GetOrders(“BTC_USDT.swap”) para consultar todas las órdenes no completadas (órdenes pendientes) para el contrato perpetuo con margen en USDT de BTC. Para intercambios al contado: exchange.GetOrders(“BTC_USDT”), consulta todas las órdenes no completadas (órdenes pendientes) para el par de operaciones al contado BTC_USDT.
  • Solo se admite en intercambios de futuros exchange.GetOrders(“USDT.swap”) Solicitar órdenes no completadas (órdenes pendientes) de todas las variedades en un rango de dimensión especificado El rango de división de dimensión es consistente con el rango en la función GetPositions. Por ejemplo: exchange.GetOrders(“USDT.swap”) solicita todas las órdenes no cumplidas (órdenes pendientes) de todas las variedades en el rango de contratos perpetuos con margen de USDT.

Prueba utilizando el entorno de simulación de futuros 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) +  "`")
}
  • Cuando no se pasan parámetros, se solicitan las órdenes no completadas (órdenes pendientes) de todas las variedades en el rango de dimensión del par comercial actual (BTC_USDT) y el código de contrato (swap).
  • Especificación de parámetrosETH_USDT.swapParámetro, solicita las órdenes no completadas (órdenes pendientes) del contrato perpetuo con margen USDT de ETH.
  • Pasando una cadena"USDT.swap"Solicitar todas las órdenes pendientes (órdenes pendientes) de contratos perpetuos con margen en USDT.

Función exchange.GetPosition

Todavía es compatible con la antigua denominación de la función de adquisición de posición y también agrega el parámetro de símbolo, que puede especificar el tipo de información de los datos de posición solicitados específicos. Uso de funciones yexchange.GetPositions()Totalmente consistente.

Funciones de exchange.IO

paraexchange.IO("api", ...)Se ha actualizado el método de llamada de función para admitir el paso directo de la dirección de solicitud completa para todos los objetos de intercambio.

Por ejemplo, si desea llamar a la interfaz OKX:

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

Admite escritura directa a la dirección basehttps://www.okx.com, no es necesario cambiar la dirección base antes de llamar a la función IO.

Prueba utilizando el entorno de simulación de futuros OKX:

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

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

Explicación detallada de la actualización de la API de la plataforma de negociación cuantitativa de Inventor: mejora de la experiencia de diseño de estrategias

3. Impacto de la interfaz API

Función exchange.GetOrder

Esta actualización afecta principalmente aexchange.GetOrder(id)Parámetros de funciónidEl parámetro id se cambia del id de la orden de intercambio original a un formato de cadena que contiene la variedad de negociación. Todos los ID de pedidos empaquetados en la plataforma FMZ están en este formato.

Por ejemplo:

  • El ID de orden de intercambio original definido en la orden de intercambio es:123456 Antes de esta actualización, si desea llamar a la función GetOrder, el ID de pedido que se pasa es123456
  • El símbolo del producto con nombre de intercambio definido en la orden de intercambio:BTC-USDT。 Tenga en cuenta que lo que se menciona aquí es el código del producto comercial nombrado por el intercambio, no el par comercial definido por la plataforma FMZ.

Después de esta actualización,exchange.GetOrder(id)El formato del parámetro id que la función debe pasar se ajusta a:BTC-USDT,123456

  • Permítanme primero explicar por qué se hace este diseño: Debido a que la función CreateOrder se ha actualizado esta vez para especificar directamente el producto sobre el cual se realizará un pedido (el producto pedido puede ser diferente del par comercial y el código de contrato configurados actualmente), si el ID del pedido devuelto no contiene la información del producto. Entonces este ID de pedido no estará disponible. Porque cuando revisas el pedido, no sabes para qué tipo (contrato) es el pedido. La mayoría de los intercambios requieren especificar parámetros que describen el código del producto al verificar y cancelar pedidos.

  • Cómo aprovechar este efecto: Si usa la función exchange.IO para llamar directamente a la interfaz de pedido del exchange para realizar un pedido, el valor de retorno generalmente contiene el símbolo original del exchange (código de producto) y la identificación del pedido original. Luego, al concatenar los dos con comas inglesas, obtendrá el ID de pedido definido por la plataforma FMZ. De manera similar, si utiliza la interfaz de pedido encapsulada por la plataforma FMZ para realizar un pedido, dado que el comienzo del ID de pedido es el código del producto comercial, si necesita usar el ID de pedido original, solo necesita eliminar el código del producto y coma.

Función exchange.CancelOrder

Esta actualización es paraexchange.CancelOrder()El impacto de las funciones yexchange.GetOrder()Las funciones son las mismas.

Función de intercambio.Compra

Esta actualización es paraexchange.Buy()El impacto de las funciones yexchange.GetOrder()Las funciones son las mismas.exchange.Buy()El ID de orden devuelto por la función es una nueva estructura, por ejemplo, el ID devuelto al realizar una orden de futuros en la bolsa OKX:LTC-USDT-SWAP,1578360858053058560

Función de intercambio.Venta

Esta actualización es paraexchange.Sell()El impacto de las funciones yexchange.GetOrder()Las funciones son las mismas.exchange.Sell()El ID de orden devuelto por la función es una nueva estructura, por ejemplo, el ID devuelto al realizar una orden de futuros en la bolsa OKX:ETH-USDT-SWAP,1578360832820125696

Función exchange.GetPosition

Solo los objetos de bolsa de futuros admiten esta función. Para la función exchange.GetPosition(), que permite obtener datos de posición, se ha añadido un nuevo nombre, exchange.GetPositions(), y sus comportamientos son exactamente los mismos.

Definición anterior: función exchange.GetPosition(). Cuando se la llama sin especificar ningún parámetro, obtiene los datos de posición del contrato específico establecido por el par de negociación actual y el código de contrato.

Después de realizar los ajustes y modificaciones, la nueva definición es la siguiente: función exchange.GetPosition(). Cuando se la llama sin especificar ningún parámetro, obtiene las posiciones de todas las variedades en el rango de dimensión determinado por el par de negociación y el código de contrato actualmente establecidos.

Por ejemplo, el par comercial actual es BTC_USDT y el código del contrato es swap. En este momento llame al:

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

Esta función solicitará los datos de posición de los contratos perpetuos de margen U de todas las monedas.

Función exchange.GetOrders

  1. Para intercambios al contado:

Definición anterior: función exchange.GetOrders(). Cuando se la llama sin especificar ningún parámetro, recupera todas las órdenes pendientes para el par de operaciones actual.

Después de realizar los ajustes y modificaciones, la nueva definición es la siguiente: función exchange.GetOrders(). Cuando se la llama sin especificar ningún parámetro, obtiene las órdenes no completadas de todos los pares de operaciones al contado.

  1. Para los mercados de futuros:

Definición anterior: función exchange.GetOrders(). Cuando se la llama sin especificar ningún parámetro, recupera todas las órdenes no completadas del contrato específico establecido por el par de operaciones actual y el código de contrato.

Después de realizar los ajustes y modificaciones, la nueva definición es la siguiente: función exchange.GetOrders(). Cuando se la llama sin especificar ningún parámetro, obtiene todos los pedidos no completados en el rango de dimensión determinado por el par de operaciones y el código de contrato establecidos actualmente.

Por ejemplo, el par comercial actual es BTC_USD y el código del contrato es trimestre. En este momento llame al:

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

Esta función solicitará los datos de órdenes pendientes de todos los contratos de futuros con margen de monedas.

4. Ajuste estructural

Estructura del ticker

Esta actualización agrega un campo Símbolo a la estructura Ticker, que registra la información de mercado del producto de la estructura Ticker actual. El formato de este campo esexchange.GetTicker()El formato del parámetro de símbolo de la función es exactamente el mismo.

Estructura de la orden

Esta actualización agrega un campo Símbolo a la estructura de Pedido. El formato de este campo es el mismo queexchange.GetTicker()El formato del parámetro de símbolo de la función es exactamente el mismo. Esta actualización también modifica el campo Id de la estructura del pedido para registrar la información del producto y la información del pedido original en el nuevo formato de ID de pedido. referirse aexchange.GetOrder()La descripción del ID del pedido en la función no se repetirá aquí.

Estructura de puestos

Esta actualización agrega un campo Símbolo a la estructura de Posición. El formato de este campo es el mismo queexchange.GetTicker()El formato del parámetro de símbolo de la función es exactamente el mismo.

Estructura de financiación

La función GetFundings devuelve una matriz de estructuras de financiación.

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

5. Sistema de backtesting

Para satisfacer las necesidades de los usuarios, esta actualización primero será compatible con el mercado real y el sistema de pruebas retrospectivas se adaptará en una semana. Si los códigos de estrategia individuales se ven afectados, siga las instrucciones de este artículo para realizar cambios y adaptaciones.

De acuerdo con la actualización de la interfaz API de la estrategia de la plataforma, las interfaces API en el sistema de backtesting de la plataforma se han actualizado de manera sincrónica; además, el sistema de backtesting ha agregado soporte para:

  • Admite más datos de backtesting de intercambio.
  • Admite pruebas retrospectivas de datos de todo tipo de intercambios.
  • Comercio mixto de contratos basados ​​en U, contratos con entrega basados ​​en divisas y contratos perpetuos.
  • Los objetos de intercambio de futuros admiten el cambio de pares comerciales durante las pruebas retrospectivas.
  • El sistema de backtesting agrega soporte para nuevas funciones como la función GetTickers y la función GetMarkets.

Actualizaciones complementarias

1. Se agregaron los campos Patrimonio y UPnL a la estructura de la cuenta.

Funciones miembro para objetos de intercambio de futurosGetAccountDevolverAccountLa estructura se ha ampliado con campos.

  • Equity El capital total de la divisa del activo de margen actual. A excepción de unas pocas bolsas de futuros que no admiten este campo, la mayoría de las bolsas lo admiten. Se utiliza principalmente para calcular las ganancias y pérdidas del margen de la cuenta en tiempo real.
  • UPnL Las ganancias y pérdidas no realizadas de todas las posiciones mantenidas en la divisa del activo de margen actual. La mayoría de los mercados de futuros admiten este campo, excepto algunos que no lo hacen.

2. La función SetMarginLevel actualiza la compatibilidad con los parámetros de símbolos

La función miembro SetMarginLevel del objeto de intercambio de futuros se ha actualizado para agregar el parámetro símbolo.

Ejemplo de prueba:

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. Agregue el campo CtValCcy a la estructura de mercado devuelta por la función GetMarkets

  • CamposCtValCcyRegistre la unidad de valor de un contrato. La unidad de valor de un contrato puede ser: BTC, USD, ETH, etc.
  • CamposCtValRegistre el valor de un contrato de este producto comercial en la bolsa, en unidades deCtValCcyLa moneda del registro de campo. Por ejemplo:CtVales 0,01,CtValCcy“BTC” significa que un contrato vale 0,01 BTC.