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

结构体

Trade

市场成交记录的结构。

市场成交记录Id。 Id string 毫秒时间戳。 Time number 成交价格。 Price number 成交数量。 Amount number 订单类型,参考{@var/ORDER_TYPE/ORDER_TYPE_BUY ORDER_TYPE_BUY}、{@var/ORDER_TYPE/ORDER_TYPE_SELL ORDER_TYPE_SELL}。 Type number

exchange.GetTrades()函数返回一个Trade数组或者空数组。

{@fun/Market/exchange.GetTrades exchange.GetTrades}

Ticker

市场行情(tick数据)的结构。

交易所接口返回的原始数据,回测时无此属性。 Info object 合约代码。 Symbol string 最高价。 High number 最低价。 Low number 当前时刻的卖一价。 Sell number 当前时刻的买一价 Buy number 最新的成交价。 Last number 当前交易日的开盘价。 Open number 成交量。 Volume number 毫秒级别时间戳。 Time number 持仓量。 OpenInterest number

exchange.GetTicker()函数返回一个Ticker结构。

{@fun/Market/exchange.GetTicker exchange.GetTicker}

Record

K线Bar的结构,标准的OHLC结构,用来画K线和指标计算分析。

毫秒级别时间戳,对于一个Record结构,其Time属性值为这根K线Bar的周期的起始时间戳。 Time number 开盘价。 Open number 最高价。 High number 最低价。 Low number 收盘价。 Close number 持仓量。 OpenInterest number 成交量。 Volume number

exchange.GetRecords()函数返回一个Record数组或者空数组。 每一个Record结构代表一个K线柱,即一根K线Bar。

{@fun/Market/exchange.GetRecords exchange.GetRecords}

Order

订单的结构。

交易所接口应答的原始数据,回测时无此属性。 Info object 合约代码。 Symbol string 订单Id。 Id string 下单价格。 Price number 下单数量。 Amount number 成交数量。 DealAmount number 成交均价。 AvgPrice number 订单状态,参考{@var/ORDER_STATE/ORDER_STATE_PENDING ORDER_STATE_PENDING}、{@var/ORDER_STATE/ORDER_STATE_CLOSED ORDER_STATE_CLOSED}、{@var/ORDER_STATE/ORDER_STATE_CANCELED ORDER_STATE_CANCELED}、{@var/ORDER_STATE/ORDER_STATE_UNKNOWN ORDER_STATE_UNKNOWN}。 Status number 订单类型,参考{@var/ORDER_TYPE/ORDER_TYPE_BUY ORDER_TYPE_BUY}、{@var/ORDER_TYPE/ORDER_TYPE_SELL ORDER_TYPE_SELL}。 Type number 合约订单的开、平仓方向,参考{@var/ORDER_OFFSET/ORDER_OFFSET_OPEN ORDER_OFFSET_OPEN}、{@var/ORDER_OFFSET/ORDER_OFFSET_CLOSE ORDER_OFFSET_CLOSE}。 Offset number 合约订单中该属性为具体的合约代码。 ContractType string

Order订单结构可由exchange.GetOrder()、exchange.GetOrders()函数返回。 exchange.GetOrders()函数返回的是Order结构的数组或者空数组,如果当前没有未完成的订单,则返回[]即空数组。 Order订单结构的Status属性可以直接和ORDER_STATE_PENDING等常量比较,判断是否相等从而确定订单状态。 商品期货CTP协议/易盛协议中Order结构字段AvgPrice数据由成交回报计算得出。一旦策略实盘停止,这个成交回报数据就会丢失。之后无法计算出该字段数据,这个字段就会为0。 如果策略一直是运行状态,订单Order结构字段AvgPrice会正常显示。

{@fun/Trade/exchange.GetOrder exchange.GetOrder}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}

OrderBook

市场深度中的订单结构。

价格。 Price number 数量。 Amount number

exchange.GetDepth()函数返回的数据结构中,Bids、Asks的属性值为OrderBook数组。

{@fun/Market/exchange.GetDepth exchange.GetDepth}, {@struct/Depth Depth}

Depth

市场深度的结构。

