输入/搜索内容

除了在「策略交互」栏中设计交互控件,还可以在策略状态栏中设计交互控件。目前支持的交互控件类型仅有按钮,可以参考「语法手册」中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}] } }

状态栏展示组件

除了文字、表格和按钮,LogStatus还可以直接传带 type 的对象,状态栏按类型显示成组件:grid、tabs 负责布局,kpi(指标卡)、stat(键值列表)、chart(折线、柱状、面积图)、sparkline、gauge、progress、pie、histogram、heatmap、calendar、timeline、markdown、alert、badge 负责展示。组件只用于展示,可以和按钮、表格放进同一个 grid:

javascript
function main() { while (!exchange.IO("status")) Sleep(1000) exchange.SetContractType("rb888") var btn = {type: "button", name: "平仓|Close", cmd: "close"} while (true) { var ticker = exchange.GetTicker() if (ticker) { LogStatus({type: "grid", cols: 2, items: [ {type: "kpi", title: "最新价", value: ticker.Last}, btn // 按钮放进 grid 时不用加反引号 ]}) } var cmd = GetCommand() if (cmd) { Log("收到命令:", cmd) } Sleep(1000) } }

各组件的字段与三种语言的示例见状态栏组件,直接传对象、反引号、多个参数的输入写法见LogStatus。