En la carga de los recursos... Cargando...

Más detalles de la actualización de la API de la plataforma de intercambio cuantitativa de inventores: mejorar la experiencia de diseño estratégico

El autor:Los inventores cuantifican - sueños pequeños, Creado: 2024-06-28 09:08:29, Actualizado: 2024-07-24 12:00:40

[TOC] ¿Qué quieres decir?

img

Prólogo

Los inventores de la plataforma de intercambio cuantitativo se rediseñaron varias veces después de nueve años de iterativas tecnológicas, aunque como usuarios es posible que no lo notemos. En los últimos dos años, la plataforma ha realizado una serie de optimizaciones y mejoras en la experiencia del usuario, incluida una interfaz de usuario totalmente actualizada, herramientas de intercambio cuantitativo más comunes y más soporte para datos de retrospección.

Para facilitar el diseño de la política, la lógica de transacción más clara y más fácil de manejar para los principiantes, la plataforma ha actualizado la interfaz API utilizada por la política. Los administradores de las últimas versiones pueden activar estas nuevas funciones. La plataforma sigue siendo compatible con las llamadas de las interfaces antiguas.

El libro de gramática:https://www.fmz.com/syntax-guideGuía de usuario:https://www.fmz.com/user-guide

Entonces, a través de este artículo, vamos a ver qué actualizaciones de actualización de interfaces existen y qué cambios se necesitan para que las políticas antiguas sean compatibles con la API actual.

1 - Nuevo API

新增exchange.GetTickers函数

Este tipo de interfaz de mercado agregado es esencial para diseñar estrategias de múltiples variedades, estrategias de monitoreo de mercados en todo el mercado. Para que las estrategias sean más fáciles de desarrollar y evitar la repetición de las ruedas, los inventores de las plataformas de comercio cuantitativo envuelven API de intercambio.

Si el intercambio no tiene esta interfaz (excambio individual), puede llamarexchange.GetTickers()En el caso de los bloggers, el error es el siguiente: No apoyar.

La función no tiene ningún parámetro y devuelve al exchange datos de mercado en tiempo real de todas las variedades agregadas en la interfaz de mercado. Se puede entender simplemente como:

exchange.GetTickers()La función esexchange.GetTicker()La variedad completa de versiones solicitadas de las funciones (cuidado, la diferencia entre los dos nombres de funciones es solo un plural) ‒.

En la actualidad, la mayoría de los usuarios de la plataforma están utilizando la plataforma para realizar pruebas en el ambiente de simulación de disco de 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函数

Nuevo aumentoexchange.CreateOrder()La función es el punto de partida de esta actualización.exchange.CreateOrder()La función más importante es especificar directamente en los parámetros de la función la variedad, dirección o tipo de pedido. De este modo, no depende de la configuración actual del sistema para los pares de transacciones, el código de contrato, la dirección de transacción, etc.

En el caso de los escenarios de transacciones múltiples, la complejidad del diseño se reduce en gran medida en los escenarios de concurrencia.exchange.CreateOrder()Los cuatro parámetros de la función son:symbolsidepriceamount

Las pruebas en el entorno del disco de simulación de futuros de 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

Así que sólo se usa tres veces.exchange.CreateOrder()Las llamadas de función dan lugar a tres tipos diferentes de órdenes de futuros, en diferentes direcciones.

新增exchange.GetHistoryOrders函数

Nuevo aumentoexchange.GetHistoryOrders()La función se utiliza para obtener órdenes de transacción históricas de una variedad, que también requiere soporte de la interfaz del intercambio.

Para consultar los pedidos históricos, las interfaces implementadas por los intercambios son muy diferentes:

  • Algunos soportan consultas separadas, otros no.
  • Algunas transacciones no pueden ser consultadas durante todo el período de la ventana de consulta, es decir, los pedidos de más de N días.
  • La mayoría de los intercambios apoyan la consulta de horarios específicos, algunos no.

Para que este tipo de interfaces se envuelvan con la máxima compatibilidad, en el uso real se debe tener en cuenta si cumplen con las necesidades y expectativas de la política.

Para más información sobre las funciones, consulte el manual de gramática de la API:

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

