输入/搜索内容
内置函数
结构体
Trade
Ticker
Record
Order
Condition
OrderBook
Depth
Account
Asset
Position
Market
Funding
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

HTTP请求方法,例如:GETPOST等。

body

string

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

charset

string

字符集编码。用于指定请求体中文本数据的编码方式,例如:"UTF-8"

cookie

string

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

debug

bool

调试模式开关。设置为true时,HttpQuery函数调用将返回完整的HTTP响应报文;设置为false时仅返回响应报文Body中的数据。

headers

JSON

HTTP请求头信息,以键值对形式存在(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不作为控件标题使用,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
// 此chart在JavaScript语言中是对象,在使用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

蜡烛图配置参数。

参考

备注

参考使用KLineChart函数画图的专题文章

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

属性

名称类型描述

time

number

数据的时间戳,用于标记该条数据(data)对应的时间。

data

string / number / bool / object / array / any (平台支持的任意类型)

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":"Bitfinex","currency":"BTC_USD"}] */ 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、exchange.Go()、HttpQuery_Go()函数并发任务完成事件;3、JavaScript语言策略中threading.Thread()函数创建的线程发送的消息事件。

属性

名称类型描述

Seq

number

事件序列号。

Event

string

事件名称。

ThreadId

number

事件线程ID。

Index

number

事件索引。

Nano

number

纳秒时间戳。

参考

备注

使用exchange.Go()函数并发请求时,EventLoop()函数返回的事件数据结构。

json
{ "Seq":1, "Event":"Exchange_GetTrades", "ThreadId":0, "Index":3, "Nano":1682068771309583400 }

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