输入/搜索内容
内置函数
结构体
Trade
Ticker
Record
Order
OrderBook
Depth
Account
Position
Market
OtherStruct
HttpQuery-options
HttpQuery-return
LogStatus-table
LogStatus-btnTypeOne
LogStatus-btnTypeTwo
Chart-options
KLineChart-options
SetData-data
EventLoop-return
DBExec-return
Thread.join-return
内置变量

该JSON结构用于配置HttpQuery函数、HttpQuery_Go函数发送HTTP请求的各项参数。

属性

名称类型描述

method

string

请求方法,例如:GETPOST等。

body

string

请求体。例如在POST请求中,body可以包含表单数据、JSON、文本等。

charset

string

字符集编码。例如指定文本数据在body中的编码方式为:"UTF-8"

cookie

string

Cookie是一种用于在客户端(通常是浏览器)和服务器之间存储和交换状态信息的小型数据片段。

debug

bool

设置为true时,此次HttpQuery函数调用返回完整的响应报文。设置为false时仅返回响应报文Body中的数据。

headers

JSON

请求头信息,以键值对的形式存在(JSON结构),用于传递各种信息,如内容类型、认证信息、缓存控制等。

timeout

number

超时设置,设置1000表示1秒超时。

参考

备注

使用示例:

javascript
function main() { var options = { method: "POST", body: "a=10&b=20&c=30", charset: "UTF-8", cookie: "session_id=12345; lang=en", debug: false, headers: {"TEST-HTTP-QUERY": "123"}, timeout: 1000 } var ret = HttpQuery("http://127.0.0.1:8080", options) Log(ret) }

以上代码执行时发出的HTTP报文:

log
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

该JSON结构为HttpQuery函数调用时,在参数options结构中将debug字段设置为true后,HttpQuery函数在调试模式下返回的数据结构。

属性

名称类型描述

StatusCode

number

HTTP状态码

Header

JSON

请求头信息

Cookies

array

Cookie信息

Trace

JSON

请求的完整路径信息

Length

number

响应报文长度

Body

string

响应报文内容

参考

备注

返回的JSON数据结构示例:

