结构体
Trade
市场成交记录的数据结构。
属性
| 名称 | 类型 | 描述 |
Id | string | 市场成交记录的唯一标识符,若交易所接口未提供Id则使用时间戳填充。 |
Time | number | 毫秒级时间戳。 |
Price | number | 成交价格。 |
Amount | number | 成交数量。 |
Type | number | 订单类型,参考 |
参考
备注
exchange.GetTrades()函数返回Trade数组或空数组。
Ticker
市场行情数据结构。
属性
| 名称 | 类型 | 描述 |
Info | object | 交易所接口返回的原始数据,回测时不包含此属性。 |
Symbol | string |
|
High | number | 最高价。如果交易所接口未提供24小时最高价,则使用卖一价格填充。 |
Low | number | 最低价。如果交易所接口未提供24小时最低价,则使用买一价格填充。 |
Sell | number | 当前卖一价格。 |
Buy | number | 当前买一价格。 |
Last | number | 最新成交价。 |
Open | number | 周期开盘价。如果交易所接口未提供24小时滚动周期的开盘价,则使用当前价格填充。 |
Volume | number | 最近成交量。原则上,现货成交量单位为交易币种(baseCurrency),合约成交量单位为合约张数。如果交易所接口未提供此类数据,则使用交易所接口现有数据填充,例如可能为计价币种(quoteCurrency)为单位的成交量。 |
Time | number | 毫秒级时间戳。 |
OpenInterest | number | 持仓量。大部分交易所接口不提供该数据,不支持时值为0。 |
参考
备注
exchange.GetTicker()函数返回一个Ticker结构。
对于期权合约,exchange.GetTicker()函数调用容易报错。因为期权合约盘口通常流动性较差,经常出现买一、卖一无挂单的情况,此时FMZ底层检测到Ticker结构字段Buy或Sell为0时会触发错误提示。
Record
K线柱的数据结构,标准的OHLC格式,用于绘制K线图和技术指标计算分析。
属性
| 名称 | 类型 | 描述 |
Time | number | 毫秒级时间戳,表示该K线柱周期的起始时间。 |
Open | number | 开盘价。 |
High | number | 最高价。 |
Low | number | 最低价。 |
Close | number | 收盘价。 |
OpenInterest | number | 持仓量。大部分交易所接口不提供此数据,不支持时值为0。 |
Volume | number | 成交量。现货成交量单位原则上为基础货币(baseCurrency),合约成交量单位为合约张数。若交易所接口未提供标准数据,则使用接口现有数据填充,例如可能为计价货币(quoteCurrency)单位的成交量。 |
参考
备注
exchange.GetRecords()函数返回Record数组或空数组。每个Record结构代表一根K线柱。
对于Python语言,不同版本的pandas包处理方式可能不同,例如:
python
pandas.DataFrame(records) // 可能需要调整为:pandas.DataFrame(list(records))
相关报错信息:in getattr KeyError: 'dtype'。
Order
订单结构。
属性
| 名称 | 类型 | 描述 |
Info | object | 交易所接口返回的原始数据,回测时无此属性。 |
Symbol | string |
|
Id | string | 订单ID,该属性由交易所品种代码和交易所原始订单ID组成,以英文逗号分隔。例如OKX交易所的现货交易对 |
Price | number | 下单价格,注意市价单的该属性可能为0或-1。 |
Amount | number | 下单数量,注意市价单的该属性可能为金额而非币数。 |
DealAmount | number | 成交数量,如果交易所接口不提供该数据,则可能使用0填充。 |
AvgPrice | number | 成交均价,注意部分交易所不提供该数据。不提供且无法计算得出的情况下,该属性设置为0。 |
Status | number | 订单状态,参考 |
Type | number | 订单类型,参考 |
Offset | number | 合约订单的开平仓方向,参考 |
ContractType | string | 现货订单中该属性为 |
Condition | object | 条件单配置信息。当订单为条件单时,该字段包含条件单的触发条件和执行价格配置。普通订单该字段为空值。 该字段的结构参考 |
Time | number | 订单创建时间,毫秒级时间戳。 |
参考
备注
Order订单结构可由exchange.GetOrder()、exchange.GetOrders()函数返回。exchange.GetOrders()函数返回Order结构的数组或空数组,如果当前没有未完成的订单,则返回[]即空数组。Order订单结构的Status属性可以直接与ORDER_STATE_PENDING等常量比较,判断是否相等从而确定订单状态。
对于单向持仓模式,当无法判断订单是否为平仓(减仓)时,Offset字段默认设置为开仓方向,即ORDER_OFFSET_OPEN。
Time字段表示订单创建时间,为毫秒级时间戳。部分交易所可能在Info字段中也包含时间信息,但Time字段统一提供标准化的时间戳格式。
Condition
条件单配置信息结构,用于设置条件单的触发条件和执行价格。
属性
| 名称 | 类型 | 描述 |
ConditionType | number | 条件单类型,可选值:
|
TpTriggerPrice | number | 止盈触发价格。当条件单类型为TP或OCO时使用,当市场价格达到该价格时触发止盈订单。 |
TpOrderPrice | number | 止盈订单执行价格,即止盈触发后的实际下单价格。价格为-1时表示以市价单执行。 |
SlTriggerPrice | number | 止损触发价格。当条件单类型为SL或OCO时使用,当市场价格达到该价格时触发止损订单。 |
SlOrderPrice | number | 止损订单执行价格,即止损触发后的实际下单价格。价格为-1时表示以市价单执行。 |
参考
备注
- OCO订单(ConditionType=
ORDER_CONDITION_TYPE_OCO)同时设置止盈和止损条件,当其中一个条件触发时,另一个自动取消。 - TP订单(ConditionType=
ORDER_CONDITION_TYPE_TP)仅使用TpTriggerPrice和TpOrderPrice字段。 - SL订单(ConditionType=
ORDER_CONDITION_TYPE_SL)仅使用SlTriggerPrice和SlOrderPrice字段。 - GENERIC订单(ConditionType=
ORDER_CONDITION_TYPE_GENERIC)为通用条件单,具体使用的字段取决于交易所的实现。
条件单功能的支持情况取决于具体交易所,部分交易所可能不支持某些类型的条件单。
C++语言中Condition结构的特殊使用方式:
在C++策略中,Condition结构需要使用OrderCondition结构体类型,而非JSON对象。
JavaScript/Python示例(使用对象/字典):
javascript
var condition = {
ConditionType: ORDER_CONDITION_TYPE_TP,
TpTriggerPrice: 65000,
TpOrderPrice: 65000
}
C++示例(使用OrderCondition结构体):
c++
OrderCondition condition = {.ConditionType = ORDER_CONDITION_TYPE_TP, .TpTriggerPrice = 65000, .TpOrderPrice = 65000};
注意:在C++中不应使用json condition = R"({...})"_json;的JSON字符串方式,应直接使用OrderCondition结构体的初始化语法。
OrderBook
市场深度中的订单结构。
属性
| 名称 | 类型 | 描述 |
Price | number | 订单价格。 |
Amount | number | 订单数量。 |
参考
备注
exchange.GetDepth()函数返回的数据结构中,Bids和Asks的属性值为OrderBook数组。
Depth
市场深度数据结构。
属性
| 名称 | 类型 | 描述 |
Asks | array | 卖单数组,即 OrderBook 数组,按价格从低到高排序,数组中第一个 OrderBook 结构的价格最低。 |
Bids | array | 买单数组,即 OrderBook 数组,按价格从高到低排序,数组中第一个 OrderBook 结构的价格最高。 |
Time | number | 毫秒级时间戳。 |
参考
备注
exchange.GetDepth() 函数返回一个 Depth 结构。
Account
账户信息的数据结构。
属性
| 名称 | 类型 | 描述 |
Info | object | 交易所接口返回的原始数据,回测模式下此属性不存在。 |
Balance | number | 可用的计价币数量。现货交易中,如果交易对为BTC_USDT,Balance表示当前可用的USDT数量。U本位合约中,Balance表示可用保证金(USDT,quoteCurrency)的数量。 |
FrozenBalance | number | 订单未成交时冻结的资产数值。 |
Stocks | number | 可用交易币数量。现货交易中,如果交易对为BTC_USDT,Stocks表示当前可用的BTC数量。币本位合约中,Stocks表示可用保证金(币,baseCurrency)的数量。 |
FrozenStocks | number | 订单未成交时冻结的资产数值。 |
Equity | number | 仅期货交易所对象支持此字段。 |
UPnL | number | 仅期货交易所对象支持此字段。 |
参考
备注
exchange.GetAccount()函数返回一个Account结构。返回结构中的数据依赖于当前设置的交易对和合约代码。
Asset
具体币种资产信息的数据结构。
属性
| 名称 | 类型 | 描述 |
Currency | string | 交易所定义的币种资产名称。由于不同交易所的命名规则可能存在差异,同一币种在不同交易所可能使用不同的标识符,例如 |
Amount | number | 币种资产的可用余额数量。 |
FrozenAmount | number | 币种资产的冻结数量。 |
参考
备注
币种资产的冻结数量FrozenAmount通常包含未成交订单锁定的资产以及期货持仓所需的保证金部分。
Position
合约仓位信息的数据结构。
属性
| 名称 | 类型 | 描述 |
Info | object | 交易所接口返回的原始数据,回测模式下此属性不存在。 |
Symbol | string |
|
MarginLevel | number | 持仓杠杆倍数,如果交易所接口未提供该数据则通过计算填充,可能存在误差。 |
Amount | number | 持仓数量,通常为正整数(合约张数)。注意各交易所的合约乘数、价值等合约规格可能存在差异。 |
FrozenAmount | number | 仓位冻结数量,平仓订单未成交时的临时冻结仓位数量。 |
Price | number | 持仓均价,原则上该属性为仓位整体的平均价格(不参与结算),如果交易所接口未提供该数据则使用交易所接口现有的持仓均价填充(参与结算)。 |
Profit | number | 持仓浮动盈亏,原则上为持仓的未实现盈亏,如果交易所接口未提供该数据则使用交易所接口其他盈亏数据填充,盈亏数值的单位与当前合约保证金的单位相同。 |
Type | number | |
ContractType | string | 合约代码,具体内容请参考 |
Margin | number | 仓位占用的保证金,如果交易所接口未提供该数据则使用0填充。 |
参考
备注
exchange.GetPositions()函数返回一个Position数组或空数组。
对于加密货币期货需要注意,exchange.GetPositions()函数返回的Position结构数组中,持仓数据结构的FrozenAmount、Profit、Margin属性由于交易所提供的数据并不统一,不同交易所对象调用exchange.GetPositions()接口时返回数据的定义可能存在差异。
例如,某些交易所持仓数据中无仓位冻结数据,此时FrozenAmount为0。如需计算特定数据,可使用Info属性中的原始数据进行计算分析。
Market
交易品种市场信息的数据结构。
属性
| 名称 | 类型 | 描述 |
Symbol | string | 取值例如: |
BaseAsset | string | 取值例如: |
QuoteAsset | string | 取值例如: |
TickSize | number | 取值例如: |
AmountSize | number | 取值例如: |
PricePrecision | number | 取值例如: |
AmountPrecision | number | 取值例如: |
MinQty | number | 取值例如: |
MaxQty | number | 取值例如: |
MinNotional | number | 取值例如: |
MaxNotional | number | 取值例如: |
CtVal | number |
|
CtValCcy | number |
|
Info | object |
|
参考
备注
exchange.GetMarkets()函数返回包含此Market结构的字典。
由于各个交易所对于市场信息数据支持程度不同,对于交易所不支持的字段会被忽略。以上各个字段数据取值均来自于交易所接口原始数据,具体也可以查询Info字段内容。
Funding
交易品种资金费率信息的数据结构,仅加密货币永续合约支持资金费率功能。
属性
| 名称 | 类型 | 描述 |
Info | object | 加密货币期货交易所资金费率接口调用时返回的原始数据对象。 |
Symbol | string |
|
Interval | number | 资金费率结算间隔周期,单位:毫秒。例如 |
Time | number | 下一期资金费率开始时刻(当期结算时刻)的时间戳,单位:毫秒。 |
Rate | number | 当期结算时将要应用的资金费率数值。 |
参考
备注
不同期货交易所的永续合约资金费率采用不同的计算方法和机制,结算周期包括1小时、4小时、8小时、24小时等。
期货交易所永续合约的当期资金费率可能为固定值,也可能为实时计算的浮动值。
Rate字段为不带%符号的资金费率数值,如需转换为百分比形式,可将数值乘以100并添加%符号。
OtherStruct
HttpQuery-options
此JSON结构用于配置HttpQuery函数和HttpQuery_Go函数发送HTTP请求的各项参数。
属性
| 名称 | 类型 | 描述 |
method | string | HTTP请求方法,例如: |
body | string | 请求体内容。例如在POST请求中,body可以包含表单数据、JSON数据、文本等。 |
charset | string | 字符集编码。用于指定请求体中文本数据的编码方式,例如: |
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
HttpQuery-return
此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": "..."
}
LogStatus-table
此JSON结构用于配置策略状态栏中显示的表格内容。
属性
| 名称 | 类型 | 描述 |
type | string | 用于设置要解析显示的UI控件类型,对于状态栏表格固定设置为: |
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) + "`")
}
LogStatus-btnTypeOne
该JSON结构用于配置状态栏中的按钮控件,按钮控件JSON结构可以嵌入到状态栏表格JSON结构中。此结构为旧版本结构,平台目前仍然兼容,建议使用最新版本的按钮JSON结构。
状态栏按钮控件构造示例(按钮触发点击后,弹框中包含单个输入控件,通过input字段构造):
json
{
"type": "button",
"cmd": "open",
"name": "开仓",
"input": {
"name": "开仓数量",
"type": "number",
"defValue": 1
}
}
状态栏按钮控件点击触发后的弹框中的控件通过input或group字段设置。
属性
| 名称 | 类型 | 描述 |
type | string | 对于按钮控件,固定设置为: |
class | string | 按钮类型设置。 |
name | string | 按钮控件上显示的文本,即按钮名称。 |
cmd | string | 按钮控件触发点击操作时,发送给策略的交互命令内容。 |
description | string | 按钮控件的描述信息。当鼠标悬停在状态栏中该按钮上时显示此描述信息。 |
disabled | bool | 设置按钮为禁用(true)或启用(false)。 |
input | JSON | 在构造状态栏按钮进行交互时支持输入数据,交互指令最终由
上述JSON结构中各字段描述:
对于下拉框类型控件的扩展字段:
|
group | array |
|
参考
备注
状态栏中按钮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)
}
}
LogStatus-btnTypeTwo
此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,
}
}],
}
状态栏按钮控件点击触发后的弹框中的控件通过input或group字段设置。
属性
| 名称 | 类型 | 描述 |
type | string | 对于按钮控件,此字段固定设置为: |
name | string | 按钮控件上显示的文本,即按钮名称。 |
cmd | string | 按钮控件触发点击操作时,发送给策略的交互命令内容。 |
input | JSON | 在构造状态栏按钮进行交互时也支持输入数据,交互指令最终由
以上JSON结构中各字段的描述和说明:
|
group | array |
|
参考
备注
支持双语设置:
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}]
}
}
Chart-options
此JSON用于配置自定义绘图函数Chart()的图表设置信息,图表库使用Highcharts。以下列出几个基本的配置字段。
属性
| 名称 | 类型 | 描述 |
__isStock | string | 平台扩展字段。设置为true时使用Highstocks图表;设置为false时使用Highcharts图表。 |
extension | JSON |
|
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)
}
}
KLineChart-options
此JSON用于设置自定义绘图函数KLineChart的图表配置信息。以下仅列出几个基本的配置字段。
属性
| 名称 | 类型 | 描述 |
overlay | bool | 是否绘制在主图上。 |
xAxis | JSON | X轴配置参数。 |
yAxis | JSON | Y轴配置参数。 |
candle | JSON | 蜡烛图配置参数。 |
参考
备注
SetData-data
该JSON用于设置exchange.SetData()函数所要加载的数据。该JSON数据采用数组结构,其中每个元素也是一个数组,格式为[time, data]。
属性
| 名称 | 类型 | 描述 |
time | number | 数据的时间戳,用于标记该条数据(data)对应的时间。 |
data | string / number / bool / object / array / any (平台支持的任意类型) | data是 |
参考
备注
回测系统中加载数据,策略回测运行时取出数据的示例:
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)
}
}
EventLoop-return
该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
}
DBExec-return
该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]
]
}
Thread.join-return
该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}
}