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)示例
-
获取自定义周期的 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)); }c++void main() { Log(exchange.GetRecords(60 * 2)[0]); Log(exchange.GetRecords(PERIOD_M5)[0]); } -
输出 K 线柱数据:
javascriptfunction main() { var records = exchange.GetRecords(PERIOD_H1) /* 可能由于网络原因,无法访问交易所接口(即使托管者程序所在设备能够打开交易所网站,API 接口仍可能无法访问) 此时 records 为 null,访问 records[0].Time 时会导致错误。因此在测试该代码时,请确保能够正常访问交易所接口 */ Log("First K-line data: Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High) Log("Second K-line data: Time:", records[1].Time ,"Close:", records[1].Close) Log("Current K-line (latest)", records[records.length-1], "Previous K-line", records[records.length-2]) }pythondef main(): records = exchange.GetRecords(PERIOD_H1) Log("First K-line data: Time:", records[0]["Time"], "Open:", records[0]["Open"], "High:", records[0]["High"]) Log("Second K-line data: Time:", records[1]["Time"], "Close:", records[1]["Close"]) Log("Current K-line (latest)", records[-1], "Previous K-line", records[-2])rustfn main() { let records = exchange.GetRecords(None, PERIOD_H1, None).unwrap(); Log!("First K-line data: Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High); Log!("Second K-line data: Time:", records[1].Time, "Close:", records[1].Close); Log!("Current K-line (latest)", records[records.len() - 1], "Previous K-line", records[records.len() - 2]); }c++void main() { auto records = exchange.GetRecords(PERIOD_H1); Log("First K-line data: Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High); Log("Second K-line data: Time:", records[1].Time, "Close:", records[1].Close); Log("Current K-line (latest)", records[records.size() - 1], "Previous K-line", records[records.size() - 2]); } -
当配置的
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); }c++void main() { auto records = exchange.GetRecords("BTC_USDT.swap", 60, 100); Log(records); }
返回值
| 类型 | 描述 |
|
|
参数
| 名称 | 类型 | 必填 | 描述 |
symbol | string | 否 | 参数 当调用 当调用 当调用 |
period | number | 否 | 参数 |
limit | number | 否 | 参数 |
参考
备注
默认K线周期可在回测、实盘页面进行设置。调用exchange.GetRecords()函数时,如果指定了参数,则获取该参数所指定周期的K线数据;如果未指定参数,则返回回测、实盘参数中所设置周期的K线数据。
返回值为Record结构数组。返回的K线数据会随时间不断累积,累积的K线柱数量上限受exchange.SetMaxBarLen()函数设置的影响,未设置时默认上限为5000个K线柱。当K线数据达到累积上限后,每新增一根K线柱的同时会删除时间最早的一根K线柱(类似队列的先进先出)。部分交易所未提供K线接口,此时由托管者实时收集市场成交记录数据(Trade结构数组)来合成K线。
如果交易所的K线接口支持分页查询,当调用exchange.SetMaxBarLen()函数设置较大的K线长度时,系统会发起多次API请求。
初始调用exchange.GetRecords()函数时,所获取的K线柱数量在回测和实盘环境下有所不同:
-
回测系统会预先获取回测时间范围起始时刻之前一定数量的K线柱(默认为5000个,回测系统的相关设置及数据量会影响最终返回的数量),作为初始K线数据。
-
实盘时具体获取的K线柱数量取决于交易所K线接口所能提供的最大数据量。
将period参数设置为5,即表示请求获取以5秒为周期的K线数据。如果period参数不能被60整除(即所代表的周期无法以分钟为单位表示),系统底层会使用exchange.GetTrades()的相关接口获取成交记录数据,以合成所需的K线数据;如果period参数能被60整除,则最小使用1分钟K线数据(并尽可能使用较大的周期)来合成所需的K线数据。
在回测系统的模拟级别回测中,由于需要设置底层K线周期(模拟级别回测时,系统会根据设置的底层K线周期,使用对应的K线数据生成Tick数据),因此需要注意:策略中获取的K线数据周期不能小于底层K线周期。这是因为在模拟级别回测中,各个周期的K线数据均由底层K线周期对应的K线数据合成而来。
C++语言中如果需要自行构造K线数据,可参考以下代码范例:
c++
#include <sstream>
void main() {
Records r;
r.Valid = true;
for (auto i = 0; i < 10; i++) {
Record ele;
ele.Time = i * 100000;
ele.High = i * 10000;
ele.Low = i * 1000;
ele.Close = i * 100;
ele.Open = i * 10;
ele.Volume = i * 1;
r.push_back(ele);
}
// 输出显示:Records[10]
Log(r);
auto ma = TA.MA(r,10);
// 输出显示:[nan,nan,nan,nan,nan,nan,nan,nan,nan,450]
Log(ma);
}
不支持exchange.GetRecords()函数的交易所:
| 函数名 | 不支持的现货交易所 | 不支持的期货交易所 |
|---|---|---|
| GetRecords | Zaif / Coincheck / BitFlyer | Futures_Aevo |