交易所接口返回的原始数据,回测时无此属性。 Info object 卖单数组,即OrderBook数组,按价格从低向高排序,数组中第一个OrderBook结构的Price最低。 Asks array 买单数组,即OrderBook数组,按价格从高向低排序,数组中第一个OrderBook结构的Price最高。 Bids array 毫秒级别时间戳。 Time number

exchange.GetDepth()函数返回一个Depth结构。

{@fun/Market/exchange.GetDepth exchange.GetDepth}, {@struct/OrderBook OrderBook}

Account

账户信息的结构。

交易所接口返回的原始数据,回测时无此属性。 Info object 可用资产余额。 Balance number 订单未成交时,冻结的资产数值。 FrozenBalance number 账户权益,包含:可用资产余额、持仓保证金、持仓盈亏等。 Equity number 所有持有仓位的持仓盈亏。 UPnL number

exchange.GetAccount()函数返回一个Account结构。

{@fun/Account/exchange.GetAccount exchange.GetAccount}

Position

合约仓位信息的结构。

交易所接口返回的原始数据,回测时无此属性。 Info object 合约代码。 Symbol string 持仓杆杠大小,商品期货无法修改杠杆值。 MarginLevel number 持仓量。 Amount number 仓位冻结量,平仓单未成交时的临时冻结仓位数量。 FrozenAmount number 持仓均价。 Price number 股票不支持此字段,商品期货为盯市盈亏。 Profit number 仓位类型,参考{@var/POSITION_DIRECTION/PD_LONG PD_LONG}, {@var/POSITION_DIRECTION/PD_SHORT PD_SHORT}, {@var/POSITION_DIRECTION/PD_LONG_YD PD_LONG_YD}, {@var/POSITION_DIRECTION/PD_SHORT_YD PD_SHORT_YD}。 Type number 合约代码、股票代码,具体可以参看{@fun/Futures/exchange.SetContractType exchange.SetContractType}函数的描述内容。 ContractType string 仓位占用的保证金。 Margin number

exchange.GetPositions()函数返回一个Position数组或者空数组。

{@fun/Futures/exchange.GetPositions exchange.GetPositions}

Market

交易品种市场信息的结构

合约代码、股票代码、交易品种代码。 Symbol string 交易所标签,商品期货固定为:FUTURES。 BaseAsset string 交易所流通的计价货币代码,商品期货为:CNY。 QuoteAsset string 价格一跳,价格最小变动数量。 TickSize number 下单量最小变动数量。 AmountSize number 订单的价格精度。 PricePrecision number 订单的下单量精度。 AmountPrecision number 订单最小下单量。 MinQty number 订单最大下单量。 MaxQty number 订单的最小下单金额。 MinNotional number 订单的最大下单金额。 MaxNotional number 合约乘数。 CtVal number 交易品种所属的交易所标签,商品期货固定为:FUTURES。 CtValCcy string 协议返回数据的原始信息,回测时没有该字段数据。 Info object

exchange.GetMarkets()函数返回包含此Market结构的字典。

{@fun/Market/exchange.GetMarkets exchange.GetMarkets}

OtherStruct

HttpQuery-options

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

请求方法,例如:GETPOST等。 method string 请求体。例如在POST请求中,body可以包含表单数据、JSON、文本等。 body string 字符集编码。例如指定文本数据在body中的编码方式为:"UTF-8"。 charset string cookie是一种用于在客户端(通常是浏览器)和服务器之间存储和交换状态信息的小片数据。 cookie string 用来模拟浏览器tls指纹。 profile string 设置为true时,此次HttpQuery函数调用返回完整的应答报文。设置为false时只返回应答报文Body中的数据。 debug bool 请求头信息,以键值对的形式存在(JSON结构),用于传递各种信息,如内容类型、认证信息、缓存控制等。 headers JSON 超时设置,设置1000表示1秒钟超时。 timeout number

使用范例:

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

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

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

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}

HttpQuery-return

该JSON结构为HttpQuery函数调用时,参数options结构中指定debug字段为true时HttpQuery函数调试模式返回的数据结构。

http状态码 StatusCode number 请求头信息。 Header JSON Cookies信息。 Cookies array 请求的完整路径信息。 Trace JSON 报文长度 Length number 报文内容。 Body string

返回的JSON数据结构举例:

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

{@fun/Global/HttpQuery HttpQuery}, {@fun/Global/HttpQuery_Go HttpQuery_Go}

