资源加载中... loading...

交互控件


![交互控件](![image](/upload/asset/2e4320d0cc33c15eb935d.png)) 

在策略中设计好处理交互控件消息的代码,在实盘时使用交互控件可以实现(不限于)诸如以下功能:
- 手动平掉策略持仓。
- 动态修改策略参数,避免重启策略实盘。
- 切换策略逻辑。
- 触发打印某些调试信息、数据,用来测试某些功能。


### 交互控件种类

| 变量(命名举例) | 描述 | 类型 | 默认值(说明) | 组件配置(说明) | 备注 |
| - | - | - | - | - | - |
| 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,在策略界面上添加的策略参数也是全局变量,所以这里就使用代码里的全局变量作为演示。

```js
// 策略参数
var symbol = "BTC_USDT"

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

设置交互控件: image

组件配置

策略交互控件的「组件配置」选项用于设置平台上5种交互控件类型对应的控件,增强功能,简化设计。

5种交互控件支持的组件类型: - 数字型(number)交互控件 支持的组件类型:输入框控件(默认)、时间选择器控件、滑动输入条控件。 - 布尔型(true/false)交互控件 仅支持开关控件(默认)。 - 字符串(string)交互控件 支持的组件类型:输入框控件(默认)、文本框控件、时间选择器控件、颜色选择器控件、币种、交易代码。 - 下拉框(selected)交互控件 支持的组件类型:下拉框控件(默认)、分段控制器控件、币种、交易代码。 - 按钮(button)交互控件 仅有一个按钮控件(默认),没有输入项控件。

交互控件与界面参数设置一样,也可以进行分组。在组件配置中有分组设置。 - 分组 在组件配置的「分组」输入框中,可以输入命名一个标签,把若干个策略交互控件划分到一个分组标签中(代替平台旧功能「交互控件分组」)。

状态栏中的交互控件

除了在「策略交互」栏中设计交互控件,还可以在策略状态栏中设计交互控件。目前支持的交互控件种类仅有按钮类型,可以参考「语法手册」中LogStatus函数章节。 状态栏中的按钮控件可以分为: - 普通按钮控件 数据结构举例为:

  {"type": "button", "name": "按钮1", "cmd": "button1", "description": "这是第一个按钮"}
  • 带一个输入数据的按钮控件 使用input属性设置输入控件选项,数据结构举例为:
  {"type": "button", "name": "按钮2", "cmd": "button2", "description": "这是第二个按钮", "input": {"name": "开仓数量", "type": "number", "defValue": 1}}
  {
      "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属性设置一组输入控件的选项,数据结构举例为:
    
    {
      "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}
      ]
    }
    
  {
      "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语言为例:

function main() {
    var btn = {"type": "button", "name": "按钮1", "cmd": "button1", "description": "这是第一个按钮"}
    LogStatus("`" + JSON.stringify(btn) + "`")
}

这些按钮控件也可以写入状态栏表格中,详细例子可以查看语法手册


```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.mintype=number时有效,表示最小值或字符串最小长度。 - settings.maxtype=number时有效,表示最大值或字符串最大长度。 - settings.steptype=numberrender=slider时有效,表示步长。 - settings.multipletype=selected时有效,表示支持多选。 - settings.customizabletype=selected时有效,表示支持自定义;用户可以直接在下拉框控件中编辑添加新选项,如果选中新编辑的选项,在触发交互时使用该选项的名称而不是选项代表的值。 - settings.optionstype=selected时有效,表示选择器的选项数据格式:["选项1","选项2"][{'name':'xxx','value':0}, {'name':'xxx','value':1}]。 - settings.render:渲染组件类型。

  ```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}]
    }
}
策略参数 期权交易