Las pruebas en el entorno real de la moneda real:

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

img

新增exchange.GetPositions函数

La función de almacenamiento de datos de la versión anterior fueexchange.GetPosition()En esta actualización se añade una nueva función de obtención de almacenamiento para que se adapte mejor a la semántica del nombre de la función:exchange.GetPositions()También es compatible con la función GetPosition.

exchange.GetPositions()Hay tres formas de llamar a las funciones:

  • exchange.GetPositions (en inglés) Cuando no se transmite ningún parámetro, se solicita el almacenamiento de datos según la configuración actual del par de transacciones / código del contrato.
  • exchange.GetPositions ((ETH_USDT.swap con el botón) Cuando se especifica la información de una variedad específica (este formato es definido por la plataforma FMZ), se solicita la información de almacenamiento de una variedad específica.
  • exchange.GetPositions (en inglés) Solicite todos los datos de tenencia de las dimensiones actuales de las interfaces de almacenamiento disponibles en el mercado.

Las pruebas en el entorno del disco de simulación de futuros de OKX:

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

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

    var p1 = exchange.GetPositions()
    var p2 = exchange.GetPositions("")

    var tbls = []
    for (var positions of [p1, p2]) {
        var tbl = {type: "table", title: "test GetPosition/GetPositions", cols: ["Symbol", "Amount", "Price", "FrozenAmount", "Type", "Profit", "Margin", "ContractType", "MarginLevel"], rows: []}
        for (var p of positions) {
            tbl.rows.push([p.Symbol, p.Amount, p.Price, p.FrozenAmount, p.Type, p.Profit, p.Margin, p.ContractType, p.MarginLevel])
        } 
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

img

Cuando se transmiteexchange.GetPositions()El parámetro de la función esETH_USDT.swapEn la actualidad, la mayoría de los clientes de ETH están en el mercado, y los clientes de ETH pueden obtener datos sobre el mantenimiento de contratos permanentes de ETH.

img

Cuando se transmiteexchange.GetPositions()Los parámetros de la función son una cadena vacía.""En la actualidad, la mayoría de los contratos de U.S.A. se encuentran almacenados en el archivo de U.S.A. y se pueden obtener datos de todos los contratos de U.S.A.

2 Aplicación de la API mejorada

升级exchange.GetTicker函数

Función de campoexchange.GetTicker()Esta actualización incluye la adición de parámetros de símbolos; permite que la función se desprenda de los pares de transacciones actuales, solicite información de variedades de contratos directamente de acuerdo con los parámetros especificados; simplifica el proceso de redacción del código; sin embargo, sigue siendo compatible con las formas de llamada que no se transmiten, siendo compatible al máximo con las políticas antiguas de la plataforma.

ParámetrossymbolPara los objetos de la bolsaexchangeLos futuros están en diferentes formatos:

  • Objetos de las bolsas El formato es:AAA_BBBAAA representa la base de la moneda de negociación y BBB representa la moneda de cotización. Los nombres de las monedas están en mayúsculas. Por ejemplo, el BTC_USDT es un par de transacciones al contado.
  • Objetos de las bolsas de futuros El formato es:AAA_BBB.XXXAAA representa la moneda de base, BBB representa la moneda de cotización, y XXX representa el código del contrato, por ejemplo, el cambio de contrato permanente. Por ejemplo: BTC_USDT.swap, un contrato perpetuo de U de BTC.

Las pruebas en el entorno real de los futuros de divisas:

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

El diseño de datos de mercado para solicitar un grupo de variedades especificadas se vuelve más sencillo.

升级exchange.GetDepth函数

Es lo mismo que la función GetTickerexchange.GetDepth()La función también añade un parámetro de símbolo. Puede ser posible especificar directamente la variedad cuando se solicita datos de profundidad.

Las pruebas en el entorno real de los futuros de divisas:

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函数

Es lo mismo que la función GetTickerexchange.GetTrades()La función también añade un parámetro de símbolo. Se puede especificar directamente la variedad cuando se solicitan datos de transacciones en el mercado.

Las pruebas en el entorno real de los futuros de divisas:

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

Esta actualización también es compatible con la aprobación.exchange.Go()La función se llama simultáneamente a la API de la plataforma cuando se transmite la información de variedad especificada por el parámetro de símbolo.

升级exchange.GetRecords函数

La función GetRecords ha hecho una gran modificación en esta ocasión, además de apoyar la información de la variedad de datos de la línea K que se solicita directamente especificando el parámetro de símbolo. Se mantiene el parámetro period original para especificar el período de la línea K, y se agrega un parámetro limit para especificar la longitud de la línea K deseada durante el período de la solicitud. También es compatible con las versiones anteriores de la función GetRecords.

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

  • exchange.GetRecords (en inglés) Sin especificar ningún parámetro cuando se solicita la variedad de datos de línea K de la pareja de transacciones / contrato correspondiente al código actual, el ciclo de línea K es el ciclo de línea K predeterminado en la interfaz de revisión de estrategias o en el plato real.
  • exchange.GetRecords ((60 * 15) también está disponible. Cuando sólo se especifica el parámetro de ciclo de la línea K, se solicitan datos de la línea K de la variedad correspondiente a la pareja de transacciones/contratos en curso.
  • exchange.GetRecords (en inglés) (en inglés) Cuando se especifica solo la información de la variedad, se solicitan datos de línea K para especificar la variedad, y el ciclo de línea K es el ciclo de línea K predeterminado en la interfaz de revisión de estrategias o en el disco real.
  • exchange.GetRecords ((BTC_USDT.swap, 60 * 60)) Especifique la información de la variedad, especifique el ciclo de la línea K específico y solicite datos de la línea K.
  • exchange.GetRecords ((BTC_USDT.swap, 60, 1000) se encuentra en el sitio web de exchange.GetRecords. Especifique la información de la variedad, especifique el ciclo específico de la línea K, indique la longitud de la línea K que se desea obtener periódicamente y solicite datos de la línea K. Tenga en cuenta que cuando el parámetro de límite excede la longitud máxima de una solicitud de un intercambio, se genera una solicitud de separación de páginas (es decir, varias llamadas a la interfaz de línea K del intercambio).

Las pruebas en el entorno real de los futuros de divisas:

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

img

升级exchange.GetOrders函数

También se ha añadido la función GetOrders.symbolParámetros que permiten especificar directamente la variedad de la consulta de los pedidos que no se han completado en la actualidad; también se admite la consulta de todos los pedidos sin separar las variedades; es compatible con el modo de llamada original.

exchange.GetOrders()Las funciones pueden ser llamadas de la siguiente manera:

  • exchange.GetOrders (en inglés) Busca todos los pedidos pendientes con el código de la transacción/contrato actual.
  • exchange.GetOrders (BTC_USDT.swap) es una aplicación de intercambio de mensajes de correo electrónico que se utiliza para enviar mensajes de correo electrónico. Encuentra todos los pedidos no completados de USDT en BTC para contratos permanentes.
  • exchange.GetOrders (en inglés) Busque todos los pedidos pendientes en el intercambio con la división de dimensiones actual (segmentada según la dimensión de la interfaz API del intercambio).

Las pruebas en el entorno del disco de simulación de futuros de OKX:

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

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

    // 写入图表
    var tbls = []
    for (var symbol of ["null", "ETH_USDT.swap", ""]) {
        var tbl = {type: "table", title: symbol, cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}

        var orders = null
        if (symbol == "null") {
            orders = exchange.GetOrders()
        } else {
            orders = exchange.GetOrders(symbol)
        }

        for (var order of orders) {
            tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        }

        tbls.push(tbl)
    }
    
    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

img

Cuando no se transmite el parámetro, por defecto se solicita el par de operaciones BTC_USDT actual, todos los contratos de permanencia de swap pendientes no completados.

img

Especifique los parámetrosETH_USDT.swapCuando el parámetro, solicita todos los contratos permanentes no completados en el par de operaciones de ETH_USDT.

img

Envío de una cadena en blanco""En el caso de USDT, los clientes pueden solicitar todos los contratos locales de USDT y todas las listas pendientes.

升级exchange.GetPosition函数

Todavía es compatible con el antiguo nombre de la función de obtención de almacenamiento, y también se ha añadido un parámetro de símbolo para especificar la variedad de información de los datos almacenados que se solicitan específicamente. Función de uso yexchange.GetPositions()En el video, la mujer dice:

升级exchange.IO函数

En cuanto aexchange.IO("api", ...)El modo de invocación de funciones, mejorado para todos los objetos de la bolsa, admite la función de dirección de petición completa de entrada directa. Por ejemplo, si quieres llamar a la interfaz OKX:

// GEThttps://www.okx.com/api/v5/cuenta/máximo ccy de retiro: BTC

Soporte para escribir direc-tamente direcciones de baseshttps://www.okx.com, no es necesario cambiar la dirección de base para llamar a la función IO.

Las pruebas en el entorno del disco de simulación de futuros de 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 Impacto de las interfaces API

影响exchange.GetOrder函数

La actualización afectó en gran medidaexchange.GetOrder(id)Parámetros de las funcionesidLos parámetros de id cambiaron de los de los pedidos de los intercambiadores originales a un formato de cadena que contiene una variedad de transacciones. Todos los pedidos envasados en la plataforma FMZ tienen este formato.

Por ejemplo:

  • El ID de la orden original de la bolsa definida en la orden de intercambio es:123456Antes de esta actualización, para llamar a la función GetOrder, la orden ID que se envió era:123456
  • Código de producto del nombre del intercambio definido en la orden del intercambio:BTC-USDT¿Qué es esto? Tenga en cuenta que aquí se habla de los códigos de variedades de transacciones nombrados por los intercambios y no de los pares de transacciones definidos por la plataforma FMZ.

En la actualidad, la mayoría de los usuarios de Twitter no tienen acceso a la red social.exchange.GetOrder(id)El formato del parámetro id que la función necesita transmitir se ajusta a:BTC-USDT,123456

Para empezar, explique por qué se diseñó de esta manera: La función CreateOrder se ha mejorado para especificar directamente la variedad de la orden (la variedad de la orden y el par de transacciones en la configuración actual, el código del contrato puede ser diferente), si el ID de la orden devuelta no contiene la información de la variedad. La ID de la orden no se puede usar porque no se sabe cuál es la variedad de la orden (el contrato) en el momento de la factura específica. La mayoría de las facturas y retiradas de los intercambios requieren especificar parámetros que describen el código de la variedad.

¿Cómo combinar este impacto: Si el pedido se realiza con la función exchange.IO que llama directamente a la interfaz de pedido de la bolsa para realizar el pedido, el valor devuelto generalmente incluye el símbolo original del intercambio (código de variedad) y el id de la orden original. Entonces, juntar los dos con coma en inglés es el Id de la orden según la definición de la plataforma FMZ. Del mismo modo, si se usa la interfaz de pedido que se envuelve en la plataforma FMZ, ya que la parte inicial del ID de la orden es el código de variedad de transacción, solo se puede eliminar el código de variedad y el punto de referencia si se necesita usar el ID original de la orden.

影响exchange.CancelOrder函数

La actualización es paraexchange.CancelOrder()El efecto de las funcionesexchange.GetOrder()La función es la misma.

影响exchange.Buy函数

La actualización es paraexchange.Buy()El efecto de las funcionesexchange.GetOrder()La función es la misma.exchange.Buy()El Id de la orden devuelta por la función es una nueva estructura, por ejemplo, el Id devuelto cuando se realiza un pedido en un mercado de futuros de OKX:LTC-USDT-SWAP,1578360858053058560

影响exchange.Sell函数

La actualización es paraexchange.Sell()El efecto de las funcionesexchange.GetOrder()La función es la misma.exchange.Sell()El Id de la orden devuelta por la función es una nueva estructura, por ejemplo, el Id devuelto cuando se realiza un pedido en un mercado de futuros de OKX:ETH-USDT-SWAP,1578360832820125696

4. Ajuste de la estructura

La estructura del ticker

Esta actualización añade un campo de símbolo a las estructuras de Ticker, que registra la información de mercado de la variedad de las estructuras de Ticker actuales. El formato del campo esexchange.GetTicker()El formato de los parámetros de símbolos de las funciones es completamente idéntico.

Estructuras de orden

Esta actualización añade un campo de símbolo al estructurador de orden, que tiene un formato similar al de la estructura de orden.exchange.GetTicker()El formato de los parámetros de símbolos de las funciones es completamente idéntico. Esta actualización también modifica el campo Id de la estructura Order para registrar la información de variedad, la información de la orden original y la referencia en el nuevo formato de orden Id.exchange.GetOrder()La descripción de la orden Id en la función, no se describe aquí.

Estructuras de posición

Esta actualización añade un campo de símbolo al estructurador de Posición, que tiene un formato similar al de la tabla.exchange.GetTicker()El formato de los parámetros de símbolos de las funciones es completamente idéntico.

5. Sistema de retroevaluación

Para satisfacer las necesidades de los usuarios, la actualización incluye la compatibilidad con el disco físico, y el sistema de retroalimentación completará la adaptación en una semana. Si el código de la política individual se ve afectado, haga los cambios de adaptación según lo indicado en este artículo.

Actualización adicional

1, Cuenta, nueva estructura de campos de equidad, UPnL

Función miembro de un objeto de un mercado de futurosGetAccountEl regresoAccountLa estructura ha sido ampliada por el campo.

  • Equidad La mayoría de las monedas de activos de garantía en la actualidad apoyan este campo, a excepción de los mercados de futuros muy particulares que no lo apoyan.

  • La UPnL La mayoría de las posiciones de todos los activos de moneda de garantía que se mantienen en la actualidad, con excepción de los intercambios de futuros muy específicos, no apoyan el sector.

2, Función SetMarginLevel para mejorar el parámetro de símbolos

La función miembro SetMarginLevel de los objetos de los mercados de futuros ha sido mejorada con el aumento del símbolo de parámetros.

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

Más.

¿Qué quieres decir?Me pregunté qué pasa con mi nuevo robot, el ID de retorno también lleva el nombre de la transacción, lo estudié durante mucho tiempo, y la información del registro de la orden de compra no se muestra ahora, también debido a la actualización de los administradores.

¿Qué es lo que está pasando?/upload/asset/2ffc0f961149326b78aed.png /upload/asset/2ffc0f961149326b78aed.png /upload/asset/2ffc0f961149326b78aed.png /upload/asset/2ffc0f961149326b78aed.png ¿Es este el problema causado por la actualización de la interfaz?

el ecnemuse 希望exchange.Buy函数能增加开止损单的功能。。

En el caso de las empresasEn la primera fila

¿Qué quieres decir?Está bien.

Los inventores cuantifican - sueños pequeñosBien, prueba aquí. Gracias por preguntar. Lo trataremos tan pronto como sea posible.

¿Qué quieres decir?Sí, extMsg1, extMsg2 no se muestra.

Los inventores cuantifican - sueños pequeñosHola, el ID de la orden es un cambio inevitable, ya que la actualización de la orden de especificar directamente la variedad, la ID de la orden debe incluir la información de la variedad, de lo contrario no se puede determinar qué variedad es la orden y no se puede llamar en el momento de la retirada (ya que la mayoría de los intercambios requieren especificar la variedad y especificar la ID cuando se retira). ¿No aparece el mensaje después de la orden que usted dice que no aparece, es decir: exchange.Buy ((price, amount, extMsg1, extMsg2) cuando se llama, extMsg1, extMsg2 no aparece en el registro?

Los inventores cuantifican - sueños pequeñosHola, puedes enviar la configuración actual de la bolsa, el par de transacciones, el código del contrato.

El inventor de la cuantificaciónEnvíe los detalles del código de prueba y la configuración al formulario y el ingeniero le responderá en el primer momento.

Los inventores cuantifican - sueños pequeñosLas diferencias en los mecanismos de intercambio son muy grandes y varían en el grado de apoyo, así que vamos a investigar si es posible.

Los inventores cuantifican - sueños pequeñosGracias por su apoyo, si tiene algún problema de uso, envíe un formulario o un comentario.