exchange.GetRecords
获取当前设置的交易对、合约代码所对应的现货或合约的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线。
javascriptfunction 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":...,...} 上一根 {...} }pythondef 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":...,...} 上一根 {...}rustfn 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 线数据。
javascriptfunction main() { // 打印 K 线周期为 120 秒(2 分钟)的 K 线数据 Log(exchange.GetRecords(60 * 2)) // 打印 K 线周期为 5 分钟的 K 线数据 Log(exchange.GetRecords(PERIOD_M5)) }pythondef main(): Log(exchange.GetRecords(60 * 2)) Log(exchange.GetRecords(PERIOD_M5))rustfn 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线数据。javascriptfunction main() { var records = exchange.GetRecords("BTC_USDT.swap", 60, 100) Log(records) }pythondef main(): records = exchange.GetRecords("BTC_USDT.swap", 60, 100) Log(records)rustfn main() { let records = exchange.GetRecords("BTC_USDT.swap", 60, 100).unwrap(); Log!(records); }
返回值
| 类型 | 描述 |
| 成功时返回 |
参数
| 名称 | 类型 | 必填 | 描述 |
symbol | string | 否 | 品种代码,例如现货交易所对象上的 |
period | number | 否 | 所请求K线数据的周期,例如: |
limit | number | 否 | 所请求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天周期,其它周期由托管者合成;不支持指定起始时间。