输入/搜索内容
内置函数
结构体
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
内置变量

市场成交记录的数据结构。

属性

名称类型描述

Id

string

市场成交记录的唯一标识符,若交易所接口未提供Id则使用时间戳填充。

Time

number

毫秒级时间戳。

Price

number

成交价格。

Amount

number

成交数量。

Type

number

订单类型,参考ORDER_TYPE_BUYORDER_TYPE_SELL

参考

备注

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

市场行情数据结构。

属性

名称类型描述

Info

object

交易所接口返回的原始数据,回测时不包含此属性。

Symbol

string

Symbol字段为FMZ平台定义的交易品种代码。

  • 对于现货交易所对象,Symbol字段值的格式为(示例):BTC_USDT,表示BTC_USDT现货交易对。

  • 对于期货交易所对象,Symbol字段值的格式为(示例):BTC_USDT.swap,表示BTC的USDT本位永续合约。

  • 对于期货交易所对象(期权相关功能也封装在期货交易所对象中),Symbol字段值的格式为(示例):BTC_USDT.BTC-240108-40000-C,表示BTC的USDT本位期权合约,行权日期为2024年1月8日,行权价格为40000的看涨期权合约。

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结构字段BuySell为0时会触发错误提示。

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'

订单结构。

属性

名称类型描述

Info

object

交易所接口返回的原始数据,回测时无此属性。

Symbol

string

Symbol字段为FMZ平台定义的交易品种代码,格式与Ticker结构的Symbol字段一致。

  • 对于现货交易所对象,Symbol字段值的格式(示例)为:BTC_USDT,表示BTC_USDT现货交易对。

  • 对于期货交易所对象,Symbol字段值的格式(示例)为:BTC_USDT.swap,表示BTC的USDT本位永续合约。

Id

string

订单ID,该属性由交易所品种代码和交易所原始订单ID组成,以英文逗号分隔。例如OKX交易所的现货交易对ETH_USDT订单的属性Id格式为:ETH-USDT,1547130415509278720

Price

number

下单价格,注意市价单的该属性可能为0或-1。

Amount

number

下单数量,注意市价单的该属性可能为金额而非币数。

DealAmount

number

成交数量,如果交易所接口不提供该数据,则可能使用0填充。

AvgPrice

number

成交均价,注意部分交易所不提供该数据。不提供且无法计算得出的情况下,该属性设置为0。

Status

number

订单状态,参考ORDER_STATE_PENDINGORDER_STATE_CLOSEDORDER_STATE_CANCELEDORDER_STATE_UNKNOWN

Type

number

订单类型,参考ORDER_TYPE_BUYORDER_TYPE_SELL

Offset

number

合约订单的开平仓方向,参考ORDER_OFFSET_OPENORDER_OFFSET_CLOSE

ContractType

string

现货订单中该属性为"",即空字符串。合约订单中该属性为具体的合约代码。

Condition

object

条件单配置信息。当订单为条件单时,该字段包含条件单的触发条件和执行价格配置。普通订单该字段为空值。

该字段的结构参考Condition结构。

Time

number

订单创建时间,毫秒级时间戳。

参考

备注

Order订单结构可由exchange.GetOrder()exchange.GetOrders()函数返回。exchange.GetOrders()函数返回Order结构的数组或空数组,如果当前没有未完成的订单,则返回[]即空数组。Order订单结构的Status属性可以直接与ORDER_STATE_PENDING等常量比较,判断是否相等从而确定订单状态。

对于单向持仓模式,当无法判断订单是否为平仓(减仓)时,Offset字段默认设置为开仓方向,即ORDER_OFFSET_OPEN

Time字段表示订单创建时间,为毫秒级时间戳。部分交易所可能在Info字段中也包含时间信息,但Time字段统一提供标准化的时间戳格式。

条件单配置信息结构,用于设置条件单的触发条件和执行价格。

属性

名称类型描述

ConditionType

number

条件单类型,可选值:

TpTriggerPrice

number

止盈触发价格。当条件单类型为TP或OCO时使用,当市场价格达到该价格时触发止盈订单。

TpOrderPrice

number

止盈订单执行价格,即止盈触发后的实际下单价格。价格为-1时表示以市价单执行。

SlTriggerPrice

number

止损触发价格。当条件单类型为SL或OCO时使用,当市场价格达到该价格时触发止损订单。

SlOrderPrice

number

止损订单执行价格,即止损触发后的实际下单价格。价格为-1时表示以市价单执行。

参考

备注

条件单功能的支持情况取决于具体交易所,部分交易所可能不支持某些类型的条件单。

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结构体的初始化语法。

市场深度中的订单结构。

属性

名称类型描述

Price

number

订单价格。

Amount

number

订单数量。

参考

备注

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

市场深度数据结构。

属性

名称类型描述

Asks

array

卖单数组,即 OrderBook 数组,按价格从低到高排序,数组中第一个 OrderBook 结构的价格最低。

Bids

array

买单数组,即 OrderBook 数组,按价格从高到低排序,数组中第一个 OrderBook 结构的价格最高。

Time

number

毫秒级时间戳。

参考

备注

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

账户信息的数据结构。

属性

名称类型描述

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

仅期货交易所对象支持此字段。Equity字段表示当前合约设置下期货账户保证金的总权益。如果交易所接口未提供相关数据,则此字段值为0。

UPnL

number

仅期货交易所对象支持此字段。UPnL字段表示当前合约设置下期货账户保证金中所有开仓仓位的未实现盈亏总和。

参考

备注

exchange.GetAccount()函数返回一个Account结构。返回结构中的数据依赖于当前设置的交易对和合约代码。