LogStatus-table

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

用于设置所要解析显示的UI、控件的类型,对于状态栏表格来说固定设置为:table。 type string 用于设置状态栏表格的标题。 title string 用于设置状态栏表格的列标题,数组的第一个元素为第一列的标题,以此类推。 cols array 用于设置状态栏表格的行数据,该rows数组(二维数组)的第一个元素亦为数组结构,这个数组结构长度应当与表格列数一致(该数组结构中的元素与表格列名一一对应)即表格中的第一行数据。 rows array

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) + "`")
}

{@fun/Log/LogStatus LogStatus}

LogStatus-btnTypeOne

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

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

状态栏按钮控件点击触发后的弹框中的控件通过input或者group设置。

对于按钮控件来说固定设置为:button。 type string 按钮类型设置 class string 按钮控件上的文本,即按钮名称。 name string 按钮控件触发点击操作时,发送给策略的交互命令内容。 cmd string 按钮控件的描述信息,在状态栏中鼠标放在该按钮上时显示的描述信息。 description string 设置按钮为禁用(true) / 启用(false)。 disabled bool 在构造状态栏按钮进行交互时也支持输入数据,交互指令最终由GetCommand()函数捕获。给状态栏中的按钮控件的JSON数据结构中增加input项用于配置按钮触发时显示的弹框中的输入控件。 例如设置input字段值为:

{
    "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时,支持下拉框多选。

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

group array

状态栏中按钮JSON结构的class取值范例:

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字段使用范例:

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

{@fun/Log/LogStatus LogStatus}

LogStatus-btnTypeTwo

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

{
    "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,
        }
    }],
}

状态栏按钮控件点击触发后的弹框中的控件通过input或者group设置。

对于按钮控件来说固定设置为:button。 type string 按钮控件上的文本,即按钮名称。 name string 按钮控件触发点击操作时,发送给策略的交互命令内容。 cmd string 在构造状态栏按钮进行交互时也支持输入数据,交互指令最终由GetCommand()函数捕获。给状态栏中的按钮控件的JSON数据结构中增加input项用于配置按钮触发时显示的弹框中的输入控件。 相对于旧版本的input结构,新版本有一些新增字段、改动:

{
    "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字段作为说明:

    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可以选择,用此选项可以进行具体设置。例如:

    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时,目前只有默认复选框。

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

group array

支持双语设置:

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

{@fun/Log/LogStatus LogStatus}

Chart-options

该JSON用于设置自定义画图函数Chart()的图表配置信息,图表库使用的是Highcharts。这里只列出几个基本的配置字段。

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

__isStock string

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

extension JSON 图表标题 title string X轴配置。 xAxis JSON Y轴配置。 yAxis JSON 图表数据系列。 series JSON

简单的画图例子:

// 这个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    
        // 取得最后成交价,为了2条线不重合在一起,我们加1
        var lastPrice = ticker.Last + 1
        // 用时间戳作为X值,买一价作为Y值传入索引0的数据序列
        ObjChart.add(0, [nowTime, buy1Price])
        // 同上
        ObjChart.add(1, [nowTime, lastPrice])
        Sleep(2000)
    }
}

{@fun/Log/Chart Chart}

KLineChart-options

该JSON用于设置自定义画图函数KLineChart的图表配置信息。这里只列出几个基本的配置字段。

是否画在主图。 overlay bool X轴配置。 xAxis JSON Y轴配置。 yAxis JSON 蜡烛图配置。 candle JSON

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

{@fun/Log/KLineChart KLineChart}

SetData-data

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

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

data string, number, bool, object, array 等。

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

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

{@fun SetData}, {@fun GetData}

EventLoop-return

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

事件序列号。 Seq number 事件名称。 Event string 事件线程Id。 ThreadId number 事件索引。 Index number nano时间戳。 Nano number

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

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

{@fun/Global/EventLoop EventLoop}

DBExec-return

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

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

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

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

{@fun/Global/DBExec DBExec}, {@fun/Global/Dial Dial}

Thread.join-return

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

线程Id。 id number 线程是否被强制结束。 terminated bool 线程的运行时间(纳秒)。 elapsed number 线程函数的返回值。 ret number

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

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

{@fun/Threads/Thread/join join}

内置函数 内置变量