证券管理
构建K线查询条件
- class hikyuu.Query
K线数据查询条件,一般在Python中使用 Query 即可,不用指明 Query。
简化
Query.KType枚举值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分钟线类型
简化
Query.RecoverType枚举值Query.NO_RECOVER - 不复权
Query.FORWARD - 前向复权
Query.BACKWARD - 后向复权
Query.EQUAL_FORWARD - 等比前向复权
Query.EQUAL_BACKWARD - 等比后向复权
- start
起始索引,当按日期查询方式创建时无效,为 constant.null_int64
- end
结束索引,当按日期查询方式创建时无效,为 constant.null_int64
- start_datetime
起始日期,当按索引查询方式创建时无效,为 constant.null_datetime
- end_datetime
结束日期,当按索引查询方式创建时无效,为 constant.null_datetime
- query_type
查询方式
- ktype
查询的K线类型
- recover_type
查询的复权类型
- QueryType
查询方式定义
DATE - 按日期方式查询
INDEX - 按索引方式查询
- KType
K线类型枚举定义
DAY - 日线类型
WEEK - 周线类型
MONTH - 月线类型
QUARTER - 季线类型
HALFYEAR - 半年线类型
YEAR - 年线类型
MIN - 1分钟线类型
MIN5 - 5分钟线类型
MIN15 - 15分钟线类型
MIN30 - 30分钟线类型
MIN60 - 60分钟线类型
- RecoverType
K线复权类别枚举定义
NO_RECOVER - 不复权
FORWARD - 前向复权
BACKWARD - 后向复权
EQUAL_FORWARD - 等比前向复权
EQUAL_BACKWARD - 等比后向复权
- is_right_opening(self)
判断是否为右开区间,即未指定结束时间
- static get_base_ktype_list()
获取所有基础K线类型
- 返回:
基础K线类型列表
- 返回类型:
list[Query.KType]
- static get_extra_ktype_list()
获取所有扩展K线类型
- 返回:
扩展K线类型列表
- 返回类型:
list[Query.KType]
- static get_ktype_in_min(ktype)
获取指定K线类型对应的分钟数
- 返回类型:
int
StockManager/Block/Stock
- class hikyuu.StockManager
证券信息管理类
- static instance()
获取StockManager单例实例
- init(self, baseInfoParam, blockParam, kdataParam, preloadParam, hkuParam)
初始化
- get_context(self)
- 返回:
获取当前上下文
- 返回类型:
StrategyContext
- reload(self)
重新加载所有证券数据
- reload_with(self, context)
带策略上下文参数的重新加载,如果 context 中证券列表为空,将沿用原有 context
- 参数:
context (StrategyContext) -- 策略上下文
- tmpdir(self)
获取用于保存零时变量等的临时目录,如未配置则为当前目录 由 m_config 中的"tmpdir"指定
- datadir(self)
获取财务数据目录
- get_market_list(self)
获取市场简称列表
- 返回类型:
- get_market_info(self, market)
获取相应的市场信息
- 参数:
market (string) -- 指定的市场标识(市场简称)
- 返回:
相应的市场信息,如果相应的市场信息不存在,则返回Null<MarketInfo>()
- 返回类型:
- get_stock_type_info(self, stk_type)
获取相应的证券类型详细信息
- 参数:
stk_type (int) -- 证券类型,参见:
constant- 返回:
对应的证券类型信息,如果不存在,则返回Null<StockTypeInfo>()
- 返回类型:
- get_stock_type_list(self)
获取所有证券类型详细信息
- 返回:
所有证券类型详细信息
- 返回类型:
DataFrame
- get_stock(self, querystr)
根据"市场简称证券代码"获取对应的证券实例
- 参数:
querystr (str) -- 格式:“市场简称证券代码”,如"sh000001"
- 返回:
对应的证券实例,如果实例不存在,则Null<Stock>(),不抛出异常
- 返回类型:
- __getitem__()
同 get_stock
- get_block(self, category, name)
获取预定义的板块
- 参数:
category (str) -- 板块分类
name (str) -- 板块名称
- 返回:
板块,如找不到返回空Block
- 返回类型:
- add_block(self, block)
将新增独立的板块加入到数据库系统中。注意,如 block 发生变化,需要调用 save_block 进行保存。
- 参数:
block (Block) -- 新增的板块
- get_block_list_by_index_stock(self, index_stk)
获取指定指数的板块列表
- get_trading_calendar(self, query[, market='SH'])
获取指定市场的交易日日历
- 参数:
query (Query) -- Query查询条件
market (str) -- 市场简称
- 返回:
日期列表
- 返回类型:
- is_trading_hours(self, d: Datetime, market: str)
判断指定时间对应的日期是否为交易时间
- 参数:
d (Datetime) -- 待判断的时间
market (str) -- 市场简称
- 返回:
是否为交易时间
- 返回类型:
bool
- add_temp_csv_stock(self, code, day_filename, min_filename[, tick=0.01, tick_value=0.01, precision=2, min_trade_num=1, max_trade_num=1000000])
从CSV文件(K线数据)增加临时的Stock,可用于只有CSV格式的K线数据时,进行临时测试。
添加的 stock 对应的 market 为 "TMP", 如需通过 sm 获取,需加入 tmp,如:sm['tmp0001']
CSV文件第一行为标题,需含有 Datetime(或Date、日期)、OPEN(或开盘价)、HIGH(或最高价)、LOW(或最低价)、CLOSE(或收盘价)、AMOUNT(或成交金额)、VOLUME(或VOL、COUNT、成交量)。
- 参数:
code (str) -- 自行编号的证券代码,不能和已有的Stock相同,否则将返回Null<Stock>。
day_filename (str) -- 日线CSV文件名
min_filename (str) -- 分钟线CSV文件名
tick (float) -- 最小跳动量,默认0.01
tick_value (float) -- 最小跳动量价值,默认0.01
precision (int) -- 价格精度,默认2
min_trade_num (int) -- 单笔最小交易量,默认1
min_trade_num -- 单笔最大交易量,默认1000000
- 返回:
加入的Stock
- 返回类型:
- remove_temp_csv_stock(self, code)
移除增加的临时Stock
- 参数:
code (str) -- 创建时自定义的编码
- add_stock(self, stock)
谨慎调用!!!仅供增加某些临时的外部 Stock, 通常配合 Stock.set_krecord_list 方法直接使用外部来源的数据
- 参数:
stock (Stock) -- sm 外部自行创建的 Stock
- remove_stock(self, market_code)
从 sm 中移除 market_code 代表的证券,谨慎使用!!!通常用于移除临时增加的外部 Stock
- 参数:
market_code (str) -- 证券市场标识
- get_history_finance_all_fields(self)
获取所有历史财务信息字段及其索引
- get_history_finance_field_index(self, name)
根据字段名称,获取历史财务信息相应字段索引
- get_history_finance_field_name(self, index)
根据字段索引,获取历史财务信息相应字段名
- class hikyuu.Stock
证券对象
- id : 内部id,一般用于作为map的键值使用
- market : 获取所属市场简称,市场简称是市场的唯一标识
- code : 获取证券代码
- market_code : 市场简称+证券代码,如: sh000001
- name : 获取证券名称
- valid : 该证券当前是否有效
- start_datetime : 证券起始日期
- last_datetime : 证券最后日期
- tick : 最小跳动量
- tick_value : 最小跳动量价值
- unit : 每单位价值 = tickValue / tick
- precision : 价格精度
- atom : 最小交易数量,同minTradeNumber
- min_trade_number : 最小交易数量
- max_trade_number : 最大交易数量
- is_null(self)
是否为Null
- 返回类型:
bool
- get_count(self[, ktype=Query.DAY])
获取不同类型K线数据量
- 参数:
ktype (Query.KType) -- K线数据类别
- 返回:
K线记录数
- 返回类型:
int
- get_market_value(self, date, ktype)
获取指定时刻的市值,即小于等于指定时刻的最后一条记录的收盘价
- 参数:
date (Datetime) -- 指定时刻
ktype (Query.KType) -- K线数据类别
- 返回:
指定时刻的市值
- 返回类型:
float
- get_krecord(self, pos[, ktype=Query.DAY])
获取指定索引的K线数据记录,未作越界检查
- 参数:
datetime (int pos | Datetime) -- 指定的索引位置,或日期
ktype (Query.KType) -- K线数据类别
- 返回:
K线记录
- 返回类型:
- get_krecord_list(self, start, end, ktype)
获取K线记录 [start, end),一般不直接使用,用getKData替代
- 参数:
start (int) -- 起始位置
end (int) -- 结束位置
ktype (Query.KType) -- K线类别
- 返回:
K线记录列表
- 返回类型:
- get_trans_list(self, query)
获取历史分笔数据
- get_weight(self[, start, end])
获取指定时间段[start,end)内的权息信息。未指定起始、结束时刻时,获取全部权息记录。
- 参数:
- 返回类型:
- get_history_finance(self)
获取所有历史财务信息列表,字段信息可参考 StockManager 中的相关方法: get_history_finance_all_fields/get_history_finance_field_index/get_history_finance_field_name 方法
日常建议直接使用指标 FINANCE 获取财务数据
- 参数:
date (Datetime) -- 指定日期必须是0331、0630、0930、1231,如 Datetime(201109300000)
- 返回类型:
list
- set_krecord_list(self, krecord_list[, ktype=Query.DAY])
谨慎调用!!!直接设置当前内存 KRecordList, 仅供需临时增加的外部 Stock 设置 K 线数据 如果数据格式为 pandas.DataFrame, 可以使用 set_kdata_from_df 方法。
- 参数:
krecord_list (sequence) -- 一个可迭代变量获取 KRecord 实例的对象,如: list (仅包含 KRecord 实例)
ktype (Query.KType) -- K线类别
- set_kdata_from_df(self, df, cols[, ktype=Query.DAY])
谨慎调用!!!直接设置当前内存数据,意味着 Stock 的基础数据变更。 从 DataFrame 中获取 KRecordList, 并设置给当前Stock。df, 必须按顺序指定列名,默认为: ("datetime", "open", "high", "low", "close", "amount", "volume"))")
import baostock as bs import pandas as pd lg = bs.login() rs = bs.query_history_k_data_plus("sh.600246", "date,code,open,high,low,close,volume,amount,adjustflag", start_date='2020-01-01', end_date='2025-12-31') print('query_history_k_data_plus respond error_code:'+rs.error_code) print('query_history_k_data_plus respond error_msg:'+rs.error_msg) #### 打印结果集 #### data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) print(result) result['datetime'] = pd.to_datetime(result['date']) print(result) stock = Stock('TMP', '600246', 'test') stock.set_kdata_from_df(result) print(stock)
- 参数:
df (DataFrame) -- 输入数据
cols (list) -- 列名
ktype (Query.KType) -- K线类别
- load_kdata_to_buffer(self, ktype)
将指定类别的K线数据加载至内存缓存
- 参数:
ktype (Query.KType) -- K线类型
- release_kdata_buffer(self, ktype)
释放指定类别的内存K线数据
- 参数:
ktype (Query.KType) -- K线类型
- get_belong_to_block_list(self[, category=None])
获取所属板块列表
- 参数:
category (str) -- 指定的板块分类,为 None 时,返回所有板块分类下的所属板块
- 返回类型:
list
- class hikyuu.Block
板块类,可视为证券的容器
- category : 板块分类
- name : 板块名称
- index_stock: 对应指数(可能为空 Stock)
- __init__(self, category, name):
构建一个新的板块实例,并指定其板块分类及板块名称
- 参数:
category (str) -- 板块分类
name (srt) -- 板块名称
- __init__(self, block):
通过其他板块实例构建新的板块实例
- 参数:
block (Block) -- 板块实例
- size(self)
包含的证券数量
- empty(self)
是否为空
- get(self, market_code)
根据"市场简称证券代码"获取对应的证券实例
- 参数:
querystr (str) -- 格式:“市场简称证券代码”,如"sh000001"
- 返回:
对应的证券实例,如果实例不存在,则Null<Stock>(),不抛出异常
- 返回类型:
- add(self, stock)
加入指定的证券
- 参数:
stock (Stock) -- 待加入的证券
- 返回:
是否成功加入
- 返回类型:
bool
add(self, market_code)
根据"市场简称证券代码"加入指定的证券
- 参数:
market_code (str) -- 市场简称证券代码
- 返回:
是否成功加入
- 返回类型:
bool
- remove(self, stock)
移除指定证券
- 参数:
stock (Stock) -- 指定的证券
- 返回:
是否成功
- 返回类型:
bool
remove(self, market_code)
移除指定证券
- 参数:
market_code (str) -- 市场简称证券代码
- 返回:
是否成功
- 返回类型:
bool
- clear(self)
移除包含的所有证券
- __len__(self)
包含的证券数量
其它证券信息定义
- class hikyuu.StockTypeInfo
股票类型详情记录
- type : 证券类型
- description : 描述信息
- tick : 最小跳动量
- tick_value : 每一个tick价格
- unit : 每最小变动量价格,即单位价格 = tickValue/tick
- precision : 价格精度
- min_trade_num : 每笔最小交易量
- max_trade_num : 每笔最大交易量
- class hikyuu.StockWeight
权息记录
- datetime : 权息日期
- count_as_gift : 每10股送X股
- count_for_sell : 每10股配X股
- price_for_sell : 配股价
- bonus : 每10股红利
- increasement : 每10股转增X股
- total_count : 总股本(万股)
- free_count : 流通股(万股)
- class hikyuu.StockWeightList
std::vector<StockWeight> 包装,见
StockWeight- to_numpy(self)
转为 numpy 数组
- to_pandas(self)
转为 pandas DataFrame
- to_pyarrow(self)
转为 pyarrow Table
- class hikyuu.MarketInfo
市场信息记录
- market : 市场简称(如:沪市“SH”, 深市“SZ”)
- name : 市场全称
- description :描述说明
- code : 该市场对应的主要指数,用于获取交易日历
- last_datetime : 该市场K线数据最后交易日期