输入/搜索内容
内置函数
Global
Log
Market
exchange.GetTicker
exchange.GetTickers
exchange.GetDepth
exchange.GetTrades
exchange.GetRecords
exchange.GetMarkets
exchange.GetRawJSON
exchange.SetData
exchange.GetData
Trade
Account
Futures
Exchange
IO
Network
Storage
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)

示例

  • 获取1小时K线,读取最早一根和最新两根K线。

    javascript
    function main() { var records = exchange.GetRecords(PERIOD_H1) if (!records || records.length < 2) return // 获取失败时为null // records[0]是最早的一根,最后一个元素是最新的一根 Log("最早一根 Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High) Log("最新", records[records.length - 1], "上一根", records[records.length - 2]) // 输出:最新 {"Time":...,"Open":...,"High":...,"Low":...,"Close":...,"Volume":...,...} 上一根 {...} }
    python
    def main(): records = exchange.GetRecords(PERIOD_H1) if not records or len(records) < 2: return Log("最早一根 Time:", records[0]["Time"], "Open:", records[0]["Open"], "High:", records[0]["High"]) Log("最新", records[-1], "上一根", records[-2]) # 输出:最新 {"Time":...,"Open":...,"High":...,"Low":...,"Close":...,"Volume":...,...} 上一根 {...}
    rust
    fn main() { let Ok(records) = exchange.GetRecords(None, PERIOD_H1, None) else { return }; let n = records.len(); if n < 2 { return; } Log!("最早一根 Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High); Log!("最新", records[n - 1], "上一根", records[n - 2]); }
  • 获取自定义周期的 K 线数据。

    javascript
    function main() { // 打印 K 线周期为 120 秒(2 分钟)的 K 线数据 Log(exchange.GetRecords(60 * 2)) // 打印 K 线周期为 5 分钟的 K 线数据 Log(exchange.GetRecords(PERIOD_M5)) }
    python
    def main(): Log(exchange.GetRecords(60 * 2)) Log(exchange.GetRecords(PERIOD_M5))
    rust
    fn main() { // 打印 K 线周期为 120 秒(2 分钟)的 K 线数据 Log!(exchange.GetRecords(None, 60 * 2, None)); // 打印 K 线周期为 5 分钟的 K 线数据 Log!(exchange.GetRecords(None, PERIOD_M5, None)); }
  • 当配置的exchange对象为期货交易所对象时,可使用symbol、period、limit参数请求指定品种(期货品种)的K线数据。

    javascript
    function main() { var records = exchange.GetRecords("BTC_USDT.swap", 60, 100) Log(records) }
    python
    def main(): records = exchange.GetRecords("BTC_USDT.swap", 60, 100) Log(records)
    rust
    fn main() { let records = exchange.GetRecords("BTC_USDT.swap", 60, 100).unwrap(); Log!(records); }

返回值

类型描述

Record数组 / 空值

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

参数

名称类型必填描述

symbol

string

否

品种代码,例如现货交易所对象上的BTC_USDT、期货交易所对象上的BTC_USDT.swap,写法(含期权)见品种代码。不传时请求当前交易对、合约代码的K线数据。

period

number

否

所请求K线数据的周期,例如:PERIOD_M1、PERIOD_M5、PERIOD_M15等;参数period除了可以传入已定义的标准周期外,还可以传入整数数值,单位为秒。若不传该参数,则默认请求的K线数据周期为当前策略实盘/回测所配置的默认K线周期。

limit

number

否

所请求K线数据的长度,若不传该参数,则默认请求长度为exchange.SetMaxBarLen()函数设置的K线长度(未设置时为200);该参数可能会触发对交易所K线数据的分页查询,分页查询时该函数的调用耗时会相应增加。

参考

备注

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

返回值为Record结构数组。返回的K线数据会随时间不断累积,累积的K线柱数量上限受exchange.SetMaxBarLen()函数设置的影响,未设置时默认上限为200个K线柱(本次调用传入的limit更大时,以limit为上限)。当K线数据达到累积上限后,每新增一根K线柱的同时会删除时间最早的一根K线柱(类似队列的先进先出)。部分交易所未提供K线接口,此时由托管者实时收集市场成交记录数据(Trade结构数组)来合成K线。

如果交易所的K线接口支持分页查询,当调用exchange.SetMaxBarLen()函数设置较大的K线长度时,系统会发起多次API请求。

初始调用exchange.GetRecords()函数时,所获取的K线柱数量在回测和实盘环境下有所不同:

  • 回测系统会预先获取回测时间范围起始时刻之前一定数量的K线柱(默认为5000个,回测系统的相关设置及数据量会影响最终返回的数量),作为初始K线数据。

  • 实盘时首次获取limit个K线柱(未传limit时为exchange.SetMaxBarLen()设置的长度,默认200),超过交易所K线接口单次可获取的数量时会分页请求。

将period参数设置为5,即表示请求获取以5秒为周期的K线数据。如果period参数不能被60整除(即所代表的周期无法以分钟为单位表示),系统底层会使用exchange.GetTrades()的相关接口获取成交记录数据,以合成所需的K线数据;如果period参数能被60整除,则最小使用1分钟K线数据(并尽可能使用较大的周期)来合成所需的K线数据。

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

不支持的交易所:Pendle、Web3。调用时报错并返回空值,所有交易所的对照见能力矩阵。

以回退方式支持的交易所:交易所的接口不能完整提供本函数,由托管者补足。

交易所没有对应接口,由托管者实现:

  • BitFlyer、Coincheck、Zaif、Futures_Polymarket:交易所没有K线接口,由托管者用成交记录合成:首次调用只有最近成交覆盖的少量K线,随调用逐步累积。
  • Futures_Aevo:交易所没有K线接口,由托管者用成交记录合成:首次调用只有最近成交覆盖的少量K线,随调用逐步累积。合约没有成交时为空。

部分周期由托管者合成:

  • Backpack、Futures_Backpack、Futures_Binance、Futures_ApolloX、Futures_Aster:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、8小时、12小时、1天、3天、1周、1月;其它周期由托管者合成。
  • BigONE:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、3小时、4小时、6小时、12小时、1天、1周、1月;其它周期由托管者合成。
  • Binance、Aster:原生周期为1秒、1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、8小时、12小时、1天、3天、1周、1月;其它周期由托管者合成。
  • Bitfinex、Futures_Bitfinex:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、3小时、6小时、12小时、1天、1周、14天、1月;其它周期由托管者合成。
  • Bitget:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、4小时、6小时、12小时、1天、3天、1周、1月;其它周期由托管者合成。3分钟只在统一账户(v3)可用。
  • Futures_Bitget:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、4小时、6小时、12小时、1天、3天、1周、1月;其它周期由托管者合成。统一账户(v3)的币本位交割合约没有3天周期。
  • Bithumb:原生周期为1分钟、3分钟、5分钟、10分钟、15分钟、30分钟、1小时、4小时、1天、1周、1月;其它周期由托管者合成。
  • Bitstamp:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、12小时、1天、3天;其它周期由托管者合成。
  • Bybit:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、12小时、1天、1周、1月;其它周期由托管者合成。
  • Futures_Bybit:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、12小时、1天、1周、1月;其它周期由托管者合成。期权没有K线接口,由托管者用成交记录合成。
  • Coinone:原生周期为1分钟、3分钟、5分钟、10分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、1天、1周、1月;其它周期由托管者合成。
  • Coinw:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、1天、1周;其它周期由托管者合成。
  • Futures_Coinw:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、4小时、1天、1周、1月;其它周期由托管者合成。单次最多返回300根。
  • Crypto、Futures_Crypto:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、12小时、1天、1周、14天、1月;其它周期由托管者合成。
  • DeepCoin、Futures_DeepCoin:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、12小时、1天、1周、1月、1年;其它周期由托管者合成。
  • Futures_Deribit:原生周期为1分钟、3分钟、5分钟、10分钟、15分钟、30分钟、1小时、2小时、3小时、6小时、12小时、1天;其它周期由托管者合成。
  • DigiFinex、Futures_DigiFinex、Futures_Kraken、Futures_WEEX、Futures_Lighter:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、12小时、1天、1周;其它周期由托管者合成。
  • GateIO:原生周期为10秒、1分钟、5分钟、15分钟、30分钟、1小时、4小时、8小时、1天、1周、1月;其它周期由托管者合成。
  • Futures_GateIO:原生周期为10秒、30秒、1分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、8小时、12小时、1天、1周、1月;其它周期由托管者合成。
  • Gemini:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、6小时、1天;其它周期由托管者合成。
  • HashKey:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、8小时、12小时、1天、1周、1月;其它周期由托管者合成。
  • HitBTC:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、4小时、1天、1周、1月;其它周期由托管者合成。
  • Huobi:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、1天、1周、1月、1年;其它周期由托管者合成。
  • Futures_HuobiDM、MEXC:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、1天、1周、1月;其它周期由托管者合成。
  • Korbit:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、1天、1周;其它周期由托管者合成。
  • Kraken:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、1天、1周、15天;其它周期由托管者合成。
  • KuCoin:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、8小时、12小时、1天、1周;其它周期由托管者合成。
  • Futures_KuCoin:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、8小时、12小时、1天、1周;其它周期由托管者合成。
  • LBank:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、8小时、12小时、1天、1周、1月;其它周期由托管者合成。
  • Futures_MEXC:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、8小时、1天、1周、1月;其它周期由托管者合成。
  • OKEX、Futures_OKCoin、OKX_DEX:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、12小时、1天、3天、1周、1月、3月;其它周期由托管者合成。
  • Poloniex:原生周期为1分钟、5分钟、10分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、12小时、1天、3天、1周、1月;其它周期由托管者合成。
  • Upbit:原生周期为1秒、1分钟、3分钟、5分钟、10分钟、15分钟、30分钟、1小时、4小时、1天、1周、1月、1年;其它周期由托管者合成。
  • WEEX:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、8小时、12小时、1天、1周;其它周期由托管者合成。
  • WOO:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、12小时、1天、1周、1月;其它周期由托管者合成。
  • Futures_WOO:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、12小时、1天、1周、1月、1年;其它周期由托管者合成。
  • Hyperliquid:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、8小时、12小时、1天、3天、1周、1月;其它周期由托管者合成。
  • Futures_Hyperliquid:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、8小时、12小时、1天、3天、1周;其它周期由托管者合成。Outcome品种没有K线。
  • Futures_EdgeX:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、8小时、12小时、1天、1周、1月;其它60秒整数倍的周期由托管者用原生K线合成,其余周期(如秒级)不可用(交易所没有成交接口)。
  • Futures_dYdX:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、1天;其它周期由托管者合成。
  • Futures_WOOFi:原生周期为1分钟、5分钟、15分钟、30分钟、1小时、4小时、12小时、1天、1周、1月、1年;其它周期由托管者合成。单次最多返回1000根。
  • Uniswap、PancakeSwap、Aerodrome、Velodrome:原生周期为1分钟、5分钟、15分钟、1小时、4小时、12小时、1天(GeckoTerminal的周期);其它周期由托管者合成:分钟级以上的周期由原生周期合并,秒级周期由exchange.GetTrades()的链上成交逐笔累积(首次调用只有最近约10分钟成交覆盖的那几根,之后随每次调用累积;还没有成交时报错并说明原因,取成交失败时报错带上失败原因)。
  • KyberSwap、OneInch、Jupiter:原生周期为1分钟、5分钟、15分钟、1小时、4小时、12小时、1天(GeckoTerminal的周期);其它分钟级以上的周期由托管者合成,秒级周期不可用(没有成交记录接口可供合成)。
  • Futures_Futu:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、1天、1周、1月;其它周期由托管者合成。
  • Futures_IB:原生周期为1分钟、3分钟、5分钟、15分钟、30分钟、1小时、2小时、4小时、6小时、1天、1周;其它60秒整数倍的周期由托管者用原生K线合成,其余周期(如秒级)不可用(本交易所对象不支持exchange.GetTrades())。
  • Exchange:网关的records只接受1分钟、3分钟、5分钟、15分钟、30分钟、1小时、1天周期,其它周期由托管者合成;不支持指定起始时间。