输入/搜索内容
内置函数
Global
Log
Market
exchange.GetTicker
exchange.GetDepth
exchange.GetTrades
exchange.GetRecords
exchange.GetPeriod
exchange.SetMaxBarLen
exchange.GetRate
exchange.SetData
exchange.GetData
exchange.GetMarkets
exchange.GetTickers
Trade
Account
Futures
Threads
TA
Talib
OS
结构体
内置变量

获取当前设置的交易对、合约代码所对应的Record结构数组,即K线数据。

exchange.GetRecords()
exchange.GetRecords(symbol)
exchange.GetRecords(symbol, period)
exchange.GetRecords(symbol, period, limit)
exchange.GetRecords(period)
exchange.GetRecords(period, limit)

示例

  • 对于 exchange.GetRecords(Period) 函数,商品期货的实盘与回测均支持自定义周期,参数 Period 的单位为秒。

    javascript
    function main() { // 由于是测试代码,未采用商品期货策略的通用架构,这里仅通过 exchange.IO("status") 函数判断是否成功连接期货公司前置机,连接成功后立即执行测试代码。股票证券无需使用 exchange.IO("status") 判断连接状态 while(!exchange.IO("status")) { Sleep(1000) } Log(exchange.SetContractType("rb888")) // 打印周期为 120 秒(2 分钟)的 K 线数据 Log(exchange.GetRecords(60 * 2)) // 打印周期为 5 分钟的 K 线数据 Log(exchange.GetRecords(PERIOD_M5)) }
    python
    def main(): while not exchange.IO("status"): Sleep(1000) Log(exchange.SetContractType("rb888")) Log(exchange.GetRecords(60 * 2)) Log(exchange.GetRecords(PERIOD_M5))
    rust
    fn main() { // 由于是测试代码,未采用商品期货策略的通用架构,这里仅通过 exchange.IO("status") 函数判断是否成功连接期货公司前置机,连接成功后立即执行测试代码。股票证券无需使用 exchange.IO("status") 判断连接状态 while !exchange.IO("status").is_ok_and(|v| v.as_i64() == Some(1)) { Sleep(1000); } Log!(exchange.SetContractType("rb888")); // 打印周期为 120 秒(2 分钟)的 K 线数据 Log!(exchange.GetRecords(None, 60 * 2, None)); // 打印周期为 5 分钟的 K 线数据 Log!(exchange.GetRecords(None, PERIOD_M5, None)); }
  • 输出 K 线柱数据:

    javascript
    function main(){ // 由于这是测试代码,未采用商品期货策略的通用架构,此处仅通过 exchange.IO("status") 函数判断,在成功连接期货公司前置机后立即执行测试代码。股票、证券无需使用 exchange.IO("status") 判断连接状态 while(!exchange.IO("status")) { Sleep(1000) } Log(exchange.SetContractType("rb888")) var records = exchange.GetRecords(PERIOD_H1) Log("第一根 K 线数据为,Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High) Log("第二根 K 线数据为,Time:", records[1].Time ,"Close:", records[1].Close) Log("当前 K 线(最新)", records[records.length-1], "上一根 K 线", records[records.length-2]) }
    python
    def main(): while not exchange.IO("status"): Sleep(1000) Log(exchange.SetContractType("rb888")) records = exchange.GetRecords(PERIOD_H1) Log("第一根 K 线数据为,Time:", records[0]["Time"], "Open:", records[0]["Open"], "High:", records[0]["High"]) Log("第二根 K 线数据为,Time:", records[1]["Time"], "Close:", records[1]["Close"]) Log("当前 K 线(最新)", records[-1], "上一根 K 线", records[-2])
    rust
    fn main() { // 由于这是测试代码,未采用商品期货策略的通用架构,此处仅通过 exchange.IO("status") 函数判断,在成功连接期货公司前置机后立即执行测试代码。股票、证券无需使用 exchange.IO("status") 判断连接状态 while !exchange.IO("status").is_ok_and(|v| v.as_i64() == Some(1)) { Sleep(1000); } Log!(exchange.SetContractType("rb888")); let records = exchange.GetRecords(None, PERIOD_H1, None).unwrap(); Log!("第一根 K 线数据为,Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High); Log!("第二根 K 线数据为,Time:", records[1].Time, "Close:", records[1].Close); Log!("当前 K 线(最新)", records[records.len() - 1], "上一根 K 线", records[records.len() - 2]); }
  • 通过指定具体的合约代码请求K线数据:

    javascript
    function main() { while(!exchange.IO("status")) { Sleep(1000) } var records = exchange.GetRecords("rb888") Log("当前K线(最新)", records[records.length - 1]) }
    python
    def main(): while not exchange.IO("status"): Sleep(1000) records = exchange.GetRecords("rb888") Log("当前K线(最新)", records[-1])
    rust
    fn main() { while !exchange.IO("status").is_ok_and(|v| v.as_i64() == Some(1)) { Sleep(1000); } let records = exchange.GetRecords("rb888", None, None).unwrap(); Log!("当前K线(最新)", records[records.len() - 1]); }

返回值

类型描述

Record数组 / 空值

成功时返回Record结构数组;失败时返回空值。

参数

名称类型必填描述

symbol

string

否

所请求的Record数组数据对应的合约代码。若不传该参数,则默认请求当前设置的合约代码的K线数据。

period

number

否

所请求K线数据的周期,例如:PERIOD_M1、PERIOD_M5、PERIOD_M15等。参数period的值除了可以传入预定义的标准周期外,还可以传入整数数值,单位为秒。

limit

string

否

所请求K线数据的长度。

参考

备注

默认K线周期可在回测、实盘页面进行设置。如果在调用exchange.GetRecords()函数时指定了参数,则获取的是该参数指定周期对应的K线数据;如果调用时未指定参数,则按照回测、实盘参数中设置的K线周期返回对应的K线数据。

返回值为Record结构数组,返回的K线数据会随时间累积,累积的K线柱数量上限受exchange.SetMaxBarLen()函数设置的影响,未设置时默认上限为5000个K线柱。当K线数据达到累积上限后,之后每更新加入一根K线柱的同时会删除时间最早的一根K线柱(类似队列的先进先出)。

初始调用GetRecords函数时获取的K线柱数量:

  • 回测系统中会预先取回回测周期起始时刻之前的1000根K线柱,作为初始K线数据。

参数period设置为5,即表示请求获取以5秒为周期的K线数据。

如果period参数不能被60整除(即所代表的周期不是以分钟为单位的周期),系统底层则使用tick数据合成所需的K线数据。

如果period参数能被60整除,则最小使用1分钟K线数据(尽可能使用较大的周期)来合成所需的K线数据。

股票证券:

  • 富途证券
    在K线周期为日线周期以下时,调用GetRecords()函数返回的数据中,数组的每个元素为一根K线柱数据(即Record结构体),每根K线柱数据结构的Time属性为该周期的结束时间(毫秒级时间戳),而非起始时间(毫秒级时间戳)。
    在K线周期为日线周期时,Record结构体的Time属性为该周期的起始时间(毫秒级时间戳)。

在回测系统的模拟级别回测中,由于需要设置底层K线周期(回测系统进行模拟级别回测时,会根据设置的底层K线周期使用对应的K线数据生成Tick数据),因此需要注意:策略中获取的K线数据周期不能小于底层K线周期。因为在模拟级别回测中,各个周期的K线数据在回测系统中都是通过底层K线周期对应的K线数据合成的。