具体币种资产信息的数据结构。

属性

名称类型描述

Currency

string

交易所定义的币种资产名称。由于不同交易所的命名规则可能存在差异,同一币种在不同交易所可能使用不同的标识符,例如BTC在某些交易所可能被标识为XBT

Amount

number

币种资产的可用余额数量。

FrozenAmount

number

币种资产的冻结数量。

参考

备注

币种资产的冻结数量FrozenAmount通常包含未成交订单锁定的资产以及期货持仓所需的保证金部分。

合约仓位信息的数据结构。

属性

名称类型描述

Info

object

交易所接口返回的原始数据,回测模式下此属性不存在。

Symbol

string

Symbol字段为FMZ平台定义的交易品种代码,格式与Ticker结构的Symbol字段保持一致。

  • 对于现货交易所对象,Symbol字段值的格式(示例)为:BTC_USDT,表示BTC_USDT现货交易对。

  • 对于期货交易所对象,Symbol字段值的格式(示例)为:BTC_USDT.swap,表示BTC的USDT本位永续合约。

MarginLevel

number

持仓杠杆倍数,如果交易所接口未提供该数据则通过计算填充,可能存在误差。

Amount

number

持仓数量,通常为正整数(合约张数)。注意各交易所的合约乘数、价值等合约规格可能存在差异。

FrozenAmount

number

仓位冻结数量,平仓订单未成交时的临时冻结仓位数量。

Price

number

持仓均价,原则上该属性为仓位整体的平均价格(不参与结算),如果交易所接口未提供该数据则使用交易所接口现有的持仓均价填充(参与结算)。

Profit

number

持仓浮动盈亏,原则上为持仓的未实现盈亏,如果交易所接口未提供该数据则使用交易所接口其他盈亏数据填充,盈亏数值的单位与当前合约保证金的单位相同。

Type

number

仓位类型,参考PD_LONGPD_SHORT

ContractType

string

合约代码,具体内容请参考exchange.SetContractType函数的描述。

Margin

number

仓位占用的保证金,如果交易所接口未提供该数据则使用0填充。

参考

备注

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

对于加密货币期货需要注意,exchange.GetPositions()函数返回的Position结构数组中,持仓数据结构的FrozenAmount、Profit、Margin属性由于交易所提供的数据并不统一,不同交易所对象调用exchange.GetPositions()接口时返回数据的定义可能存在差异。

例如,某些交易所持仓数据中无仓位冻结数据,此时FrozenAmount为0。如需计算特定数据,可使用Info属性中的原始数据进行计算分析。

交易品种市场信息的数据结构。

属性

名称类型描述

Symbol

string

取值例如:"btcusdt"Symbol字段记录该交易品种在交易所的原始名称。需要注意该属性的格式、定义与Ticker结构的Symbol字段不同。

BaseAsset

string

取值例如:"BTC"BaseAsset字段记录交易币名称(即:baseCurrency),统一为大写字母。

QuoteAsset

string

取值例如:"USDT"QuoteAsset字段记录计价币名称(即:quoteCurrency),统一为大写字母。

TickSize

number

取值例如:0.01TickSize字段记录该交易品种在交易所的价格最小变动单位。

AmountSize

number

取值例如:0.01AmountSize字段记录该交易品种在交易所的下单量最小变动单位。

PricePrecision

number

取值例如:2PricePrecision字段记录该交易品种在交易所的价格精度,表示价格精确到2位小数。

AmountPrecision

number

取值例如:3AmountPrecision字段记录该交易品种在交易所的下单量精度,表示下单量精确到3位小数。

MinQty

number

取值例如:0.001MinQty字段记录该交易品种在交易所的最小下单量。

MaxQty

number

取值例如:1000MaxQty字段记录该交易品种在交易所的最大下单量。

MinNotional

number

取值例如:5MinNotional字段记录该交易品种在交易所的最小下单金额。

MaxNotional

number

取值例如:9999999MaxNotional字段记录该交易品种在交易所的最大下单金额。

CtVal

number

CtVal字段记录该交易品种在交易所的单张合约对应的价值,单位为CtValCcy字段记录的币种。例如:CtVal为0.01,CtValCcy"BTC"表示单张合约价值0.01个BTC。

CtValCcy

number

CtValCcy字段记录单张合约的价值单位,单张合约的价值单位可能是:BTCUSDETH等。

Info

object

Info字段记录交易所市场信息接口返回的该品种的原始数据。

参考

备注

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

由于各个交易所对于市场信息数据支持程度不同,对于交易所不支持的字段会被忽略。以上各个字段数据取值均来自于交易所接口原始数据,具体也可以查询Info字段内容。

交易品种资金费率信息的数据结构,仅加密货币永续合约支持资金费率功能。

属性

名称类型描述

Info

object

加密货币期货交易所资金费率接口调用时返回的原始数据对象。

Symbol

string

Symbol字段为FMZ平台定义的标准化交易品种代码。

Interval

number

资金费率结算间隔周期,单位:毫秒。例如28800000表示8小时间隔。

Time

number

下一期资金费率开始时刻(当期结算时刻)的时间戳,单位:毫秒。

Rate

number

当期结算时将要应用的资金费率数值。

参考

备注

不同期货交易所的永续合约资金费率采用不同的计算方法和机制,结算周期包括1小时、4小时、8小时、24小时等。

期货交易所永续合约的当期资金费率可能为固定值,也可能为实时计算的浮动值。

Rate字段为不带%符号的资金费率数值,如需转换为百分比形式,可将数值乘以100并添加%符号。

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