[TOC] ¿Qué quieres decir?
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.
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
}
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:symbol
、side
、price
、amount
。
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)
}
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.
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:
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) + "`")
}
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:
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) + "`")
}
Cuando se transmiteexchange.GetPositions()
El parámetro de la función esETH_USDT.swap
En 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.
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.
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ámetrossymbol
Para los objetos de la bolsaexchange
Los futuros están en diferentes formatos:
AAA_BBB
AAA 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.AAA_BBB.XXX
AAA 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
}
El diseño de datos de mercado para solicitar un grupo de variedades especificadas se vuelve más sencillo.
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"))
}
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) + "`")
}
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.
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:
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)
}
También se ha añadido la función GetOrders.symbol
Pará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:
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) + "`")
}
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.
Especifique los parámetrosETH_USDT.swap
Cuando el parámetro, solicita todos los contratos permanentes no completados en el par de operaciones de ETH_USDT.
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.
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:
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")
}
La actualización afectó en gran medidaexchange.GetOrder(id)
Parámetros de las funcionesid
Los 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:
123456
Antes de esta actualización, para llamar a la función GetOrder, la orden ID que se envió era:123456
。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.
La actualización es paraexchange.CancelOrder()
El efecto de las funcionesexchange.GetOrder()
La función es la misma.
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
。
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
。
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.
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í.
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.
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.
Función miembro de un objeto de un mercado de futurosGetAccount
El regresoAccount
La 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.
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)
}
¿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.