资源加载中... loading...

exchange.GetRecords

获取当前设置的交易对、合约代码对应的现货或者合约的{@struct/Record Record}结构数组,即K线数据。

{@struct/Record Record}数组、空值

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

参数```symbol```用于指定请求的{@struct/Record Record}数组数据对应的具体交易对、合约代码。不传该参数时默认请求当前设置的交易对、合约代码的K线数据。 当调用```exchange.GetRecords(symbol)```函数时,```exchange```为现货交易所对象,如果需要请求获取计价币种为USDT,交易币种为BTC的数据。参数```symbol```为:```"BTC_USDT"```,格式为FMZ平台定义的交易对格式。 当调用```exchange.GetRecords(symbol)```函数时,```exchange```为期货交易所对象,如果需要请求获取的是BTC的U本位永续合约的订单薄数据。参数```symbol```为:```"BTC_USDT.swap"```,格式为FMZ平台定义的**交易对**与**合约代码**组合,再以字符"."间隔。 当调用```exchange.GetRecords(symbol)```函数时,```exchange```为期货交易所对象,如果需要请求获取的是BTC的U本位期权合约的订单薄数据。参数```symbol```为:```"BTC_USDT.BTC-240108-40000-C"```(以币安期权BTC-240108-40000-C为例),格式为FMZ平台定义的**交易对**与交易所定义的具体期权合约代码组合,再以字符"."间隔。
symbol
false
string
参数```period```指定请求的K线数据的周期,例如:{@var/PERIOD/PERIOD_M1 PERIOD_M1},{@var/PERIOD/PERIOD_M5 PERIOD_M5},{@var/PERIOD/PERIOD_M15 PERIOD_M15}等;参数```period```的值除了可以传定义的标准周期,还可以传入整数数值,单位为秒。 不传该参数时默认请求的K线数据的周期为当前策略实盘/回测配置的默认K线周期。
period
false
number
参数```limit```用于指定请求的K线数据的长度,不传该参数时默认请求长度为交易所K线接口的单次最大请求K线柱数量;该参数可能会引起分页查询交易所K线数据,分页查询时该函数调用耗时会增加。
limit
false
number

```javascript
function main() {
    // 打印K线周期为120秒(2分钟)的K线数据
    Log(exchange.GetRecords(60 * 2))         
    // 打印K线周期为5分钟的K线数据
    Log(exchange.GetRecords(PERIOD_M5))      
}
def main():
    Log(exchange.GetRecords(60 * 2))
    Log(exchange.GetRecords(PERIOD_M5))
void main() {
    Log(exchange.GetRecords(60 * 2)[0]);
    Log(exchange.GetRecords(PERIOD_M5)[0]);
}

获取自定义周期的K线数据。

function main() {
    var records = exchange.GetRecords(PERIOD_H1)
    /*
        可能由于网络原因,访问不到交易所接口(即使托管者程序所在设备能打开交易所网站,但是API接口也可能访问不通)
        此时records为null,当访问records[0].Time时,会导致错误,所以在测试该代码时,确保可以访问到交易所接口
    */
    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])
}
def main():
    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])
void main() {
    auto 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.size() - 1], "上一根K线", records[records.size() - 2]);
}

输出K线柱数据:

function main() {
    var records = exchange.GetRecords("BTC_USDT.swap", 60, 100)
    Log(records)
}
def main():
    records = exchange.GetRecords("BTC_USDT.swap", 60, 100)
    Log(records)
void main() {
    auto records = exchange.GetRecords("BTC_USDT.swap", 60, 100);
    Log(records);
}

当配置的exchange对象为期货交易所对象时,使用symbolperiodlimit参数请求具体品种(期货品种)的K线数据。

默认K线周期在回测、实盘页面可以设置,如果在调用exchange.GetRecords()函数时指定了参数,获取的就是该参数周期对应的K线数据。 如果函数调用时没有指定参数,则按照回测、实盘参数上设置的K线周期返回对应的K线数据。 返回值为Record结构数组,返回的K线数据会随时间累积,累积K线柱数量的上限受到exchange.SetMaxBarLen()函数设置的影响, 没有设置时默认上限为5000个K线柱。当K线数据到达K线柱累积上限,之后会更新加入一根K线柱的同时删除一根最早时间的K线柱(如队列进出)。 部分交易所没有提供K线接口,则托管者实时收集市场成交记录数据(Trade结构数组)生成K线。 如果交易所的K线接口支持分页查询,当调用exchange.SetMaxBarLen()函数设置一个比较大的K线长度时,会进行多次API请求。 初始调用exchange.GetRecords()函数时,获取的K线柱数量在回测和实盘时有所不同: - 回测系统中会预先获取回测时间范围起始时刻前一定数量的K线柱(默认为5000个,回测系统的设置、数据量会影响最终返回的数量),作为初始K线数据。 - 实盘时具体获取的K线柱数量基于交易所K线接口可获取的最大数据量而定。

回测系统中模拟级别回测由于需要设置底层K线周期(回测系统模拟级别回测时,根据设置的底层K线周期使用对应的K线数据生成Tick数据), 需要注意在策略中获取的K线数据的周期不能小于底层K线周期。因为在模拟级别回测中,各个周期的K线数据在回测系统中都是通过底层K线周期对应的K线数据合成的。
```C++```语言中如果需要自己构造K线数据有以下代码范例:

#include 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®;
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

{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.SetMaxBarLen exchange.SetMaxBarLen}

exchange.GetTrades exchange.GetPeriod