JavaScript
, Python
, C++
, y las estrategias de MyLanguage se pueden diseñar con controles de interacción. Los controles de interacción de una estrategia se utilizan para enviar comandos interactivos al programa de estrategia en ejecución cuando la estrategia se está ejecutando en el comercio en vivo.
ParaJavaScript
, Python
, yC++
En la actualidad, la mayoría de losGetCommand()
Función en el código de estrategia para obtener el mensaje generado por el control de interacción.
Con el código diseñado en la estrategia para manejar mensajes de los controles interactivos, el uso de controles interactivos durante el comercio en vivo puede habilitar (sin limitarse a) funciones, tales como:
Variable (ejemplo de nombre) | Descripción | Tipo de producto | Valor predeterminado (descripción) | Configuración del componente (descripción) | Las observaciones |
---|---|---|---|---|---|
CmdNum | Descripción del mando interactivo cmdNum | Número | El valor predeterminado es opcional y puede dejarse en blanco | Se utiliza para establecer los controles de interfaz vinculados al elemento interactivo actual: tipo de componente, valor mínimo, valor máximo, agrupación, etc. | Observaciones sobre el control interactivo cmdNum |
¿ Qué está pasando? | Descripción del mando interactivo cmdBool | Boolean (verdadero/falso) | Valor predeterminado requerido, encendido o apagado | Lo mismo que arriba. | Observaciones sobre el control interactivo cmdBool |
El sistema de control de velocidad | Descripción del mando interactivo cmdStr | la cuerda | El valor predeterminado es opcional y puede dejarse en blanco | Lo mismo que arriba. | Observaciones sobre el control interactivo cmdStr |
En el caso de los equipos de control, | Descripción del mando interactivo cmdCombox | seleccionado | El valor predeterminado es opcional y puede dejarse en blanco | Lo mismo que arriba. | Observaciones sobre el control interactivo cmdCombox |
En el caso de las | Descripción del mando interactivo cmdBtn | el botón | El control del botón no está ligado al elemento de entrada | Lo mismo que arriba. | Observaciones sobre el control interactivo cmdBtn |
El mensaje enviado a la estrategia después de que se activa el control interactivo (cuadro de comandos):
Después de introducir los datos interactivos GetCommand()
La función en el programa de estrategia recibirá el mensaje:cmdBool:true
- ¿ Por qué?
Después de introducir los datos interactivos:abc
En el cuadro de entrada cmdStr de control interactivo, haga clic en el botón cmdStr de control interactivoGetCommand()
La función en el programa de estrategia recibirá el mensaje:cmdStr:abc
¿ Qué pasa?
Después de seleccionar la segunda opción en el cuadro desplegable del control interactivo cmdCombox, haga clic en el botón del control interactivo cmdCombox.GetCommand()
La función en el programa de estrategia recibirá el mensaje:cmdCombox:1
, donde 1 representa el índice de la opción seleccionada, la primera opción tiene un índice de 0 y la segunda opción tiene un índice de 1.
Haga clic en el botón del control interactivo cmdBtn.GetCommand()
La función en el programa de estrategia recibirá el mensaje:cmdBtn
.
La opción
5 tipos de componentes soportados por controles interactivos:
Los controles interactivos también se pueden agrupar, al igual que la configuración de parámetros de la interfaz.
Además de diseñar controles interactivos en la columna LogStatus
sección de funciones de la
Control de botón común Un ejemplo de una estructura de datos es:
{"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."}
Control de botón con entrada de datos
Utilice elinput
atributo para establecer las opciones de control de entrada, con un ejemplo de estructura de datos:
{"type": "button", "name": "button2", "cmd": "button2", "description": "This is the second button.", "input": {"name": "number of open positions", "type": "number", "defValue": 1}}
{
"type": "button",
"cmd": "test1",
"name": "test1",
"input": {
"type": "selected",
"name": "selected",
"label": "drop-down box",
"description": "description",
"default": 100,
"settings": {
"multiple": true,
"customizable": true,
"options":[{"name": "A", "value": 100}, {"name": "B", "value": 200}]
}
},
}
Control de botón con un conjunto de datos de entrada
Utilice elgroup
atributo para establecer las opciones de un grupo de controles de entrada, con un ejemplo de estructura de datos:
{
"type": "button",
"cmd": "open",
"name": "open positions",
"group": [
{"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "market order|pending order"},
{"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100},
{"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100},
{"name": "boolean", "description": "yes/no|boolean", "type": "boolean", "defValue": True}
]
}
{
"type": "button",
"cmd": "test2",
"name": "test2",
"group": [{
"type": "selected",
"name": "selected",
"label": "drop-down box",
"description": "description",
"default": 200,
"group": "group1",
"settings": {
"multiple": true,
"options":[{"name": "A", "value": 100}, {"name": "B", "value": 200}]
}
}, {
"type": "string",
"name": "string",
"label": "input box",
"description": "description",
"default": "ABC",
"group": "group1"
}],
}
Codificar estos botones de control de datos JSON en una cadena JSON, a continuación, envolverlo con`
Tomemos el lenguaje JavaScript como ejemplo:
function main() {
var btn = {"type": "button", "name": "button1", "cmd": "button1", "description": "This is the first button."}
LogStatus("`" + JSON.stringify(btn) + "`")
}
Estos controles de botón también se pueden escribir en los formularios de la barra de estado, por favor consulteGuía de sintaxispara ejemplos detallados.
La estructura de lainput
En el caso de las pruebas de detección, el campo de ensayo es consistente con la estructura de un solo control en elgroup
La siguiente es una descripción detallada:
{
"type": "selected", // Control type (required field), supports the following settings: number, string, selected, boolean
"name": "test", // Name (required when used in group)
"label": "topic", // Title (required field)
"description": "desc", // Component tips
"default": 1, // Default value; if the settings field is not set in the current JSON structure, defValue is compatible and can be used instead of default
"filter": "a>1", // Selector. If this field is not set, no filtering (controls are displayed). If this field is set, no filtering (controls are displayed) occurs when the expression is true. Filtering occurs when the expression is false (controls are not displayed)
// For the selector, take the expression a>1 in the current example as an example, a refers to the value of the control with name a under the group field in the structure of type=button. This value is used to determine whether to filter.
"group": "group1", // Grouping
"settings": { ... }, // Component configuration
}
Configuración del componentesettings
cada campo se describe con detalle:
settings.required
: Si esta opción es necesaria.settings.disabled
Si desactivar.settings.min
: válido cuando:type=number
, indicando el valor mínimo o la longitud mínima de la cuerda.settings.max
: válido cuando:type=number
, indicando el valor máximo o la longitud máxima de la cuerda.settings.step
: type=number
, válido cuandorender=slider
, indica la longitud del paso.settings.multiple
: type=selected
es válido, lo que indica que se admiten múltiples selecciones.settings.customizable
: type=selected
Si se selecciona la opción recién editada, se utiliza el nombre de la opción en lugar del valor representado por la opción cuando se activa la interacción.settings.options
: válido cuando:type=selected
, indicando el formato de los datos de la opción del selector:["option 1", "option 2"]
, [{'name':'xxx','value':0}, {'name':'xxx','value':1}]
.settings.render
: Tipo de componente de renderizado.
¿Cuándo?type=number
, settings.render
no está fijado (cuadro de entrada de número predeterminado), opcional:slider
(línea de deslizamiento),date
(el selector de tiempo devuelve la marca de tiempo).
¿Cuándo?type=string
, settings.render
no está configurado (cuadro de entrada de una sola línea predeterminado).textarea
(entrada de varias líneas),date
(el selector de tiempo devuelve yyyy-MM-dd hh:mm:ss),color
(El selector de colores devuelve #FF00FF).
¿Cuándo?type=selected
, settings.render
no está configurado (cuadro desplegable predeterminado), opcional:segment
(selector de segmentos).type=boolean
Actualmente sólo tiene una casilla de verificación predeterminada.Apoya la configuración bilingüe, por ejemplo:'选项 | options'
El sistema de control único en el ámbito lingüístico se adaptará al entorno lingüístico actual.group
campo como ejemplo, el ejemplo completo es:
{
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}]
}
}
Parámetros de la estrategia
Negociación de opciones