尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

从30分钟到1分钟:stock-analysis多进程+增量更新,让4000多只股票选股提速5大技巧

从30分钟到1分钟:stock-analysis多进程+增量更新,让4000多只股票选股提速5大技巧 从30分钟到1分钟stock-analysis多进程增量更新让4000多只股票选股提速5大技巧【免费下载链接】stock-analysis使用python进行股票分析和选股项目地址: https://gitcode.com/gh_mirrors/sto/stock-analysisstock-analysis 是一个用 Python 实现的开源股票分析与选股工具它把本机通达信的日线、财报、股本变迁数据导入本地再通过多进程并行与增量更新两大手段把沪深 4000 多只股票的全市场选股从 30 分钟级压缩到 1 分钟级。本文面向新手带你拆解这 5 个提速技巧背后的实现思路全部基于项目内真实代码看完即可在自己的机器上复现。为什么全市场选股这么慢先看一组项目 README 里给出的真实数据❌慢路径回测时每天对 4000 多只股票逐只循环执行策略回测 5 年约 1200 个交易日需要30 多分钟✅快路径预先用celue_save.py生成celue汇总.csv策略信号文件回测时直接导入1 分钟出结果慢的根源很简单A 股股票数量 × 历史交易日数量 × 策略计算量三者相乘就是天文数字。提速的思路也因此清晰——能并行的并行、能少算的少算、能缓存的缓存。下面 5 个技巧分别对应这三条路线。技巧一多进程池切片让 CPU 每个核心都干活选股主程序 xuangu.py 默认使用multiprocessing.Pool多进程并行几个关键细节值得学习进程数自动计算CPU 核心数超过 8 时取核心数 ÷ 1.5否则取核心数 - 2给系统和 IO 留出余量避免进程过多反而互相抢资源股票列表均分切片把 4000 多只股票均匀切分成 N 片余数归最后一片每片交给一个子进程独立执行策略进度条锁多进程同时打印tqdm进度条会乱码项目用RLock全局锁统一管理输出Windows 兼容调用freeze_support()保证 Windows 下多进程正常启动调试时可以加single参数强制单进程执行方便断点排查问题python xuangu.py single 多进程不是免费的午餐。项目注释里专门记录了一个血泪教训如果把全部股票数据读进主进程的大字典再传给子进程内存占用暴涨效率反而不如单进程。所以子进程内部各自按需read_pickle读取单只股票文件这才是正确姿势。技巧二增量更新只追加当日数据而非全部重灌数据更新脚本 readTDX_lday.py 是性能优化的重灾区。默认运行一次只做三件事从通达信vipdoc目录导出当日新增的日线数据对每只股票调用复权处理函数make_fq位于 func.py函数内部通过flag_attach追加模式判断如果数据已经复权过、且更新区间内没有除权除息日就只对新增的几天数据计算复权因子历史数据原样保留直接拼接这意味着每天盘后更新4000 多只股票每只只重算 1 行数据而不是 30 年 × 4000 只全量重算。只有两种情况才会全量重算且都由你显式控制# 强制删除现有数据重新生成全部数据 python readTDX_lday.py del另外还支持传入一个或两个日期如2020-01-01 2022-12-31来指定前复权截取区间做历史区间研究时不必动全量数据。技巧三Pickle 存储数据读取提速一个量级项目进度记录里有一条数据存储方式从 CSV 优化为 Pickle 格式。原因很实际——选股时每一只股票的数据都要被完整读进内存CSV 是文本格式每次读取都要解析文本、推断类型4000 只股票串行读写耗时明显Pickle 是 Python 原生二进制序列化pd.read_pickle()直接把内存中的 DataFrame 结构还原读取速度快数倍readTDX_lday.py处理完数据后会同时产出两份CSV人类可读可用 Excel 打开和 Pickle程序使用。策略选股只走 Pickle 通道这是存储一次、读取百次场景下的标准做法。技巧四策略两级筛选fast 模式先粗筛选股策略写在celue.py参照 CeLue模板.py 编写xuangu.py采用两级筛选架构策略1modefast 快速模式只用最廉价的判断快速淘汰——上市天数不足 500 天、收盘价小于 9 元直接返回 False连指标都不算。配合多进程这一级能在几秒内把 4000 多只股票砍到几十只候选策略2精细模式只对存活的候选股执行完整逻辑并叠加沪深 300 指数信号过滤指数当日涨幅超 ±1.5% 时不发买入信号先用 O(1) 的条件粗筛、再对少量标的精算是量化系统通用且高效的模式比一上来就跑完整公式省掉 95% 以上的无效计算。技巧五策略信号预计算回测提速 30 倍这是标题中30 分钟到 1 分钟的主角。celue_save.py 的运作逻辑为每只股票的全部历史 K 线打上celue_buy/celue_sell策略信号列把所有买卖信号点抽取汇总成独立的celue汇总.csv文件回测时 huice.py 直接加载这个文件驱动 rqalpha不再循环 4000 只股票两个提速细节默认增量执行只补齐缺少信号的交易日日常盘后跑一遍即可修改策略后加del参数全量重新生成同样使用多进程池与技巧一相同的切片 Pool方案4000 只股票的历史信号计算并行完成# 修改策略后全量重新生成策略信号 python celue_save.py del # 单进程调试 python celue_save.py single快速上手三步跑通提速版选股克隆项目无需 pip 安装第三方依赖包缺库按报错提示安装即可git clone https://gitcode.com/gh_mirrors/sto/stock-analysis在本机通达信中下载沪深日线数据和专业财务数据然后打开user_config.py配置通达信目录与各数据保存路径强烈建议把导出数据放固态硬盘按CeLue模板.py把自己的选股思路写成策略保存为celue.py盘后依次运行readTDX_cw.py更新财报、readTDX_lday.py增量更新日线再运行xuangu.py出选股结果常用命令行参数速查脚本参数作用readTDX_lday.py无参数增量追加当日数据默认最快readTDX_lday.pydel删除现有数据全量重新生成readTDX_lday.py日期区间指定前复权截取区间celue_save.py无参数只补齐缺少信号的交易日celue_save.pydel全量重新生成策略信号xuangu.py/ 以上脚本single切换单进程执行方便调试写在最后5 个技巧归纳起来就三句话并行化多进程池切片、最小化增量更新 fast 粗筛、预计算策略信号落盘。这套组合拳让 stock-analysis 的本地数据方案在性能上逼近云端数据接口同时数据完全本地化、不依赖第三方平台积分与带宽。想深入理解复权与增量逻辑可以直接阅读func.py中的make_fq函数想直观查看策略买卖点运行plot.py后打开生成的pyecharts.html即可。【免费下载链接】stock-analysis使用python进行股票分析和选股项目地址: https://gitcode.com/gh_mirrors/sto/stock-analysis创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表