In [1]:
%matplotlib inline
%time from hikyuu.interactive import *
#use_draw_engine('echarts') #use_draw_engine('matplotlib')  #默认为'matplotlib'绘图
std::cout are redirected to python::stdout
std::cerr are redirected to python::stderr
2020-08-05 23:38:20.593 [HKU-I] - Loading market information... [loadBaseInfo]
2020-08-05 23:38:20.595 [HKU-I] - Loading stock type information... [loadBaseInfo]
2020-08-05 23:38:20.595 [HKU-I] - Loading stock information... [loadBaseInfo]
2020-08-05 23:38:20.868 [HKU-I] - Loading KData... [init]
2020-08-05 23:38:20.896 [HKU-I] - Preloading all day kdata to buffer! [setKDataDriver]
2020-08-05 23:38:26.099 [HKU-I] - 5.23s Loaded Data. [init]
CPU times: user 5.6 s, sys: 362 ms, total: 5.97 s
Wall time: 5.96 s

1 简单示例

查询并绘制上证指数最后100个交易日的K线数据

In [2]:
s = sm['sh000001']
k = s.get_kdata(Query(-100))  
k.plot()

2 查看与遍历K线数据

K线数据可以象list一样遍历和查看具体值

In [3]:
s = sm['sh000001']
k = s.get_kdata(Query(-100))  
print(k)
KData{
  size : 100
  stock: Stock(SH, 000001, 上证指数, 指数, 1, 1990-12-19 00:00:00, +infinity),
  query: KQuery(-100, 9223372036854775807, INDEX, DAY, NO_RECOVER)
}
In [4]:
#查看最后5个交易日的K线值
k[-5:]
Out[4]:
[KRecord(Datetime(202007300000), 3299.5700, 3312.4500, 3282.1600, 3286.8200, 47697398.9000, 3407041.0000),
 KRecord(Datetime(202007310000), 3280.8000, 3333.7900, 3261.6100, 3310.0100, 49577803.7000, 3537589.0000),
 KRecord(Datetime(202008030000), 3332.1800, 3368.1000, 3327.6800, 3367.9700, 57243074.5000, 4074608.0000),
 KRecord(Datetime(202008040000), 3376.4400, 3391.0700, 3352.5000, 3371.6900, 60494217.2000, 4423285.0000),
 KRecord(Datetime(202008050000), 3363.3300, 3383.6400, 3333.8800, 3377.5600, 52651504.4000, 3858230.0000)]
In [5]:
#遍历查询最大收盘价
max_close = 0
for v in k:
    if v.close > max_close:
        max_close = v.close
print(max_close)
3450.59

K线数据(KData)其实是有KRecord组成的数组,KRecord的属性如下:

In [6]:
print("日期 - ", k[0].datetime)
print("开盘价 - ", k[0].open)
print("最高价 - ", k[0].high)
print("最低价 - ", k[0].low)
print("收盘价 - ", k[0].close)
print("成交金额 - ", k[0].amount)
print("成交量 - ", k[0].volume)
日期 -  2020-03-11 00:00:00
开盘价 -  3001.76
最高价 -  3010.03
最低价 -  2968.52
收盘价 -  2968.52
成交金额 -  37876662.2
成交量 -  3524709.0

3 Query详解

获取Stock的K线数据,需要指定查询条件,可按索引和日期两种方式查询。

构建按索引方式查询条件:Query(start=0, end=None , kType=Query.DAY, recoverType=Query.NO_RECOVER)

构建按日期方式查询条件:QueryByDate(start=None, end=None, kType=Query.DAY, recoverType=Query.NO_RECOVER)

其中,索引遵循Python的惯用方式,即以0位起始,以[start, end)的方式查询,支持负数表示倒叙; 按日期查询同样遵循[start, end)惯例。

kType: 为K线数据类型(日线、分钟线、周线等):

- Query.DAY      日线
- Query.WEEK     周线
- Query.MONTH    月线
- Query.QUARTER  季线
- Query.HALFYEAR 半年线
- Query.YEAR     年线
- Query.MIN      1分钟线
- Query.MIN5     5分钟线
- Query.MIN15    15分钟线
- Query.MIN30    30分钟线
- Query.MIN60    60分钟线

recoverType:为复权类型(不复权、前向复权、后向复权、等比前向复权、等比后向复权),仅支持日线复权:

- Query.NO_RECOVER     不复权
- Query.FORWARD        前向复权
- Query.BACKWARD       后向复权
- Query.EQUAL_FORWARD  等比前向复权
- Query.EQUAL_BACKWARD 等比后向复权

3.1 按索引方式查询K线数据

In [7]:
#查询股票前100个交易日的K线数据
k = s.get_kdata(Query(0, 100))

#查询股票最后100个交易日K线数据
k = s.get_kdata(Query(-100))

#查询股票第199个交易日到第209个交易日的K线数据
k = s.get_kdata(Query(200, 210))

#查询股票倒数第100个交易日至倒数第10个交易日的K线数据
k = s.get_kdata(Query(-100, -10))

3.2 按日期方式查询K线数据

按日期查询同样遵循 [start, end) 惯例。

日期类型为Hikyuu库中定义的 Datetime,其记录的是“年月日时分”。可使用Python的datetime类型、日期字符串或数字表示法进行构建:

  • Datetime(datetime.date(2017,1,1)) - 从Python的datetime构建
  • Datetime('2017-1-1 9:35') - 通过日期字符串构建
  • Datetime(201701010935) - 通过数字进行构建,数字格式须如“yyyymmddhhmm”(4位年份2位月份2位小时数2位分钟数)
In [8]:
#查询2017年1月1日至今的日线数据
k = s.get_kdata(Query(Datetime(201701010000)))

#查询2017年1月1日至3月31日日线数据
k = s.get_kdata(Query(Datetime(201701010000), Datetime(201704010000)))

#查询2017年1月5日1分钟线数据
k = s.get_kdata(Query(Datetime(201701050000), Datetime(201701060000), ktype=Query.MIN))
k.plot()

3.3 查询复权日线

In [9]:
s = sm['sz000603']

#查询股票最后100个交易日K线数据,不复权
k = s.get_kdata(Query(-100))
k.plot()
In [10]:
#查询股票最后100个交易日K线数据,后向复权
k = s.get_kdata(Query(-100, recover_type=Query.BACKWARD))
k.plot()
In [ ]: