Releases: fasiondog/hikyuu
Releases · fasiondog/hikyuu
2.7.7
🚀 新增特性
- feat(factor): 新增完整的因子管理系统,支持因子的创建、存储、查询和批量计算
- 添加 Factor 类支持因子值存储、复权类型配置和序列化
- 添加 FactorSet 类支持批量管理多个因子,支持索引操作符和迭代器
- 支持获取单个证券或批量证券的因子计算结果
- 支持删除因子值数据功能
- 支持因子公式检查和 align_dates 日期对齐参数
- 支持特殊因子值保存
- 支持 Block 属性进行因子匹配验证
- 支持 FactorSet 作为多因子合成函数的输入参数
- feat(indicator): 新增涨跌停判断指标ISLIMITUP/ISLIMITDOWN支持
- feat(indicator): 重构 MDD/MRR指标实现,添加时间窗口参数支持和增量计算测试
- feat(trade_manage): 新增 getPositionDict 方法用于获取当前全部持仓记录字典
- feat(core): 添加许可证过期提醒功能
- feat(plugin): 添加 AGG_VWAP 指标的 KData 重载版本
- feat(hikyuu): 添加基于策略上下文的初始化函数
- 发布版本支持 python 3.14
⚡️ 优化改进
- refactor(hikyuu/utilities/thread): 优化并行计算
- feat(misc): 添加批量获取账户资金和性能数据的功能
- feat(stock): StockManager 添加互斥锁防止初始化冲突,支持加载扩展指标插件
- feat(agent): 添加多线程控制的互斥锁防止代理启停冲突
🐞 缺陷修复
- fix(trade_sys): crtST和现有接口不符无法使用
- fix(factor): 修复 MultiFactorBase 克隆和序列化中缺失 m_norm 的问题
- feat(HikyuuTdx): 优化板块信息下载,添加超时处理,防止卡死
2.7.5
🚀 新增特性
- feat(indicator): 支持增量计算。如新增 extend 方法,在当前已计算基础上,自动扩展只最新数据并只计算最新数据。主要用于实盘、监控等场景加速。
- 复权增加成交量、成交金额复权
- macosx 下序列化支持
- feat(trade_sys): SE_MFxx 添加多因子选择器的复权方式配置参数(mf_recover_type), 指定MF使用特定的复权方式进行计算
- feat(KData): KData增加 getKData 方法,部分情况下可加速获取
⚡️ 优化改进
- 优化 MF 内存占用过多的问题
- 优化 windows 下数据量超过一定范围后并行计算性能可能出现的剧烈下降
- 优化matplotlib交互模式参数设置问题, 当不在交互式会话中时,显式设置interactive参数为False,防止绘图过慢
- 优化IC实现,使其可以作为普通指标公式使用
- 优化全局并行计算任务
🐞 缺陷修复
- fixed 使用更安全的方式处理python临时对象类型降级问题,防止某些情况崩溃
- fix(hikyuutdx): 初次使用下载时,板块信息下载报错
- fixed(data): 调整科创板/北交所最小交易量配置为 100
- fix(trade_sys): 卖出时通过MM判断卖出数量, 以便分钟级别回测时可以通过MM进行T+1控制
- fix(allocatefunds): 修正资金分配权重计算逻辑, 确保实际分配的权重不超过可分配权重上限,避免超出预设的资金分配限制,提高资金分配的准确性和安全性
- fixed MF_ICWeight, MF_ICIRWeight 使用标准化后的原始因子进行IC/ICIR权重计算
- fix(trade_sys): 修复MultiFactorSelector指标设置后未重置计算状态的问题
- fixed(importdata): 更新后出现KeyError: 'lazy_preload' error
- fix(gui): start_qmt 用Query.get_base_ktype_list()替换Query.get_all_ktype()
- fix(KQuery): 修正TRANS类型的时间转换参数,将g_ktype2sec映射中TRANS类型的值从60243(表示3天)改为3,以确保时间转换逻辑的正确性。
- fix(draw): 优化matplotlib中指标绘制,以便不同周期范围指标能够正确绘制
2.7.3
新增特性
- feat(config): 添加 timeline 和 trans 预加载支持
- feat(StockManager): 添加根据指数获取板块列表功能
- feat(plugin_extind): 添加AGG_VWAP指标支持
🐞 缺陷修复
- fixed(datetime): 优化UTC偏移量计算性能,该问题导致 linux 平台下 clickhouse 数据加载比其他平台慢了10倍
- fixed(python): Python实现的SG等子类在赋值给C++类时可能存在临时变量类型降级的问题,导致 sys.sg = B() 缺失python _clone 实现
- fix(data): 修复本地数据导入时的可能存在结构体解包格式错误
- fix(trade_sys): 修复安全止损指标ST_Saftyloss在调用SAFTYLOSS函数时缺少CLOSE()参数
- feat(_Stock): 为set_kdata_from_df方法添加默认列参数(原和文档说明不符),设置默认的列名参数为["datetime", "open", "high", "low", "close", "amount", "volume"]
2.7.2
🚀 新增特性
- 新增 AF_FixedAmount 等金额资产分配,对选中的资产进行等金额分配
- 添加 lazy_preload 配置选项,预加载日线以下数据时,支持懒加载模式
- 支持无限制预加载K线数据, 当 preload_max_num 设置为小于等于 0 时,表示不对预加载的 K 线数量做限制。
⚡️ 优化改进
- 调整ETF最小交易量默认配置为100
- feat(trade): 支持缩扩股业务处理
- feat(HikyuuTdx): 导入股票交易和时间数据时过滤价格为零的记录
- feat(HikyuuTdx): 改进股票数据导入逻辑并增强错误处理
- feat(hikyuu_cpp): 调整对 reload_time 配置的解析和验证,只有当配置正确时才启用自动重载功能
- 优化预加载加载取消逻辑,避免无效操作
- 优化调整全局变量初始化与清理顺序
- 线程池及 PluginManager 优化
🐞 缺陷修复
- fix(indicator): 优化指标克隆与序列化缓冲区处理, 防止内存泄漏
- fix(trade_sys): crtSG 函数中遗漏将创建的信号指示器对象引入全局的功能
- fix(data): 修复导入股票数据时交易量比较的错误日志输出,py311不支持f-str双引号嵌套
- fix(trade_manage): 增加对缩股的处理逻辑
- fix(mysql): 调整K线数据金额字段精度, KRecord 中的amount保持为万元(原为千元, 和其他存储引擎不一致)
- fix(hikyuu_cpp): 调整ETF、基金和B股的分时数据价格精度
- fix(draw): 解决matplotlib绘制指标时内部缺值或异常时无法绘图的问题
- fix(StrategyContext): 修复 K 线类型去重逻辑中的大小写问题,以便不区分大小写
2.7.1
🚀 新增特性
- 增加数据重载时间配置项, 新增
reload_time配置项,用于指定每日数据重新加载的时间(格式为 HH:MM),默认值为 "00:00。需手工更改或 hikyuu.ini 或在 load 参数中指定 - 添加crtSCFilter函数用于快速创建评分过滤器实例
- 新增 crtNorm 函数用于快速创建标准化/归一化等算法函数
- 取消行业板块数据下载
🐞 缺陷修复
- fixed: 修正 clickhouse 存储 K 线数据中 amount 字段的单位转换问题
- fixed: 限制日期范围以适配 ClickHouse DateTime 类型
- fixed: 修改Stock_Number结构体中的number类型为double,windows下容易出现精度错误
- fixed: 更新盈利目标策略接口参数说明与实现逻辑,移除了部分子类中冗余的
_calculate空实现 - fixed: HikyuuTdx 在导入股票数据时,增加对低价股低点差异的绝对值判断,避免因价格过低导致的相对误差误判。
2.7.0
🚀 新增特性
- 新增 SP系列滑点算法:截断正态分布滑点算法(ST_TruncNormal)、对数分布随机价格滑点算法(ST_LogNormal)、正态分布随机价格滑点算法(ST_Normal)、均匀分布随机价格算法(ST_Uniform)
⚡️ 优化改进
- 主包 hikyuu 去除 arrow 依赖,需要 arrow 相关功能需独立安装 pip install hikyuu-plugin,并手工引入 from hikyuu_plugin.extra import *。使用该方式,也便于自行编译的朋友,使用插件。
- clickhouse 预加载过程中直接读取数据时,保证其读取数据和预加载完成后一致
- 优化KData构造函数中的数据加载逻辑,避免在重加载或设置K线数据列表时出现数据无效的风险。
- 优化板块数据下载
🐞 缺陷修复
- fixed:HikyuuTDX 首次运行时因 use_download 未初始化导致闪退
- fixed:释放预加载K线数据时同时释放已加载的历史财务数据,保证重加载时读取最新的历史财务数据
2.6.9
🚀 新增特性
-
MF多因子评分板支持指定全局因子标准化、对特定因子指定特有标准化和中性化(含行业中性化与风格因子中性化)算法
# 创建两个因子 ma20, ma60 ma20 = MA(CLOSE(), 20) ma20.name = 'MA20' ma60 = MA(CLOSE(), 60) ma60.name = 'MA60' # 指定证券列表 stks = [s for s in blocka] # 指定查询范围,并创建一个等权组合的 MF query = Query(Datetime(20150101), Datetime(20251017)) mf = MF_EqualWeight([ma20, ma60], stks, query, ref_stk=sm["sh000001"]) # 添加全局标准化 mf.set_normalize(NORM_Zscore()) # 为 ma20 添加行业中性化以及市场中性化(即按市值风格因子中性化) mf.add_special_normalize("MA20", NORM_Zscore(), category="行业板块", style_inds=[LOG(CLOSE()*LIUTONGPAN())])
-
增加内置因子标准化算法(NORM_Zscore/NORM_MinMax/NORM_Quantile/NORM_Quantile_Uniform)
-
新增 SE_MultiFactor2 自行指定配置时间截面评分过滤器,内置评分过滤器(SCFilter_TopN/SCFilter_Price/SCFilter_AmountLimit/SCFilter_Group等)
# 如为 SE_MultiFactor2 实例,设置过滤:分值不为Nan|分成10组取第0组|价格大于等于10元|成交金额不在当日排名末尾20%之内|取前10 se.set_scores_filter(SCFilter_IgnoreNan()|SCFilter_Group(10, 0)SCFilter_Price( 10.) | SCFilter_AmountLimit(0.2) | SCFilter_TopN(10))
如通过 SCFilter_Group 创建过滤器进行因子分组测试:
- [vip]新增 GROUP 系列指标(GROUP_MAX/GROUP_MIN/GROUP_SUM/GROUP_FUNC等),和 AGG 系列指标对应
- [vip]dateserver 增加 --parquet_path 方式保存 tick data,仅在 --save 同时为 yes 时生效
- feat(KData): 添加索引方式获取子集功能
⚡️ 优化改进
- HikyuuTDX 优化板块信息下载,防止下载失败情况下板块信息丢失
- [vip]优化 clickhouse 存储引擎,日线整体预加载优化至8秒,目前存储引擎日线整体加载速度: HDF5 6秒 -> clickhouse 8秒 -> mysql 22秒
- HikyuuTDX 从 PyQt5 迁移至 PySide6
- feat(hikyuu_cpp): 在 Performance 类中新增"未平仓帐户收益率%"统计项
- feat(draw): 为 tm_performance 和 sys_performance 函数添加返回主图 axis 的功能,便于用户在绘图后对图表进行进一步的自定义操作和调整。
- 编译工程优化,基于xmake合并编译功能,整体编译实际缩短三分之二
🐞 缺陷修复
- fix(hikyuu): 默认情况下不启动行情接收,防止在开盘后因自身合成缺失导致从 dataserver 获取行情也缺失的问题。
- fix(datetime): 修复 UTC 偏移量计算在非 Windows 平台下的问题可能不准确。
- fix(hikyuu): realtime_update 优化实时更新功能中的股票列表获取逻辑
- fix(data): 修复10年债券收益率数据导入时的日期判断逻辑
2.6.8
🚀 新增特性
- 新增 get_inds_view 方法,用于指定日期或范围内的系列指标结果并返回 pandas.DataFrame 结果。该方法主要用于获取系列指标结果后,使用其他 python 库,进行进一步数据处理,或日常监控打印。
In [3]: df = get_inds_view(blocka, [CLOSE(), OPEN(), MA(CLOSE()), AMA(CLOSE()), MA(CLOSE(),n=30)], Datetime(20250822)) In [4]: df Out[4]: 证券代码 证券名称 交易时间 CLOSE OPEN MA AMA MA 0 SH600229 城市传媒 2025-08-22 5.89 7.23 7.087273 7.060143 7.034000 1 SH601121 宝地矿业 2025-08-22 7.21 6.01 2.482273 2.486140 6.544000 2 SH600227 赤天化 2025-08-22 7.97 6.41 6.292273 6.406271 2.462333 3 SH600390 五矿资本 2025-08-22 6.62 2.59 6.585455 6.015825 6.208000 4 SZ000612 焦作万方 2025-08-22 2.56 6.69 6.260000 6.334334 8.710933 ... ... ... ... ... ... ... ... ... 3467 SH603255 鼎际得 2025-08-22 32.36 32.39 31.984409 32.237558 31.445567 3468 SH600621 华鑫股份 2025-08-22 17.91 16.80 16.134909 16.596052 15.940933 3469 SH600999 招商证券 2025-08-22 19.32 18.68 18.342727 18.646812 18.188667 3470 SZ002301 齐心集团 2025-08-22 7.32 7.36 7.130000 7.192394 7.109333 3471 SH603369 今世缘 2025-08-22 42.49 42.21 40.229545 41.319146 40.089333 [3472 rows x 8 columns]
- 新增 AGG 系列聚合指标(捐赠用户),如日线使用分钟线聚合结果
#如计算:每日成交金额 / 日内分钟线最大成交金额 ind = AGG_MAX(AMO(), ktype=Query.MIN)/AMO() s = sm['sz000001'] k = s.get_kdata(Query(-100, ktype=Query.DAY)) result = ind(k) print(result.to_df()))
- IC 指标增加 strict 参数,strict 模式下为当前时刻的 N 日后收益,非 strict 模式下为当前时刻之前的 N 天收益
- 新增 REFX 指标,增强 REF 指标,可进行左移(未来函数, 勿在回测中使用,通常用于其他数据处理)
- K线添加分时和分笔数据支持, 在 KQuery 中添加 TIMELINE 和 TRANS 两种新 K 线类型,可直接使用指标计算分时和分笔数据
In [28]: s = sm['sz000001'] In [29]: k = s.get_kdata(Query(-100, ktype=Query.TRANS)) In [30]: MA(CLOSE())(k).to_df() Out[30]: datetime value0 0 2025-09-04 14:52:08 11.750000 1 2025-09-04 14:52:11 11.750000 2 2025-09-04 14:52:14 11.750000 3 2025-09-04 14:52:17 11.750000 4 2025-09-04 14:52:20 11.750000 .. ... ... 95 2025-09-04 14:56:53 11.730455 96 2025-09-04 14:56:56 11.730909 97 2025-09-04 14:56:59 11.731364 98 2025-09-04 14:57:02 11.732273 99 2025-09-04 15:00:00 11.732727 [100 rows x 2 columns]
- KData新增 get_kdata 方法获取对应时间范围内其他不同 K 线周期数据
- 添加 Indicator 结果集转换为 numpy.array 的新方法 to_array
- StockManager 添加 is_trading_hours 方法判断是否为交易时间段
⚡️ 优化改进
- 改进 python 中 std::share_ptr 引出对象的 clone 操作,提升 windows 下相关并行处理速度
- Indicaotr 优化双指标等特殊指标的表达式去重,提升公式计算性能
- 预加载模式 KData 与 Stock 共享数据、非预加载模式下捐赠用户 KData 使用LRUCache
- CVAL、SLICE、ALIGN 支持处理多结果集指标
- KRecord/KDataImp 使用全局 Null对象
🐞 缺陷修复
- 修复 MySQL/ClickHouse 无法按索引方式获取非预加载数据的错误
- 修复 Indicator 类中 to_numpy 函数的内存泄漏问题
- 修复 ALIGN 当日期超过给定范围时的对齐问题,优化了对齐算法
- 修复非中文环境 Windows 设置终端为中文编码导致的终端崩溃
2.6.7
-
新增功能与优化
- 提升核心结构转 numpy 与 pandas DataFrame 性能, 方便其他 python 库对接(Indicator/KData/KRecordList/TimeLineList/TransList/StockWeight/DatetimeList/PositionList/TradeList)
- 支持自定义动态周期K线(捐赠权益), 新增 DAY3、DAY5、DAY7 和 MIN3 扩展K线
- 优化K线预加载, 保证预加载期间获取数据和加载完毕后获取数据一致
- 新增 get_market_view 返回 DataFrame 格式的实时行情或某日行情数据
- Stock 新增 set_kdata_from_df 便捷方法,功能同 set_krecord_list
- 优化本地化, SYS 和 Portolio 跟踪打印时显示中文
- 优化退出时等待 spot 时间有时过长的的问题
- test(data): 增加针对真实通达信数据导入的集成测试
-
缺陷修复
- fixed HikyuuTdx 无法申请试用许可,字体显示过大
2.6.6
-
新增功能与优化
- 优化 msyql 预加载速度, 优化后原1分钟线预加载每股5120条数据耗时从 790 秒减少到 212秒
- 调整行情采集和接收的接口结构以便扩展支持level2
- 增加 clickhouse 存储引擎(捐赠权益), 和 mysql 相比存储占用空间缩减60%, 1分钟线预加载耗时减小(约120秒), 但日线预加载耗时增大至约 45 秒(mysql 耗时 22秒), 当日增量数据下载耗时较长(约30分钟)。
- dataserver 增加缓存 ticks 和存储 ticks 的功能(存储仅支持 clickhouse 存储引擎)
- 改进 windows 终端下中文输出
- 优化退出时释放顺序,避免数据未加载完成时退出异常
- hdf5 importer 增加移除指定日期及其之后数据接口
-
缺陷修复
- fixed BARSLASTCOUNT 计算越界
- fixed 未预加载财务信息时, 无法获取财务数据