%matplotlib inline
%time from hikyuu.interactive import *
#use_draw_engine('echarts') #use_draw_engine('matplotlib') #默认为'matplotlib'绘图
warning: can't import TA-Lib, will be ignored! You can fetch ta-lib from https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib std::cout are redirected to python::stdout std::cerr are redirected to python::stderr 2023-10-14 02:22:16.847 [HKU-I] - Using SQLITE3 BaseInfoDriver (BaseInfoDriver.cpp:58) 2023-10-14 02:22:16.848 [HKU-I] - Loading market information... (StockManager.cpp:499) 2023-10-14 02:22:16.848 [HKU-I] - Loading stock type information... (StockManager.cpp:512) 2023-10-14 02:22:16.848 [HKU-I] - Loading stock information... (StockManager.cpp:426) 2023-10-14 02:22:16.899 [HKU-I] - Loading stock weight... (StockManager.cpp:529) 2023-10-14 02:22:17.250 [HKU-I] - Loading KData... (StockManager.cpp:134) 2023-10-14 02:22:17.254 [HKU-I] - Preloading all day kdata to buffer! (StockManager.cpp:157) 2023-10-14 02:22:17.254 [HKU-I] - Preloading all week kdata to buffer! (StockManager.cpp:160) 2023-10-14 02:22:17.254 [HKU-I] - Preloading all month kdata to buffer! (StockManager.cpp:163) 2023-10-14 02:22:17.267 [HKU-I] - 0.02s Loaded Data. (StockManager.cpp:145) Wall time: 1.08 s
查询并绘制上证指数最后100个交易日的K线数据
s = sm['sh000001']
k = s.get_kdata(Query(-100))
k.plot()
K线数据可以象list一样遍历和查看具体值
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) }
#查看最后5个交易日的K线值
k[-5:]
[KRecord(Datetime(202310090000), 3100.0000, 3103.3600, 3072.6400, 3096.9200, 30266215.6000, 2644222.0000), KRecord(Datetime(202310100000), 3104.3700, 3109.9800, 3073.1900, 3075.2400, 29365328.3000, 2553273.0000), KRecord(Datetime(202310110000), 3085.7000, 3095.6600, 3071.9400, 3078.9600, 32656238.2000, 2599187.0000), KRecord(Datetime(202310120000), 3101.7100, 3109.9900, 3092.1800, 3107.9000, 32586589.8000, 2748280.0000), KRecord(Datetime(202310130000), 3092.0000, 3094.9200, 3080.5500, 3088.1000, 30953809.5000, 2550852.0000)]
#遍历查询最大收盘价
max_close = 0
for v in k:
if v.close > max_close:
max_close = v.close
print(max_close)
3297.32
K线数据(KData)其实是有KRecord组成的数组,KRecord的属性如下:
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)
日期 - 2023-05-17 00:00:00 开盘价 - 3281.9700000000003 最高价 - 3298.52 最低价 - 3269.89 收盘价 - 3284.23 成交金额 - 34048265.4 成交量 - 2857440.0
获取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 等比后向复权
#查询股票前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))
按日期查询同样遵循 [start, end) 惯例。
日期类型为Hikyuu库中定义的 Datetime,其记录的是“年月日时分”。可使用Python的datetime类型、日期字符串或数字表示法进行构建:
#查询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()
s = sm['sz000603']
#查询股票最后100个交易日K线数据,不复权
k = s.get_kdata(Query(-100))
k.plot()
#查询股票最后100个交易日K线数据,后向复权
k = s.get_kdata(Query(-100, recover_type=Query.BACKWARD))
k.plot()