交互控件
JavaScript、Python、C++、My语言策略均支持设计交互控件,用于在策略实盘运行时向运行中的策略程序发送交互指令。对于JavaScript、Python、C++语言类型的策略,可在策略代码中使用GetCommand()函数获取交互控件产生的消息。

在策略中设计好处理交互控件消息的代码后,实盘运行时使用交互控件可以实现以下功能(但不限于):
- 手动平仓策略持仓。
- 动态修改策略参数,无需重启策略实盘。
- 切换策略运行逻辑。
- 触发打印调试信息或数据,用于测试特定功能。
交互控件种类
| 变量(命名举例) | 描述 | 类型 | 默认值(说明) | 组件配置(说明) | 备注 |
|---|---|---|---|---|---|
| cmdNum | 交互控件cmdNum的描述 | 数字型(number) | 默认值选填,可留空 | 用于设置当前交互项绑定的界面控件:组件类型、最小值、最大值、分组等 | 交互控件cmdNum的备注 |
| cmdBool | 交互控件cmdBool的描述 | 布尔型(true/false) | 默认值必填,开启或关闭 | 同上 | 交互控件cmdBool的备注 |
| cmdStr | 交互控件cmdStr的描述 | 字符串(string) | 默认值选填,可留空 | 同上 | 交互控件cmdStr的备注 |
| cmdCombox | 交互控件cmdCombox的描述 | 下拉框(selected) | 默认值选填,可留空 | 同上 | 交互控件cmdCombox的备注 |
| cmdBtn | 交互控件cmdBtn的描述 | 按钮(button) | 按钮控件不绑定输入项 | 同上 | 交互控件cmdBtn的备注 |
交互控件触发后发送给策略的消息(字符串):
- 数字型
在交互控件cmdNum的输入框中输入交互数据:123后,点击交互控件cmdNum的按钮。策略程序中的GetCommand()函数将收到消息:cmdNum:123。 - 布尔型
在交互控件cmdBool的开关控件上设置为打开,点击交互控件cmdBool的按钮。策略程序中的GetCommand()函数将收到消息:cmdBool:true。 - 字符串
在交互控件cmdStr的输入框中输入交互数据:abc后,点击交互控件cmdStr的按钮。策略程序中的GetCommand()函数将收到消息:cmdStr:abc。 - 下拉框
在交互控件cmdCombox的下拉框中选中第二个选项后,点击交互控件cmdCombox的按钮。策略程序中的GetCommand()函数将收到消息:cmdCombox:1,其中1表示选中选项的索引,第一个选项索引为0,第二个选项索引为1。 - 按钮
点击交互控件cmdBtn的按钮。策略程序中的GetCommand()函数将收到消息:cmdBtn。
交互控件的应用:动态修改策略参数
例如,策略有一个参数为symbol,在策略界面上添加的策略参数也是全局变量,因此这里使用代码中的全局变量作为演示。
javascript
// 策略参数
var symbol = "rb888"
function main() {
while (true) {
var cmd = GetCommand()
if (cmd) {
var arr = cmd.split(":")
if (arr.length == 2 && arr[0] == "changeSymbol") {
// 检测到 changeSymbol 控件触发,就会执行参数更新操作
Log("修改symbol参数为:", arr[1])
symbol = arr[1]
}
}
LogStatus(_D(), ",当前的symbol参数值为:", symbol)
Sleep(3000)
}
}
设置交互控件:
组件配置
策略交互控件的「组件配置」选项用于设置平台上5种交互控件类型对应的控件,增强功能并简化设计。
5种交互控件支持的组件类型:
- 数字型(number)交互控件
支持的组件类型:输入框控件(默认)、时间选择器控件、滑动输入条控件。 - 布尔型(true/false)交互控件
仅支持开关控件(默认)。 - 字符串(string)交互控件
支持的组件类型:输入框控件(默认)、文本框控件、时间选择器控件、颜色选择器控件、交易代码选择器。 - 下拉框(selected)交互控件
支持的组件类型:下拉框控件(默认)、分段控制器控件、交易代码选择器。 - 按钮(button)交互控件
仅支持按钮控件(默认),无输入项控件。
交互控件与界面参数设置相同,均可进行分组。组件配置中提供了分组设置功能。
- 分组
在组件配置的「分组」输入框中,可以输入标签名称,将多个策略交互控件划分到同一分组标签下(此功能替代平台原有的「交互控件分组」功能)。
状态栏中的交互控件
除了在「策略交互」栏中设计交互控件,还可以在策略状态栏中设计交互控件。目前支持的交互控件类型仅有按钮,可以参考「语法手册」中LogStatus函数章节。
状态栏中的按钮控件可以分为:
-
普通按钮控件
数据结构示例:json{"type": "button", "name": "按钮1", "cmd": "button1", "description": "这是第一个按钮"} -
带单个输入数据的按钮控件
使用input属性设置输入控件选项,数据结构示例:json{"type": "button", "name": "按钮2", "cmd": "button2", "description": "这是第二个按钮", "input": {"name": "开仓数量", "type": "number", "defValue": 1}}json{ "type": "button", "cmd": "test1", "name": "test1", "input": { "type": "selected", "name": "selected", "label": "下拉框", "description": "description", "default": 100, "settings": { "multiple": true, "customizable": true, "options":[{"name": "A", "value": 100}, {"name": "B", "value": 200}] } }, } -
带一组输入数据的按钮控件
使用group属性设置一组输入控件的选项,数据结构示例:json{ "type": "button", "cmd": "open", "name": "开仓", "group": [ {"name": "orderType", "description": "下单方式|order type", "type": "selected", "defValue": "市价单|挂单"}, {"name": "tradePrice@orderType==1", "description": "交易价格|trade price", "type": "number", "defValue": 100}, {"name": "orderAmount", "description": "委托数量|order amount", "type": "string", "defValue": 100}, {"name": "boolean", "description": "是/否|boolean", "type": "boolean", "defValue": true} ] }json{ "type": "button", "cmd": "test2", "name": "test2", "group": [{ "type": "selected", "name": "selected", "label": "下拉框", "description": "description", "default": 200, "group": "group1", "settings": { "multiple": true, "options":[{"name": "A", "value": 100}, {"name": "B", "value": 200}] } }, { "type": "string", "name": "string", "label": "输入框", "description": "description", "default": "ABC", "group": "group1" }], }
将这些按钮控件JSON数据编码为JSON字符串,然后使用`字符包裹,在状态栏输出。以JavaScript语言为例:
javascript
function main() {
var btn = {"type": "button", "name": "按钮1", "cmd": "button1", "description": "这是第一个按钮"}
LogStatus("`" + JSON.stringify(btn) + "`")
}
这些按钮控件也可以写入状态栏表格中,详细示例请查看语法手册。
input字段结构与group字段中单个控件结构一致,以下为详细说明:
desc
{
"type": "selected", // 控件类型(必需字段),支持设置为:number, string, selected, boolean
"name": "test", // 名称(在group中使用时为必需字段)
"label": "topic", // 标题(必需字段)
"description": "desc", // 组件的提示信息
"default": 1, // 默认值;当前JSON结构中如果不设置settings字段,兼容defValue,可以用defValue代替default
"filter": "a>1", // 选择器,不设置该字段表示不过滤(显示控件);设置该字段时,当表达式为真时不过滤(显示控件),当表达式为假时过滤(不显示控件)
// 对于选择器,以当前示例中表达式a>1为例,a指的是type=button的结构中group字段下name为a的控件值,根据此数值判断是否过滤
"group": "group1", // 分组
"settings": { ... }, // 组件配置
}
组件配置settings各字段详细说明:
settings.required:是否必填。settings.disabled:是否禁用。settings.min:type=number时有效,表示最小值或字符串最小长度。settings.max:type=number时有效,表示最大值或字符串最大长度。settings.step:type=number,render=slider时有效,表示步长。settings.multiple:type=selected时有效,表示支持多选。settings.customizable:type=selected时有效,表示支持自定义;用户可以直接在下拉框控件中编辑添加新选项,如果选中新编辑的选项,在触发交互时使用该选项的名称而不是选项代表的值。settings.options:type=selected时有效,表示选择器的选项数据格式:["选项1","选项2"]、[{'name':'xxx','value':0}, {'name':'xxx','value':1}]。settings.render:渲染组件类型。
type=number时,settings.render不设置(默认数字输入框),可选:slider(滑动条)、date(时间选择器返回时间戳)。
type=string时,settings.render不设置(默认单行输入框),可选:textarea(多行输入)、date(时间选择器返回yyyy-MM-dd hh:mm:ss)、color(颜色选择器返回#FF00FF)。
type=selected时,settings.render不设置(默认下拉框),可选:segment(分段选择器)。
type=boolean时,目前只有默认复选框。
支持双语设置,例如:'选项|options'文本内容会根据当前语言环境适配;以group字段中单个控件为例,完整示例:
json
{
type:'selected',
name:'test',
label:'选项|options',
description:'描述|description',
default:0, // 这里default默认值设置为0,表示{name:'xxx|yyy',value:0}选项中的value值
filter:'a>1&&a<10',
group:'分组|group',
settings:{
multiple:true,
customizable:true,
options:[{name:'xxx|yyy',value:0}]
}
}