json
{ "StatusCode": 302, "Header": { "Content-Type": ["text/html"], // ... }, "Cookies": [{ // ... }], "Trace": {}, "Length": 154, "Body": "..." }

该JSON结构用于配置策略状态栏中显示的表格内容。

属性

名称类型描述

type

string

用于设置要解析显示的UI控件类型,对于状态栏表格,固定设置为:table

title

string

用于设置状态栏表格的标题。

cols

array

用于设置状态栏表格的列标题,数组的第一个元素为第一列的标题,依此类推。

rows

array

用于设置状态栏表格的行数据。该rows数组为二维数组,其第一个元素也是数组结构,该数组结构的长度应与表格列数一致(数组中的元素与表格列名一一对应),即表格的第一行数据。

参考

备注

javascript
function main() { var tbl = { type: "table", title: "标题", cols: ["列1", "列2", "列3"], rows: [ ["行1列1", "行1列2", "行1列3"], ["行2列1", "行2列2", "行2列3"], ["行3列1", "行3列2", "行3列3"], ] } LogStatus("`" + JSON.stringify(tbl) + "`") }

该JSON结构用于配置状态栏中的按钮控件,按钮控件JSON结构可以嵌入到状态栏表格JSON结构中。此结构为旧版本结构,平台目前仍然兼容,建议使用最新版本的按钮JSON结构。
状态栏按钮控件构造示例(按钮触发点击后,弹框中包含单个输入控件,通过input字段构造):

json
{ "type": "button", "cmd": "open", "name": "开仓", "input": { "name": "开仓数量", "type": "number", "defValue": 1 } }

状态栏按钮控件点击触发后的弹框中的控件通过inputgroup字段设置。

属性

名称类型描述

type

string

对于按钮控件,固定设置为:button

class

string

按钮类型设置。

name

string

按钮控件上显示的文本,即按钮名称。

cmd

string

按钮控件触发点击操作时,发送给策略的交互命令内容。

description

string

按钮控件的描述信息。当鼠标悬停在状态栏中该按钮上时显示此描述信息。

disabled

bool

设置按钮为禁用(true)或启用(false)。

input

JSON

在构造状态栏按钮进行交互时支持输入数据,交互指令最终由GetCommand()函数捕获。在状态栏按钮控件的JSON数据结构中添加input项,用于配置按钮触发时显示的弹框中的输入控件。
例如,设置input字段值为:

json
{ "name": "开仓数量", "type": "number", "defValue": 1, "description": "test" }

上述JSON结构中各字段描述:

  • name
    状态栏按钮触发点击操作后,弹出的弹框中控件的标题。
  • description
    状态栏按钮触发点击操作后,弹出的弹框中控件的描述信息。
  • type
    状态栏按钮触发点击操作后,弹出的弹框中控件的类型。type字段可取以下值:
    1、"number":数值输入控件。
    2、"string":字符串输入控件。
    3、"selected":下拉框控件。
    4、"boolean":开关控件。
  • defValue
    状态栏按钮触发点击操作后,弹出的弹框中控件的默认值。
    如果是下拉框类型控件(selected),defValue字段用于设置下拉框选项,例如:"input": {"name": "开仓数量", "type": "selected", "defValue": "A|B|C"},下拉框选项的文本描述被设置为A、B、C。

对于下拉框类型控件的扩展字段:

  • options
    状态栏按钮控件触发的页面中的下拉框控件,可以使用options字段设置选项。options字段中的选项不仅支持字符串,还支持使用{text: "描述", value: "值"}结构。使用defValue字段设置默认选项,默认选项可以多选。
  • multiple
    当该字段设置为true时,支持下拉框多选。

group

array

input字段配置状态栏按钮触发点击后弹出的弹框中的单个控件,而group字段用于配置一组控件。group中的元素与input字段值的数据结构一致,请参考input字段的相关描述说明。

参考

备注

状态栏中按钮JSON结构的class属性取值示例:

javascript
function main() { var table = { type: "table", title: "状态栏按钮样式", cols: ["默认", "原始", "成功", "信息", "警告", "危险"], rows: [ [ {"type":"button", "class": "btn btn-xs btn-default", "name": "默认"}, {"type":"button", "class": "btn btn-xs btn-primary", "name": "原始"}, {"type":"button", "class": "btn btn-xs btn-success", "name": "成功"}, {"type":"button", "class": "btn btn-xs btn-info", "name": "信息"}, {"type":"button", "class": "btn btn-xs btn-warning", "name": "告警"}, {"type":"button", "class": "btn btn-xs btn-danger", "name": "危险"} ] ] } LogStatus("`" + JSON.stringify(table) + "`") }

group字段与input字段使用示例:

javascript
function main() { // 状态栏按钮控件(通过设置input字段实现)testBtn1按钮触发的页面中的下拉框控件使用options字段设置选项,使用defValue字段设置默认选项。与本章其他示例中直接使用defValue设置选项的方式不同。 var testBtn1 = { type: "button", name: "testBtn1", cmd: "cmdTestBtn1", input: {name: "testBtn1ComboBox", type: "selected", options: ["A", "B"], defValue: 1} } /* 状态栏按钮控件(通过设置input字段实现)testBtn2按钮触发的页面中的下拉框控件使用options字段设置选项,options字段中的选项不仅支持字符串, 还支持使用```{text: "描述", value: "值"}```结构。使用defValue字段设置默认选项,默认选项可以是多选(通过数组结构实现多选)。多选需要将额外的字段multiple设置为真值(true)。 */ var testBtn2 = { type: "button", name: "testBtn2", cmd: "cmdTestBtn2", input: { name: "testBtn2MultiComboBox", type: "selected", description: "实现下拉框多选", options: [{text: "选项A", value: "A"}, {text: "选项B", value: "B"}, {text: "选项C", value: "C"}], defValue: ["A", "C"], multiple: true } } // 状态栏分组按钮控件(通过设置group字段实现)testBtn3按钮触发的页面中的下拉框控件使用options字段设置选项,也支持直接使用defValue设置选项。 var testBtn3 = { type: "button", name: "testBtn3", cmd: "cmdTestBtn3", group: [ {name: "comboBox1", label: "labelComboBox1", description: "下拉框1", type: "selected", defValue: 1, options: ["A", "B"]}, {name: "comboBox2", label: "labelComboBox2", description: "下拉框2", type: "selected", defValue: "A|B"}, {name: "comboBox3", label: "labelComboBox3", description: "下拉框3", type: "selected", defValue: [0, 2], multiple: true, options: ["A", "B", "C"]}, { name: "comboBox4", label: "labelComboBox4", description: "下拉框4", type: "selected", defValue: ["A", "C"], multiple: true, options: [{text: "选项A", value: "A"}, {text: "选项B", value: "B"}, {text: "选项C", value: "C"}, {text: "选项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) } }

该JSON结构用于配置状态栏中的按钮控件,按钮控件JSON结构可以嵌入到状态栏表格JSON结构中。这是目前最新版本的按钮JSON结构。
状态栏按钮控件构造示例(按钮触发点击后,弹出框中包含多个输入控件,通过group字段构造):

json
{ "type": "button", "cmd": "open", "name": "开仓下单", "group": [{ "type": "selected", "name": "tradeType", "label": "下单类型", "description": "市价单、限价单", "default": 0, "group": "交易设置", "settings": { "options": ["市价单", "限价单"], "required": true, } }, { "type": "selected", "name": "direction", "label": "交易方向", "description": "买入、卖出", "default": "buy", "group": "交易设置", "settings": { "render": "segment", "required": true, "options": [{"name": "买入", "value": "buy"}, {"name": "卖出", "value": "sell"}], } }, { "type": "number", "name": "price", "label": "价格", "description": "订单的价格", "group": "交易设置", "filter": "tradeType==1", "settings": { "required": true, } }, { "type": "number", "name": "amount", "label": "下单量", "description": "订单的下单量", "group": "交易设置", "settings": { "required": true, } }], }

状态栏按钮控件点击触发后弹出框中的控件通过inputgroup字段进行设置。

属性

名称类型描述

type

string

对于按钮控件,固定设置为:button

name

string

按钮控件上显示的文本,即按钮名称。

cmd

string

按钮控件被点击时,发送给策略的交互命令内容。

input

JSON

在构造状态栏按钮进行交互时支持输入数据配置,交互指令最终由GetCommand()函数捕获。在状态栏按钮控件的JSON数据结构中增加input项,用于配置按钮触发时弹出对话框中的输入控件。
相对于旧版本的input结构,新版本增加了一些字段并进行了改动:

json
{ "type": "selected", "name": "test", "label": "topic", "description": "desc", "default": 1, "filter": "a>1", "group": "group1", "settings": { ... }, // 组件配置 }

以上JSON结构中各字段的描述和说明:

  • type
    控件类型(必填字段),支持设置为:"number"数值输入框、"string"字符串输入框、"selected"下拉框、"boolean"开关控件。
  • name
    如果当前JSON结构是input字段的值,当未设置label字段时,name将作为状态栏按钮点击触发后弹出对话框中的控件标题。
    如果当前JSON结构是group字段值(数组结构)中的一个元素,name不作为控件标题使用,而是用于表示控件输入内容的字段名。例如以下group字段的示例片段:
    json
    var testBtn3 = { type: "button", name: "testBtn3", cmd: "cmdTestBtn3", group: [ {name: "comboBox1", label: "labelComboBox1", description: "下拉框1", type: "selected", defValue: 1, options: ["A", "B"]}, {name: "comboBox2", label: "labelComboBox2", description: "下拉框2", type: "selected", defValue: "A|B"}, {name: "comboBox3", label: "labelComboBox3", description: "下拉框3", type: "selected", defValue: [0, 2], multiple: true, options: ["A", "B", "C"]}, { name: "comboBox4", label: "labelComboBox4", description: "下拉框4", type: "selected", defValue: ["A", "C"], multiple: true, options: [{text: "选项A", value: "A"}, {text: "选项B", value: "B"}, {text: "选项C", value: "C"}, {text: "选项D", value: "D"}] } ] }
    根据此示例,当状态栏按钮触发交互时,将弹出包含4个下拉框控件的对话框。设置好各控件的选项并点击确定发送交互消息后,策略中的GetCommand函数将接收到cmdTestBtn3:{"comboBox1":1,"comboBox2":0,"comboBox3":[0,2],"comboBox4":["A","C"]}
    JSON结构中name的值都作为返回交互信息的字段名,例如:comboBox1、comboBox2等。
  • label
    用于设置控件的标题。
  • description
    控件的描述信息。如果当前JSON结构是group字段值(数组结构)中的一个元素,当未设置label字段时,description将作为状态栏按钮点击触发后弹出对话框中的控件标题。
  • default
    控件的默认值。
  • filter
    选择器,用于控制控件的显示与隐藏。不设置该字段表示不过滤(显示控件);设置该字段时,当表达式为真时不过滤(显示控件),当表达式为假时过滤(不显示控件)。
  • group
    用于控制控件分组,支持折叠显示。
  • settings
    组件配置,控件有多种UI样式可供选择,通过此选项进行具体设置。例如:
    json
    settings:{ multiple:true, customizable:true, options:[{name:'xxx|yyy',value:0}] }
    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时,目前仅支持默认复选框。

group

array

input字段配置状态栏按钮触发点击后弹出的对话框中的一个控件,groupinput的区别在于其配置的是一组控件,group中的元素与input字段值的数据结构保持一致,请参考上述input字段的相关描述说明。

参考

备注

支持双语设置:

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

此JSON用于配置自定义绘图函数Chart()的图表设置信息,图表库采用Highcharts。此处仅列出几个基本配置字段。

属性

名称类型描述

__isStock

string

平台扩展字段。设置为true时,使用Highstocks图表;设置为false时,使用Highcharts图表。

extension

JSON

json
{ layout: 'single', // 不参与分组,单独显示,默认为分组模式 'group' height: 300, // 指定高度 }

title

string

图表标题

xAxis

JSON

X轴配置。

yAxis

JSON

Y轴配置。

series

JSON

图表数据系列。

参考

备注

简单的绘图示例:

javascript
// 在JavaScript语言中,chart是一个对象。在使用Chart函数之前,需要先声明一个用于配置图表的对象变量chart var chart = { // 该字段标记图表是否为股票图表,可以尝试改为false运行查看效果 __isStock: true, // 缩放工具 tooltip: {xDateFormat: '%Y-%m-%d %H:%M:%S, %A'}, // 标题 title : { text : '差价分析图'}, // 选择范围 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 }, // 坐标轴横轴(X轴),当前设置的类型为时间 xAxis: { type: 'datetime'}, // 坐标轴纵轴(Y轴),默认数值随数据大小自动调整 yAxis : { // 标题 title: {text: '差价'}, // 是否启用右侧纵轴 opposite: false }, // 数据系列,该属性保存各个数据系列(线、K线图、标签等) series : [ // 索引为0,data数组内存储该索引系列的数据 {name : "line1", id : "线1,buy1Price", data : []}, // 索引为1,设置了dashStyle:'shortdash',即设置为虚线 {name : "line2", id : "线2,lastPrice", dashStyle : 'shortdash', data : []} ] } function main(){ // 调用Chart函数,初始化图表 var ObjChart = Chart(chart) // 清空图表 ObjChart.reset() while(true){ // 获取本次轮询的时间戳(毫秒级时间戳),用于确定写入图表X轴的位置 var nowTime = new Date().getTime() // 获取行情数据 var ticker = _C(exchange.GetTicker) // 从行情数据的返回值中获取买一价 var buy1Price = ticker.Buy // 获取最后成交价,为避免两条线重合,加1处理 var lastPrice = ticker.Last + 1 // 使用时间戳作为X值,买一价作为Y值,传入索引0的数据序列 ObjChart.add(0, [nowTime, buy1Price]) // 同上 ObjChart.add(1, [nowTime, lastPrice]) Sleep(2000) } }

该JSON用于配置自定义绘图函数KLineChart的图表参数。此处仅列出几个基本配置字段。

属性

名称类型描述

overlay

bool

是否叠加在主图上。

xAxis

JSON

X轴配置参数。

yAxis

JSON

Y轴配置参数。

candle

JSON

K线图配置参数。

参考

备注

参见使用KLineChart函数绘图的专题文章

该JSON用于设置exchange.SetData()函数所要加载的数据。该JSON数据为数组结构,其中每个元素也是一个数组,即[time, data]

属性

名称类型描述

time

number

数据的时间戳,标记该条数据(data)的时间。

data

string / number / bool / object / array 等。

data是exchange.SetData()函数加载的数据中某个时间对应的一条数据内容。策略运行时,exchange.GetData()函数根据当前时间获取对应时间戳的数据。

参考

备注

回测系统中加载数据,策略回测运行时获取数据的示例:

javascript
/*backtest start: 2020-01-21 00:00:00 end: 2020-02-12 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}] */ 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) } }

该JSON是EventLoop()函数返回的数据结构。EventLoop()函数监听以下事件:1、任意WebSocket的可读数据事件;2、HttpQuery_Go()函数并发任务的完成事件;3、JavaScript语言策略中通过threading.Thread()函数创建的线程发送的消息事件。

属性

名称类型描述

Seq

number

事件序列号。

Event

string

事件名称。

ThreadId

number

事件线程ID。

Index

number

事件索引。

Nano

number

纳秒时间戳。

参考

备注

在JavaScript语言策略中,当并发执行的线程(通过threading.Thread()函数创建)使用线程对象的postMessage()函数发送消息时,接收消息的线程中EventLoop()函数会监听到以下事件数据结构:

json
{ "Seq":4, "Event":"thread", "ThreadId":1, "Index":0, "Nano":1727592066508674000 }

该JSON是DBExec()函数返回的数据结构;使用Dial()函数创建的对象的exec()方法执行SQL语句时,也会返回该JSON数据结构。

属性

名称类型描述

columns

array

查询数据的列名,为字符串数组。

values

array

查询的具体数据,其中每条数据与列名一一对应。values字段的值是一个二维数组,其中每个元素为一个数组,代表一条数据记录。

参考

备注

查询数据库中的数据示例:

json
{ "columns":["TS","HIGH","OPEN","LOW","CLOSE","VOLUME"], "values":[ [1518970320000,100,99.1,90,100,12345.6], [1518960320000,100,99.1,90,100,12345.6] ] }

该JSON是Thread对象的成员函数join()返回的数据结构,保存了JavaScript语言策略中并发线程的相关信息。Thread对象指线程对象,通过threading.Thread()方法创建。

属性

名称类型描述

id

number

线程ID。

terminated

bool

线程是否被强制终止。

elapsed

number

线程的运行时间(纳秒)。

ret

number

线程函数的返回值。

参考

备注

以下代码测试Thread对象的join()函数的超时机制,并打印输出join()函数的返回值。

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