证券管理

构建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)

判断是否为右开区间,即未指定结束时间

is_valid_ktype(self, ktype)

判断指定的K线类型是否有效

参数:

ktype (KType) -- K线类型

返回:

是否有效

返回类型:

bool

static is_base_ktype(ktype)

判断指定的K线类型是否为基础K线类型

参数:

ktype (KType) -- K线类型

返回:

是否为基础K线类型

返回类型:

bool

static is_extra_ktype(ktype)

判断指定的K线类型是否为扩展K线类型

参数:

ktype (KType) -- K线类型

返回:

是否为扩展K线类型

返回类型:

bool

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)

初始化

参数:
  • baseInfoParam (Parameter) -- 基础信息数据驱动参数

  • blockParam (Parameter) -- 板块信息数据驱动参数

  • kdataParam (Parameter) -- K线数据驱动参数

  • preloadParam (Parameter) -- 预加载参数

  • hkuParam (Parameter) -- 其他hikyuu参数

get_base_info_parameter(self)
返回:

基础信息数据驱动参数

返回类型:

Parameter

get_block_parameter(self)
返回:

板块信息数据驱动参数

返回类型:

Parameter

get_kdata_parameter(self)
返回:

K线数据驱动参数

返回类型:

Parameter

get_preload_parameter(self)
返回:

预加载参数

返回类型:

Parameter

get_hikyuu_parameter(self)
返回:

其他hikyuu参数

返回类型:

Parameter

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)

获取市场简称列表

返回类型:

StringList

get_market_info(self, market)

获取相应的市场信息

参数:

market (string) -- 指定的市场标识(市场简称)

返回:

相应的市场信息,如果相应的市场信息不存在,则返回Null<MarketInfo>()

返回类型:

MarketInfo

get_stock_type_info(self, stk_type)

获取相应的证券类型详细信息

参数:

stk_type (int) -- 证券类型,参见: constant

返回:

对应的证券类型信息,如果不存在,则返回Null<StockTypeInfo>()

返回类型:

StockTypeInfo

get_stock_type_list(self)

获取所有证券类型详细信息

返回:

所有证券类型详细信息

返回类型:

DataFrame

get_stock(self, querystr)

根据"市场简称证券代码"获取对应的证券实例

参数:

querystr (str) -- 格式:“市场简称证券代码”,如"sh000001"

返回:

对应的证券实例,如果实例不存在,则Null<Stock>(),不抛出异常

返回类型:

Stock

__getitem__()

同 get_stock

get_block(self, category, name)

获取预定义的板块

参数:
  • category (str) -- 板块分类

  • name (str) -- 板块名称

返回:

板块,如找不到返回空Block

返回类型:

Block

add_block(self, block)

将新增独立的板块加入到数据库系统中。注意,如 block 发生变化,需要调用 save_block 进行保存。

参数:

block (Block) -- 新增的板块

remove_block(self, block)

从数据库系统中删除板块

参数:

block (Block) -- 要删除的板块

get_block_list(self[, category])

获取指定分类的板块列表

参数:

category (str) -- 板块分类

返回:

板块列表

返回类型:

BlockList

get_block_list_by_index_stock(self, index_stk)

获取指定指数的板块列表

参数:

index_stk (Stock) -- 指数

返回:

板块列表

返回类型:

BlockList

get_trading_calendar(self, query[, market='SH'])

获取指定市场的交易日日历

参数:
  • query (Query) -- Query查询条件

  • market (str) -- 市场简称

返回:

日期列表

返回类型:

DatetimeList

is_holiday(self, d)

判断时间对应日期是否为节假日(仅使用A股市场)

参数:

d (Datetime) -- 指定的时间

返回类型:

bool

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

返回类型:

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 : 获取证券名称
type

获取证券类型,参见:constant

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_kdata(self, query)

获取K线数据

参数:

query (Query) -- 查询条件

返回:

满足查询条件的K线数据

返回类型:

KData

get_count(self[, ktype=Query.DAY])

获取不同类型K线数据量

参数:

ktype (Query.KType) -- K线数据类别

返回:

K线记录数

返回类型:

int

get_market_value(self, date, ktype)

获取指定时刻的市值,即小于等于指定时刻的最后一条记录的收盘价

参数:
返回:

指定时刻的市值

返回类型:

float

get_krecord(self, pos[, ktype=Query.DAY])

获取指定索引的K线数据记录,未作越界检查

参数:
  • datetime (int pos | Datetime) -- 指定的索引位置,或日期

  • ktype (Query.KType) -- K线数据类别

返回:

K线记录

返回类型:

KRecord

get_krecord_list(self, start, end, ktype)

获取K线记录 [start, end),一般不直接使用,用getKData替代

参数:
  • start (int) -- 起始位置

  • end (int) -- 结束位置

  • ktype (Query.KType) -- K线类别

返回:

K线记录列表

返回类型:

KRecordList

get_datetime_list(self, query)

获取日期列表

参数:

query (Query) -- 查询条件

返回类型:

DatetimeList

get_timeline_list(self, query)

获取分时线数据

参数:

query (Query) -- 查询条件(查询条件中的K线类型、复权类型参数此时无用)

返回类型:

TimeLineList

get_trans_list(self, query)

获取历史分笔数据

参数:

query (Query) -- 查询条件(查询条件中的K线类型、复权类型参数此时无用)

返回类型:

TransList

get_weight(self[, start, end])

获取指定时间段[start,end)内的权息信息。未指定起始、结束时刻时,获取全部权息记录。

参数:
返回类型:

StockWeightList

get_finance_info(self)

获取当前财务信息

返回类型:

Parameter

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线类别

realtime_update(self, krecord)

(临时函数)只用于更新内存缓存中的日线数据

参数:

krecord (KRecord) -- 新增的实时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>(),不抛出异常

返回类型:

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)

包含的证券数量

__getitem__(self, market_code)

根据"市场简称证券代码"获取对应的证券实例

参数:

querystr (str) -- 格式:“市场简称证券代码”,如"sh000001"

返回:

对应的证券实例,如果实例不存在,则Null<Stock>(),不抛出异常

返回类型:

Stock

其它证券信息定义

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线数据最后交易日期