Estructura de los registros de las transacciones de mercado.
El registro de transacciones de mercado ID, o si la interfaz de intercambio no proporciona un ID, use una marca de tiempo para rellenarlo. Identificación la cuerda Tiempo de milisegundos. El tiempo Número Precio de la transacción. Precio Número El importe de la transacción. Importe Número En el caso de las operaciones de venta de productos, el tipo de orden debe ser el mismo que el tipo de pedido. Tipo de producto Número
La función exchange.GetTrades() devuelve una matriz de Trade o una matriz vacía.
¿Por qué no lo haces?
La estructura del ticker del mercado.
Los datos originales devueltos por la interfaz de intercambio, no hay tal atributo disponible para backtesting.
Información
objeto
ElSymbol
campo es el código de variedad de negociación definido por la plataforma FMZ.
Symbol
el valor del campo (como ejemplo) es:BTC_USDT
, que indica el par de operaciones al contado BTC_USDT.Symbol
el valor del campo (como ejemplo) esBTC_USDT.swap
, que representa el contrato perpetuo de propiedad USDT para BTC.Symbol
el valor del campo es (por ejemplo):BTC_USDT.BTC-240108-40000-C
, que representa un contrato de opción de compra de BTC en USDT con una fecha de ejercicio del 8 de enero de 2024 y un precio de ejercicio de 40.000.El símbolo la cuerda El precio más alto, o si la interfaz de intercambio no proporciona un precio más alto de 24 horas, use el precio de venta para llenar. En alto. Número El precio más bajo, o si la interfaz de intercambio no proporciona un precio más bajo de 24 horas, utilice el precio de compra para rellenar. Bajo Número El momento actual vende un precio. Vender Número El momento actual tiene un precio. Comprar Número El último precio de la transacción. El último Número Precio de apertura del período, si la interfaz de intercambio no proporciona un precio de apertura del período de rotación de 24 horas, se utiliza el precio actual para rellenar. Abierto. Número Si la interfaz de intercambio no proporciona dichos datos, se llenará con los datos disponibles en la interfaz de intercambio, por ejemplo, el monto de la transacción puede estar en cotización. El volumen Número El sello de tiempo de milisegundos. El tiempo Número Posiciones, la mayoría de las interfaces de intercambio no proporcionan estos datos y el valor es 0 cuando estos datos no son compatibles. Interés abierto Número
La función exchange.GetTicker() devuelve una estructura de Ticker.
En el caso de los contratos de opción, elexchange.GetTicker()
En este momento, cuando la capa inferior del FMZ detecta que el mercado de contratos de opciones es de baja liquidez, a menudo no hay órdenes pendientes para la primera compra o primera venta.Ticker
campo de estructuraBuy
o bienSell
es 0, se activará un mensaje de error.
¿Qué es lo que quieres decir con esto?
La estructura de K-Line Bar, la estructura OHLC estándar, se utiliza para dibujar K-lines e indicadores para cálculo y análisis.
Marca de tiempo a nivel de milisegundos, para una estructura de registro cuyo valor de atributo Time es la marca de tiempo de inicio del período de esta barra de línea K. El tiempo Número Precio de apertura. Abierto. Número El precio más alto. En alto. Número El precio más bajo. Bajo Número Precio de cierre. Cierre. Número Valor de posición, la mayoría de las interfaces de intercambio no proporcionan estos datos, el valor es 0 cuando estos datos no son compatibles. Interés abierto Número Si la interfaz de intercambio no proporciona dichos datos, se completará con los datos existentes de la interfaz de intercambio, por ejemplo, el importe de la transacción en cotización. El volumen Número
La función exchange.GetRecords() devuelve una matriz de registros o una matriz vacía. Cada estructura de registro representa una barra de línea K, es decir, una barra de línea K.
¿Por qué no lo haces?
La estructura de la orden.
Los datos originales de la respuesta de la interfaz de intercambio, no hay tal atributo disponible para backtesting.
Información
objeto
ElSymbol
el campo es el código del producto de negociación definido por la plataforma FMZ y su formato es coherente con el código del producto de negociación definido por la plataforma FMZ.Symbol
el campo de la estructura {@struct/Ticker Ticker}.
Symbol
el valor del campo es (por ejemplo):BTC_USDT
, que indica el par de operaciones al contado BTC_USDT.Symbol
el valor del campo es (por ejemplo):BTC_USDT.swap
, que representa el contrato perpetuo estándar USDT de BTC.El símbolo
la cuerda
Order Id, este atributo consiste en el código de producto de intercambio y el ID de pedido original de intercambio, separados por comas en inglés.Id
formato del par de negociación al contadoETH_USDT
el orden del intercambio de OKX es:ETH-USDT,1547130415509278720
¿ Qué pasa?
Identificación
la cuerda
El precio de la orden, tenga en cuenta que este atributo puede ser 0 o -1 para las órdenes de mercado.
Precio
Número
El número de órdenes realizadas, tenga en cuenta que este atributo de una orden de mercado puede ser un importe y no una moneda.
Importe
Número
El número de transacciones, posiblemente acolchado con 0 si la interfaz de intercambio no proporciona estos datos.
Cuota de acuerdo
Número
Precio promedio de la transacción, tenga en cuenta que algunos intercambios no proporcionan estos datos.
Precio promedio
Número
El estado de la orden se puede consultar en {@var/ORDER_STATE/ORDER_STATE_PENDING ORDER_STATE_PENDING}, {@var/ORDER_STATE/ORDER_STATE_CLOSED ORDER_STATE_CLOSED}, {@var/ORDER_STATE/ORDER_STATE_CANCELED ORDER_STATE_CANCELED}, {@var/ORDER_STATE/ORDER_STATE_UNKNOWN OR_ORDER_STATE_UNKNOWN}.
Estatus
Número
En el caso de las operaciones de venta de productos, el tipo de orden debe ser el mismo que el tipo de orden.
Tipo de producto
Número
Para la dirección de apertura y cierre de las órdenes de contratación, consulte {@var/ORDER_OFFSET/ORDER_OFFSET_OPEN ORDER_OFFSET_OPEN}, {@var/ORDER_OFFSET/ORDER_OFFSET_CLOSE ORDER_OFFSET_CLOSE}.
Compensación
Número
Este atributo en órdenes al contado es""
En una orden de contrato, este atributo es el código específico del contrato.
Tipo de contrato
la cuerda
ElOrder
La estructura de orden puede ser devuelta por elexchange.GetOrder()
yexchange.GetOrders()
Las funcionesexchange.GetOrders()
función devuelve una matriz de laOrder
Si no hay orden incompleta, devuelve[]
, que es una matriz vacía.Status
propiedad de laOrder
La estructura de orden se puede comparar directamente con constantes tales comoORDER_STATE_PENDING
para determinar si son iguales y así determinar el estado del pedido.
Para el modo de posición unidireccional, cuando no sea posible determinar si la orden es una orden de cierre (reducción), elOffset
campo está configurado en la dirección de apertura por defecto, es decir,ORDER_OFFSET_OPEN
.
Los datos de las transacciones se pueden obtener en el siguiente modo:
Estructura de los pedidos en profundidad de mercado.
El precio. Precio Número Cuantidad. Importe Número
La función GetDepth() devuelve una estructura de datos en la que los valores de atributos de ofertas, solicitudes son matrices de OrderBook.
¿Qué es lo que está pasando?
Estructura de la profundidad del mercado.
La matriz de órdenes de venta, es decir, la matriz de OrderBook, se ordena por precio de más bajo a más alto, y la primera estructura de OrderBook en la matriz tiene el precio más bajo. Me lo pregunta el conjunto La matriz de pedidos de compra, es decir, la matriz de OrderBook, se ordena por precio de más alto a más bajo, y la primera estructura de OrderBook en la matriz tiene el precio más alto. Las ofertas el conjunto Tiempo de milisegundos. El tiempo Número
La función exchange.GetDepth() devuelve una estructura de profundidad.
¿Qué es lo que quieres decir con esto?
La estructura de la información de la cuenta.
Los datos originales devueltos por la interfaz de intercambio, no hay tal atributo disponible para backtesting.
Información
objeto
El número de monedas denominadas disponibles, al contado, si el par de operaciones es BTC_USDT, el saldo se refiere al número de USDT actualmente disponibles. En el contrato estándar U, el saldo se refiere a la cantidad de margen disponible (USDT, quoteCurrency).
Saldo de las cuentas
Número
Valor de los activos congelados cuando la orden no se ejecuta.
El saldo de las acciones
Número
El número de monedas disponibles para el comercio, al contado, si el par de operaciones es BTC_USDT, Stocks se refiere al número de BTC actualmente disponibles. Stocks se refiere al número de margen disponible (moneda, moneda base) en un contrato basado en moneda.
Las existencias
Número
Valor de los activos congelados cuando la orden no se ejecuta.
Las poblaciones congeladas
Número
Sólo los objetos de intercambio de futuros soportan este campo.Equity
el campo es el total de los fondos propios del margen de la cuenta de futuros bajo la configuración del contrato actual.
Capital propio
Número
Este campo sólo es compatible con los objetos de intercambio de futuros.UPnL
campo es la suma de laganancias y pérdidas no realizadasde todas las posiciones abiertas por el margen de la cuenta de futuros bajo la configuración del contrato actual.
La UPnL Número
La función exchange.GetAccount (()) devuelve una estructura de cuenta. Los datos en la estructura devuelta dependen del par de operaciones actualmente establecido, código de contrato.
¿Por qué no lo haces?
La estructura de la información sobre activos en moneda específica.
Nombres definidos por el intercambio para activos de criptomonedas, que pueden variar de intercambio a intercambio por la misma criptomoneda, por ejemplo:BTC
puede llamarseXBT
en algunos intercambios.
Cuota de mercado
la cuerda
Saldo disponible de activos en divisas.
Importe
Número
Número de activos congelados en la moneda.
Conjugado
Número
ElFrozenAmount
La parte de los activos de divisas puede incluir los activos bloqueados para órdenes no cumplidas y la parte de margen bloqueada para posiciones de futuros.
¿Por qué no lo haces?
Estructura de la información sobre la posición del contrato.
Los datos originales devueltos por la interfaz de intercambio, no hay tal atributo disponible para backtesting.
Información
objeto
ElSymbol
el campo es el código del producto de negociación definido por la plataforma FMZ y su formato es coherente con el código del producto de negociación definido por la plataforma FMZ.Symbol
el campo de la estructura {@struct/Ticker Ticker}.
Symbol
el valor del campo es (por ejemplo):BTC_USDT
, que indica el par de operaciones al contado BTC_USDT.Symbol
el valor del campo es (por ejemplo):BTC_USDT.swap
, que representa el contrato perpetuo estándar USDT de BTC.El símbolo la cuerda Si la interfaz de intercambio no proporciona estos datos, puede ser inexacta. El nivel de margen Número El tamaño de la posición, que suele ser un número entero positivo (número de números de contrato). Tenga en cuenta que las especificaciones del contrato, como los multiplicadores de contrato, los valores, etc., pueden diferir de una bolsa a otra. Importe Número Se trata del importe de las posiciones congeladas cuando la orden cerrada no se haya cumplido. Confrío Número Precio medio de la posición, que en principio es el precio medio de la posición en su conjunto (no participa en la liquidación). Precio Número La ganancia/pérdida variable de la posición es, en principio, la ganancia/pérdida no realizada de la posición, si los datos no son proporcionados por la interfaz de intercambio, se llenarán con otros datos de ganancia/pérdida de la interfaz de intercambio. Profitos Número El tipo de posición se refiere a {@var/POSITION_DIRECTION/PD_LONG PD_LONG}, {@var/POSITION_DIRECTION/PD_SHORT PD_SHORT}. Tipo de producto Número Código del contrato, véase la descripción de la función {@fun/Futures/exchange.SetContractType exchange.SetContractType} para obtener más detalles. Tipo de contrato la cuerda El margen ocupado por la posición, rellenado con 0 si la interfaz de intercambio no proporciona estos datos. Margen de interés Número
La función exchange.GetPositions() devuelve una matriz de posiciones o una matriz vacía. Para los futuros de criptomonedas, es importante tener en cuenta que la matriz de estructura de posición devuelta por la función exchange.GetPositions(). Para los atributos FrozenAmount, Profit y Margin en la estructura de datos de posición, ya que los datos proporcionados por el intercambio no son uniformes, la interfaz GetPositions(), la definición de los datos devueltos por el objeto de intercambio puede ser diferente. Por ejemplo, algunos intercambios no tienen datos de congelación de posición en los datos de posición, por lo que el FrozenAmount es 0.
¿Por qué no lo haces?
Estructura de la información de mercado sobre las variedades comercializadas.
Tomando valores tales como"btcusdt"
, elSymbol
En este campo se registra el nombre original de la variedad comercializada en la bolsa.Symbol
el campo de la estructura {@struct/Ticker Ticker}.
El símbolo
la cuerda
Tomando valores tales como"BTC"
, elBaseAsset
El campo registra el nombre de la moneda negociada (es decir: baseCurrency), que está en mayúsculas de forma uniforme.
Activos básicos
la cuerda
Tomando valores tales como"USDT"
, elQuoteAsset
El campo registra el nombre de la moneda denominada (es decir: quoteCurrency), que es uniformemente mayúscula.
Activos de cotización
la cuerda
Tomando valores tales como0.01
, elTickSize
el campo registra el valor del cambio más pequeño en el precio del artículo negociado en la bolsa.
TickSize (Tamaño de la tiqueta)
Número
Tomando valores tales como0.01
, elAmountSize
el campo registra el valor del cambio mínimo en el volumen de órdenes realizadas en la bolsa para dicha operación.
Cantidad
Número
Tomando valores tales como2
, elPricePrecision
el campo registra la precisión del precio del artículo negociado en la bolsa, indicando que el precio es preciso a 2 decimales.
Precisión del precio
Número
Tomando valores tales como3
, elAmountPrecision
el campo registra la precisión de las órdenes realizadas en la bolsa para la variedad objeto de negociación, indicando que las órdenes son exactas a 3 decimales.
CantidadPrecisión
Número
Tomando valores tales como0.001
, elMinQty
el campo registra el tamaño mínimo de la orden en el intercambio para esa operación.
MinQty
Número
Tomando valores tales como1000
, elMaxQty
el campo registra el número máximo de pedidos que pueden colocarse en la bolsa para esa variedad de operaciones.
Cuota máxima
Número
Tomando valores tales como5
, elMinNotional
el campo registra el importe mínimo de la orden puesta en la bolsa para esa variedad de operaciones.
Min Nocional
Número
Tomando valores tales como9999999
, elMaxNotional
el campo registra el importe máximo de las órdenes realizadas en la bolsa para esa variedad de operaciones.
Max Nocional
Número
El campoCtVal
registran el valor de un contrato del producto de negociación en la bolsa, en la moneda registrada en elCtValCcy
el campo, por ejemplo:CtVal
es 0,01CtValCcy
es"BTC"
, lo que significa que un contrato vale 0.01 BTC.
CtVal
Número
El campoCtValCcy
Registra la unidad de valor de un contrato.BTC
, USD
, ETH
, etc.
El valor de la
Número
El campoInfo
registra los datos en bruto de las especies devueltas por la interfaz de información de mercado del exchange.
Información
objeto
La función exchange.GetMarkets() devuelve un diccionario que contiene esteMarket
la estructura.
Debido a los diferentes niveles de soporte para los datos de información de mercado por cada intercambio, los campos que no son compatibles con el intercambio serán ignorados.Info
field.
¿Por qué no lo haces?
La estructura de la información de la tasa de financiación del producto comercial. Solo los contratos perpetuos de criptomonedas admiten tasas de financiación.
Los datos en bruto se devuelven cuando se llama la interfaz de tasa de financiación de futuros de intercambio de criptomonedas.
Información
objeto
ElSymbol
campo es el código del producto de negociación definido por la plataforma FMZ.
El símbolo
la cuerda
Intervalo de la tasa de financiación, en milisegundos.28800000
significa un intervalo de 8 horas.
Intervalo de tiempo
Número
La fecha y hora de inicio del período de tasa de financiación siguiente (tiempo de liquidación de este período), en milisegundos.
El tiempo
Número
El tipo de financiación que se utilizará para la liquidación de este período.
Tasa de cambio
Número
Las tasas de financiación de contratos perpetuos de diferentes bolsas de futuros tienen diferentes métodos y mecanismos de cálculo, y los ciclos de liquidación son de 1 hora, 4 horas, 8 horas y un día.
La tasa de financiación actual de los contratos perpetuos en los mercados de futuros tiene un valor fijo y un valor variable calculado en tiempo real.
ElRate
campo es el valor de la tasa de financiación sin%
. Si desea convertirlo a un valor con%
, se puede multiplicar por 100 y sumar el%
al final.
¿Por qué no lo haces?
Esta estructura JSON se utiliza para configurar los parámetros de la función HttpQuery y la función HttpQuery_Go para enviar la solicitud Http.
Método de solicitud, por ejemplo:GET
, POST
, etc.
Método
la cuerda
Por ejemplo, en una solicitud POST, el cuerpo puede contener datos de formulario, JSON, texto, etc.
cuerpo
la cuerda
Por ejemplo, especifique la codificación de los datos de texto en el cuerpo como:"UTF-8"
¿ Qué pasa?
el juego de caracteres
la cuerda
Una cookie es una pequeña pieza de datos utilizada para almacenar e intercambiar información de estado entre un cliente (generalmente un navegador) y un servidor.
galletas
la cuerda
Se usa para simular las huellas digitales del navegador.
el perfil
la cuerda
Cuando se establece en verdad, la llamada de la función HttpQuery devuelve el mensaje de respuesta completo.
Descomposición
Boole
La información del encabezado de la solicitud existe en forma de pares clave-valor (estructura JSON) y se utiliza para transmitir información diversa, como tipo de contenido, información de autenticación, control de caché, etc.
las cabeceras
JSON
Configuración de tiempo de espera. Configuración 1000 significa un tiempo de espera de 1 segundo.
tiempo de espera
Número
Ejemplo de uso:
function main() {
var options = {
method: "POST",
body: "a=10&b=20&c=30",
charset: "UTF-8",
cookie: "session_id=12345; lang=en",
profile: "chrome_103",
debug: false,
headers: {"TEST-HTTP-QUERY": "123"},
timeout: 1000
}
var ret = HttpQuery("http://127.0.0.1:8080", options)
Log(ret)
}
El mensaje http enviado cuando se ejecuta el código anterior:
POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Cookie: session_id=12345; lang=en
Host: 127.0.0.1:8080
Test-Http-Query: 123
Transfer-Encoding: chunked
User-Agent: Mozilla/5.0 (Macintosh; ...
Accept-Encoding: gzip, deflate, br
e
a=10&b=20&c=30
0
En el caso de las aplicaciones que se utilicen para la búsqueda de datos, el número de páginas que se utilicen para la búsqueda de datos es el número de páginas que se utilicen para la búsqueda de datos.
Esta estructura JSON es la estructura de datos devuelta por la función HttpQuery en el modo de depuración cuando el campo de depuración en eloptions
El parámetro de estructura es verdadero.
Código de estado http El código de estado Número Solicitar información de la cabecera. Encabezado JSON (en inglés) Información sobre las cookies. Las galletas el conjunto La información completa de la ruta de la solicitud. El rastro JSON (en inglés) Duración del mensaje Duración Número Contenido del mensaje. Cuerpo la cuerda
Un ejemplo de la estructura de datos JSON devuelta es:
{
"StatusCode": 302,
"Header": {
"Content-Type": ["text/html"],
// ...
},
"Cookies": [{
// ...
}],
"Trace": {},
"Length": 154,
"Body": "..."
}
En el caso de las aplicaciones que se utilicen para la búsqueda de datos, el número de páginas que se utilicen para la búsqueda de datos es el número de páginas que se utilicen para la búsqueda de datos.
Esta estructura JSON se utiliza para configurar el contenido de la tabla que se muestra en la barra de estado de la estrategia.
Se utiliza para establecer el tipo de interfaz de usuario y los controles que se analizarán y mostrarán.table
¿ Qué pasa?
tipo
la cuerda
Se utiliza para establecer el título de la tabla de la barra de estado.
Título
la cuerda
Se utiliza para establecer los títulos de las columnas de la tabla de la barra de estado.
las colinas
el conjunto
Se utiliza para establecer los datos de fila de la tabla de la barra de estado. El primer elemento de la matriz de filas (matriz bidimensional) también es una estructura de matriz. La longitud de esta estructura de matriz debe ser consistente con el número de columnas de la tabla (los elementos de la estructura de matriz corresponden a los nombres de columnas de la tabla uno por uno), es decir, la primera fila de datos de la tabla.
las filas
el conjunto
function main() {
var tbl = {
type: "table",
title: "title",
cols: ["Column 1", "Column 2", "Column 3"],
rows: [
["Row 1 Column 1", "Row 1 Column 2", "Row 1 Column 3"],
["Row 2 Column 1", "Row 2 Column 2", "Row 2 Column 3"],
["Row 3 Column 1", "Row 3 Column 2", "Row 3 Column 3"],
]
}
LogStatus("`" + JSON.stringify(tbl) + "`")
}
¿Por qué no lo haces?
Esta estructura JSON se utiliza para configurar el control de botón en la barra de estado. La estructura JSON de control de botón se puede incrustar en la estructura JSON de la tabla de barra de estado. Esta estructura es una estructura de versión antigua, y la plataforma sigue siendo compatible. Se recomienda usar la última versión de la estructura JSON del botón. Ejemplo de construcción de un control del botón de la barra de estado (después de que el botón se activa y se hace clic, el cuadro emergente contiene un solo control de entrada, que se construye a través del campo de entrada):
{
"type": "button",
"cmd": "open",
"name": "opening a position",
"input": {
"name": "number of opening positions",
"type": "number",
"defValue": 1
}
}
Los controles en el cuadro emergente activados al hacer clic en el botón de la barra de estado se establecen a través deinput
o biengroup
.
Para los controles de botón, la configuración fija es:button
¿ Qué pasa?
tipo
la cuerda
Configuración del tipo de botón
clase
la cuerda
El texto en el control del botón, es decir, el nombre del botón.
nombre
la cuerda
El contenido interactivo del comando enviado a la estrategia cuando el control del botón activa una operación de clic.
el cmd
la cuerda
La descripción del botón de control. La descripción se muestra cuando el ratón se coloca sobre el botón en la barra de estado.
Descripción
la cuerda
Establece el botón en deshabilitado (verdadero) / habilitado (falso).
con discapacidad
Boole
Cuando se construye un botón de la barra de estado para la interacción, también se admite la entrada de datos.GetCommand()
la función.input
elemento a la estructura de datos JSON del control del botón en la barra de estado para configurar el control de entrada en el cuadro emergente que se muestra cuando se activa el botón.
Por ejemplo, para establecer el valor de lainput
el campo:
{
"name": "Number of opening positions",
"type": "number",
"defValue": 1,
"description": "test",
}
Descripción de cada campo en la estructura JSON anterior:
"number"
Control de entrada numérico."string"
El control de entrada de la cadena."selected"
El control de la caja desplegable."boolean"
El control del interruptor."input": {"name": "Opening quantity", "type": "selected", "defValue": "A|B|C"}
, la descripción de texto de las opciones del cuadro desplegable se establece en A, B, C.Para los campos ampliados por el control de tipo de la casilla desplegable:
{text: "description", value: "value"}
Utilice el campo defValue para establecer la opción predeterminada, que puede ser de múltiples selecciones.entrada
JSON (en inglés)
Elinput
campo configura un control en el cuadro emergente que aparece después de que el botón de la barra de estado se activa haciendo clic.group
yinput
La función principal de este sistema es la configuración de un grupo de controles.group
tener la misma estructura de datos que elinput
valor del campo.input
field.
grupo el conjunto
Un ejemplo declass
valor de la estructura JSON de un botón en la barra de estado:
function main() {
var table = {
type: "table",
title: "Status bar button style",
cols: ["Default", "Original", "Success", "Information", "Warning", "Danger"],
rows: [
[
{"type":"button", "class": "btn btn-xs btn-default", "name": "Default"},
{"type":"button", "class": "btn btn-xs btn-primary", "name": "Original"},
{"type":"button", "class": "btn btn-xs btn-success", "name": "Success"},
{"type":"button", "class": "btn btn-xs btn-info", "name": "Information"},
{"type":"button", "class": "btn btn-xs btn-warning", "name": "Warning"},
{"type":"button", "class": "btn btn-xs btn-danger", "name": "Danger"}
]
]
}
LogStatus("`" + JSON.stringify(table) + "`")
}
Ejemplo de uso de lagroup
campo con elinput
el campo:
function main() {
// The drop-down box control in the page triggered by the testBtn1 button uses the options field to set options and the defValue field to set the default options. This is different from other examples in this chapter that directly use defValue to set options.
var testBtn1 = {
type: "button",
name: "testBtn1",
cmd: "cmdTestBtn1",
input: {name: "testBtn1ComboBox", type: "selected", options: ["A", "B"], defValue: 1}
}
/*
Status bar button control (set input field implementation) testBtn2 button triggered by the page in the drop-down box control using the options field to set the options, options field in the options field not only supports the string,
it also supports the use of ```{text: "description", value: "value"}``` structure. Use the defValue field to set the default option. The default option can be multiple selection (multiple selection is achieved through an array structure). Multiple selection requires setting the additional field multiple to true.
*/
var testBtn2 = {
type: "button",
name: "testBtn2",
cmd: "cmdTestBtn2",
input: {
name: "testBtn2MultiComboBox",
type: "selected",
description: "Implementing multiple selection in drop-down box",
options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}],
defValue: ["A", "C"],
multiple: true
}
}
// Status bar grouping button control (set group field implementation) testBtn3 button triggered by the page in the drop-down box control using the options field to set options, also supports the direct use of defValue set options.
var testBtn3 = {
type: "button",
name: "testBtn3",
cmd: "cmdTestBtn3",
group: [
{name: "comboBox1", label: "labelComboBox1", description: "Drop-down box 1", type: "selected", defValue: 1, options: ["A", "B"]},
{name: "comboBox2", label: "labelComboBox2", description: "Drop-down box 2", type: "selected", defValue: "A|B"},
{name: "comboBox3", label: "labelComboBox3", description: "Drop-down box 3", type: "selected", defValue: [0, 2], multiple: true, options: ["A", "B", "C"]},
{
name: "comboBox4",
label: "labelComboBox4",
description: "Drop-down box 4",
type: "selected",
defValue: ["A", "C"],
multiple: true,
options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}, {text: "Option D", value: "D"}]
}
]
}
while (true) {
LogStatus("`" + JSON.stringify(testBtn1) + "`\n", "`" + JSON.stringify(testBtn2) + "`\n", "`" + JSON.stringify(testBtn3) + "`\n")
var cmd = GetCommand()
if (cmd) {
Log(cmd)
}
Sleep(5000)
}
}
¿Por qué no lo haces?
Esta estructura JSON se utiliza para configurar el control de botón en la barra de estado. La estructura JSON de control de botón se puede incrustar en la estructura JSON de la tabla de barra de estado. Ejemplo de construcción de un control del botón de la barra de estado (después de que el botón se activa y se hace clic, el cuadro emergente contiene múltiples controles de entrada, que se construyen a través del campo de grupo):
{
"type": "button",
"cmd": "open",
"name": "Open a position and place an order",
"group": [{
"type": "selected",
"name": "tradeType",
"label": "order type",
"description": "market order, limit order",
"default": 0,
"group": "trading setup",
"settings": {
"options": ["market order", "limit order"],
"required": true,
}
}, {
"type": "selected",
"name": "direction",
"label": "trading direction",
"description": "buy, sell",
"default": "buy",
"group": "trading setup",
"settings": {
"render": "segment",
"required": true,
"options": [{"name": "buy", "value": "buy"}, {"name": "sell", "value": "sell"}],
}
}, {
"type": "number",
"name": "price",
"label": "price",
"description": "order price",
"group": "trading setup",
"filter": "tradeType==1",
"settings": {
"required": true,
}
}, {
"type": "number",
"name": "amount",
"label": "order quantity",
"description": "order quantity",
"group": "trading setup",
"settings": {
"required": true,
}
}],
}
Los controles en el cuadro emergente activados al hacer clic en el botón de la barra de estado se establecen a través deinput
o biengroup
.
Para los controles de botón, la configuración fija es:button
¿ Qué pasa?
tipo
la cuerda
El texto en el control del botón, es decir, el nombre del botón.
nombre
la cuerda
El contenido interactivo del comando enviado a la estrategia cuando el control del botón activa una operación de clic.
el cmd
la cuerda
Cuando se construye un botón de la barra de estado para la interacción, también se admite la entrada de datos.GetCommand()
la función.input
elemento a la estructura de datos JSON del control del botón en la barra de estado para configurar el control de entrada en el cuadro emergente que se muestra cuando se activa el botón.
En comparación con la versión anterior de la estructura de entrada, la nueva versión tiene algunos campos y cambios nuevos:
{
"type": "selected",
"name": "test",
"label": "topic",
"description": "desc",
"default": 1,
"filter": "a>1",
"group": "group1",
"settings": { ... }, // Component configuration
}
Descripción y explicación de cada campo en la estructura JSON anterior:
tipo
Tipo de mando (campo obligatorio), admite los siguientes ajustes:"number"
caja de entrada numérica,"string"
caja de entrada de cadenas,"selected"
caja desplegable,"boolean"
Cambiar el control.
nombre Si la estructura JSON actual es el valor del campo del campo de entrada, cuando el campo de etiqueta no está establecido, el nombre es el título del control en el cuadro emergente que aparece después de hacer clic en el botón de la barra de estado. Si la estructura JSON actual es un elemento en el valor de campo (estructura de matriz) del campo de grupo, el nombre no se usa como el título del control. El campo de nombre se utiliza para indicar el nombre del campo del contenido de entrada del control. Por ejemplo, se utiliza un extracto del campo de grupo como ilustración:
var testBtn3 = {
type: "button",
name: "testBtn3",
cmd: "cmdTestBtn3",
group: [
{name: "comboBox1", label: "labelComboBox1", description: "Drop-down box 1", type: "selected", defValue: 1, options: ["A", "B"]},
{name: "comboBox2", label: "labelComboBox2", description: "Drop-down box 2", type: "selected", defValue: "A|B"},
{name: "comboBox3", label: "labelComboBox3", description: "Drop-down box 3", type: "selected", defValue: [0, 2], multiple: true, options: ["A", "B", "C"]},
{
name: "comboBox4",
label: "labelComboBox4",
description: "Drop-down box 4",
type: "selected",
defValue: ["A", "C"],
multiple: true,
options: [{text: "Option A", value: "A"}, {text: "Option B", value: "B"}, {text: "Option C", value: "C"}, {text: "Option D", value: "D"}]
}
]
}
Según este fragmento, si el botón de la barra de estado activa una interacción, aparecerá un cuadro emergente con 4 controles, todos ellos controles de caja desplegable.cmdTestBtn3:{"comboBox1":1,"comboBox2":0,"comboBox3":[0,2],"comboBox4":["A","C"]}
¿ Qué pasa?
El valor de nombre en la estructura JSON se utiliza como el nombre del campo de la información interactiva devuelta, por ejemplo: comboBox1, comboBox2, etc.
etiqueta Se utiliza para establecer el título del control.
Descripción Descripción del control. Si la estructura JSON actual es un elemento en el valor de campo (estructura de matriz) del campo de grupo, y el campo de etiqueta no está establecido, la descripción es el título del control en el cuadro emergente que aparece después de hacer clic en el botón de la barra de estado.
por defecto El valor predeterminado del control.
filtro Selector, utilizado para ocultar controles. No establecer este campo significa que no se filtrará (se mostrarán los controles); cuando este campo está establecido, no se filtrará (se mostrarán los controles) cuando la expresión sea verdadera. Cuando la expresión sea falsa, se filtrará (no se mostrarán los controles)
grupo Se utiliza para controlar la agrupación de controles, que pueden doblarse.
ajustes Configuración de componentes, el control tiene una variedad de opciones de interfaz de usuario, utilice esta opción para hacer ajustes específicos.
settings:{
multiple:true,
customizable:true,
options:[{name:'xxx|yyy',value:0}]
}
Configuración:
Configuración.requerido: Si es necesario.
configuración.disabled: Si deshabilitar.
settings.min: válido cuando tipo=número, indicando el valor mínimo o la longitud mínima de una cadena.
settings.max: válido cuando tipo=número, indicando el valor máximo o la longitud máxima de una cadena.
configuración.paso: válido cuando tipo=número y renderización=deslizador, indicando la longitud del paso.
settings.multiple: válido cuando se selecciona type=, lo que indica que se admite la selección múltiple.
settings.customizable: es válido cuando se selecciona type=, lo que indica que se admite la personalización; los usuarios pueden editar y agregar nuevas opciones directamente en el control del cuadro desplegable. Si se selecciona la opción recién editada, se usa el nombre de la opción en lugar del valor representado por la opción cuando se activa la interacción.
configuración.opciones: válido cuando se selecciona tipo=, indicando el formato de datos de la opción del selector: [
entrada
JSON (en inglés)
Elinput
campo configura un control en el cuadro emergente que aparece después de que el botón de la barra de estado se activa haciendo clic.group
yinput
La función principal de este sistema es la configuración de un grupo de controles.group
tener la misma estructura de datos que elinput
valor del campo.input
field.
grupo el conjunto
Soporte de configuración bilingüe:
{
type:'selected',
name:'test',
label:'选项|options',
description:'描述|description',
default:0, // Here, the default value is set to 0, which means the value in the option {name:'xxx|yyy',value:0}
filter:'a>1&&a<10',
group:'分组|group',
settings:{
multiple:true,
customizable:true,
options:[{name:'xxx|yyy',value:0}]
}
}
¿Por qué no lo haces?
Este JSON se utiliza para configurar la información de configuración del gráfico de la función de dibujo personalizadoChart()
. La biblioteca de gráficos utilizada es Highcharts. Sólo unos pocos campos de configuración básica se enumeran aquí.
Campo de extensión de la plataforma. Configurar como verdadero para usar gráficos de Highstocks; configurar como falso para usar gráficos de Highcharts.
__isEl stock la cuerda
{
layout: 'single', // Not participating in grouping, displayed separately, default is group 'group'
height: 300, // Specify height
}
extensión JSON (en inglés) Título del gráfico Título la cuerda Configuración del eje X. xEje JSON (en inglés) Configuración del eje Y. eje y JSON (en inglés) Serie de datos del gráfico. serie JSON (en inglés)
Un ejemplo de dibujo simple:
// This chart is an object in JavaScript language. Before using the Chart function, we need to declare an object variable chart to configure the chart.
var chart = {
// This field marks whether the chart is a general chart. If you are interested, you can change it to false and run it.
__isStock: true,
// Zoom tool
tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A'},
// title
title : { text : 'Price difference analysis chart'},
// Select range
rangeSelector: {
buttons: [{type: 'hour',count: 1, text: '1h'}, {type: 'hour',count: 3, text: '3h'}, {type: 'hour', count: 8, text: '8h'}, {type: 'all',text: 'All'}],
selected: 0,
inputEnabled: false
},
// The horizontal axis of the coordinate axis is: x-axis, and the current setting type is: time
xAxis: { type: 'datetime'},
// The vertical axis of the coordinate axis is: the y-axis, the default value is adjusted according to the data size
yAxis : {
// title
title: {text: 'Price difference'},
// Whether to enable the right vertical axis
opposite: false
},
// Data series, this property saves each data series (line, K-line chart, label, etc.)
series : [
// The index is 0, and the data array stores the data of the index series.
{name : "line1", id : "line 1,buy1Price", data : []},
// The index is 1, dashStyle:'shortdash' is set, that is, a dashed line is set
{name : "line2", id : "line 2,lastPrice", dashStyle : 'shortdash', data : []}
]
}
function main(){
// Call the Chart function to initialize the chart
var ObjChart = Chart(chart)
// Clear
ObjChart.reset()
while(true){
// Get the timestamp of this poll, which is a millisecond timestamp. Used to determine the position of the X-axis written to the chart
var nowTime = new Date().getTime()
// Get market data
var ticker = _C(exchange.GetTicker)
// Get the buy price from the return value of the market data
var buy1Price = ticker.Buy
// Get the last transaction price. In order to prevent the two lines from overlapping, we add 1.
var lastPrice = ticker.Last + 1
// Use the timestamp as the X value and the buy price as the Y value to pass into the data sequence of index 0
ObjChart.add(0, [nowTime, buy1Price])
// Same as above
ObjChart.add(1, [nowTime, lastPrice])
Sleep(2000)
}
}
¿Por qué no lo haces?
Este JSON se utiliza para configurar la información de configuración del gráfico de la función de dibujo personalizadoKLineChart
Sólo unos pocos campos de configuración básicos se enumeran aquí.
Si dibujar en el gráfico principal. superposición - ¿ Qué? Configuración del eje X. xEje JSON (en inglés) Configuración del eje Y. eje y JSON (en inglés) Configuración del gráfico de velas. la vela JSON (en inglés)
Por favor, haga referencia aArtículo especial sobre el dibujo de gráficos utilizando la función KLineChart.
¿Por qué no lo haces?
El JSON se utiliza para establecer los datos que se cargarán por elexchange.SetData()
Los datos JSON son una estructura de matriz, en la que cada elemento es también una matriz, es decir,[time, data]
.
El sello de tiempo de los datos, que marca el tiempo de estos datos.
tiempo
Número
datos es una pieza de datos que corresponde a un cierto tiempo en los datos cargados por elexchange.SetData()
Cuando la estrategia se ejecuta, elexchange.GetData()
La función obtiene los datos con la marca de tiempo correspondiente de acuerdo con la hora actual.
datos cadena, número, bool, objeto, matriz, etc.
Ejemplo de carga de datos en el sistema de backtesting y recuperación de datos cuando se ejecuta la estrategia backtest:
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
exchange.SetData("test", [[1579536000000, _D(1579536000000)], [1579622400000, _D(1579622400000)], [1579708800000, _D(1579708800000)]])
while(true) {
Log(exchange.GetData("test"))
Sleep(1000 * 60 * 60 * 24)
}
}
¿Por qué no lo haces?
Este JSON es la estructura de datos devuelta por elEventLoop()
La funciónEventLoop()
Monitores de funciones: 1. Cualquier evento de datos legibles por WebSocket; 2. Eventos de finalización de tareas concurrentes con las funciones exchange.Go() y HttpQuery_Go(); 3. Eventos de mensaje enviados en hilos creados por elthreading.Thread()
función en la estrategia del lenguaje JavaScript.
Número de secuencia del evento. Seq. Número Nombre del evento. Evento la cuerda Identificador del hilo del evento. El hilo Número Índice de eventos. Indicador Número El sello de tiempo nano. Nano Número
Utilice elexchange.Go()
Función para hacer solicitudes simultáneas y la estructura de datos de eventos devueltos por elEventLoop()
function.
{
"Seq":1,
"Event":"Exchange_GetTrades",
"ThreadId":0,
"Index":3,
"Nano":1682068771309583400
}
En el hilo ejecutado simultáneamente de la estrategia del lenguaje JavaScript (creado por elthreading.Thread()
En la actualidad, lapostMessage()
función del objeto de hilo se utiliza para enviar un mensaje, elEventLoop()
La función en el hilo que recibe el mensaje supervisará la siguiente estructura de datos de eventos:
{
"Seq":4,
"Event":"thread",
"ThreadId":1,
"Index":0,
"Nano":1727592066508674000
}
¿Por qué no lo haces?
Este JSON es la estructura de datos devuelta por elDBExec()
función; también se devuelve cuando se ejecuta una instrucción SQL utilizando elexec()
método del objeto creado por elDial()
function.
Los nombres de las columnas de los datos a consultar, una matriz de cadenas. las columnas el conjunto El valor del campo de valores es una matriz bidimensional, donde cada elemento es una matriz y un registro de datos. valores el conjunto
Ejemplo de consulta de datos en la base de datos:
{
"columns":["TS","HIGH","OPEN","LOW","CLOSE","VOLUME"],
"values":[
[1518970320000,100,99.1,90,100,12345.6],
[1518960320000,100,99.1,90,100,12345.6]
]
}
¿Por qué no lo haces?
Este JSON es la estructura de datos devuelta por la función miembrojoin()
de lasThread
objeto, que guarda cierta información sobre los hilos concurrentes en elJavaScript
La estrategia lingüísticaThread
objeto se refiere al objeto de hilo, que es creado porthreading.Thread()
.
Identificación del hilo. el número de Número Si el hilo se ve obligado a terminar. terminado - ¿ Qué? El tiempo de funcionamiento del hilo en nanosegundos. Se ha cumplido Número El valor de retorno de la función de hilo. el Número
El siguiente código prueba el mecanismo de tiempo de espera deljoin()
La función de laThread
Objeto y imprime el valor de retorno de lajoin()
function.
function testFunc() {
for (var i = 0; i < 5; i++) {
Log(i)
Sleep(300)
}
}
function main() {
var t1 = threading.Thread(testFunc)
Log(t1.join(1000)) // undefined
Log(t1.join()) // {"id":1,"terminated":false,"elapsed":1506864000}
} ```
{@fun/Threads/Thread/join join}
Funciones incorporadas
Variables incorporadas