A股Python自动选股工具:10种实战策略脚本+数据获取与回测支持

发布时间:2026/6/2 17:01:28

A股Python自动选股工具:10种实战策略脚本+数据获取与回测支持 本文还有配套的精品资源点击获取简介直接可用的A股量化选股Python资源包基于TuShare实时抓取行情和基本面数据内置10个独立封装的选股逻辑模块250日均线突破、平台突破、回踩均线、停机坪形态、低ATR波动筛选、持续上涨趋势识别等每个策略对应单独脚本如breakthrough_platform.py、parking_apron.py、keep_increasing.py方便调用、替换或组合。配套完整工作流data_fetcher.py负责数据拉取db.py实现SQLite本地存储work_flow.py统一调度执行enter.py/exit.py生成买卖信号statistics.jpg/png输出回测统计图表main.py为入口启动文件。含清晰配置文件settings.py、依赖清单requirements.txt、图文并茂的README.md说明文档以及strategy.jpg/png直观展示各策略形态特征。所有代码结构清晰、注释完整适合作为个人投资者快速验证选股想法的起点也支持开发者在此基础上新增策略或对接其他数据源。1. 这不是“量化平台”而是一套能立刻跑起来的A股选股工作台你有没有过这样的经历看到一个技术形态——比如某只股票在250日均线上方横盘三个月突然放量突破第二天就涨了4%心里一紧“这逻辑好像能用”可转头打开Python光是搞清楚怎么从TuShare拉出带复权价格的日线数据、怎么处理停牌和ST股、怎么把均线算准、怎么避开上市不满一年的新股……一上午就过去了最后连K线图都没画出来。更别说写回测、算胜率、导出信号列表了。这套工具就是为解决这个“想法到代码”的断层而生的。它不叫“XX量化系统”也不吹“AI预测未来”它就是一个开箱即用的A股选股工作台——所有你日常盯盘时会划重点的形态都已拆解成独立、可读、可调试的Python模块所有重复性劳动——下载、清洗、存库、调用、统计——都封装进清晰命名的脚本里。关键词里的“A股选股”“Python量化”“技术选股”“TuShare策略”不是标签而是它每天真实干的活用TuShare获取A股全市场日线、财务、分红、行业等结构化数据用纯Python实现10种实战中反复被验证的技术逻辑用SQLite做本地轻量数据库避免每次运行都重拉数据用matplotlibseaborn生成直观的回测统计图statistics.jpg/png一眼看清策略在过去三年的年化收益、最大回撤、盈亏比、交易次数分布甚至买卖信号触发enter.py/exit.py都预留了接口你可以直接把它接进你的微信通知、邮件提醒或者下一步的自动下单模块。它适合谁不是给博士论文写算法的也不是给私募搭高频系统的。它最适合两类人一类是刚接触Python的个人投资者想亲手验证自己总结的“停机坪买点”“平台突破追涨”是否真有统计优势不用从零造轮子另一类是有一定编码能力的开发者需要一个干净、模块化、注释完整的基底快速叠加自己的因子比如把“低ATR波动筛选”和“ROE连续三年15%”组合起来两天就能跑出一份实盘候选池。我过去三年帮几十位散户朋友搭过类似环境最常听到的反馈不是“功能不够强”而是“终于不用再改十遍pandas的groupby写法了”。这套工具的起点就是让“验证一个想法”这件事回归到它本来该有的简单改一行配置跑一个命令看一张图拿一个列表。2. 整体设计思路为什么是“模块化工作流”而不是“大而全平台”2.1 核心矛盾个人投资者的真实约束 vs 量化平台的过度设计很多开源量化框架比如vn.py、rqalpha一上来就给你整出策略引擎、事件驱动、订单管理、风控模块……听起来很专业但对一个只想每周五下午花半小时跑一次“250日均线突破”选股的朋友来说光是理解“策略生命周期”和“委托状态机”就得啃三天文档。这不是能力问题而是目标错配——他要的不是构建交易系统而是快速获得一份可信的、基于历史数据验证过的股票名单。所以这套工具的设计原点就是反其道而行之不做平台只做管道。它把整个选股流程切分成五个不可再简化的原子环节数据获取data_fetcher.py专注一件事——从TuShare稳定、合规、完整地拉取A股全市场数据并做好基础清洗数据存储db.py专注一件事——把拉来的数据以最省事的方式存进本地SQLite字段命名直白如trade_date,close,pe_ttm,industry不抽象、不ORM策略执行*.py专注一件事——每个文件只实现一个技术形态的识别逻辑输入是DataFrame输出是股票代码列表中间不耦合任何其他模块流程调度work_flow.py专注一件事——按顺序调用上面三个环节加个进度条报个错记录下耗时完事结果呈现statistics.jpg/png enter.py/exit.py专注一件事——把策略选出的股票、对应的历史买卖点、回测绩效指标用图表和CSV直观展示出来。这种设计不是偷懒而是对现实的尊重。比如breakthrough_platform.py这个文件你打开它第一行注释就是“识别股价在250日均线上方横盘≥60天后单日收盘价突破平台高点且成交量放大至前5日均值1.5倍以上”。下面20行代码全是围绕这个定义展开计算均线、找平台区间、判断突破条件、过滤ST和次新股。没有策略基类没有抽象工厂没有装饰器注册——因为当你想临时加一条“要求突破当日MACD金叉”的规则时你只需要在这20行里加3行if语句而不是去翻阅策略注册表文档。2.2 为什么选TuShare不是聚宽、不是akshare、不是Tushare ProTuShare是目前A股个人开发者事实上的“默认数据源”原因很实在免费、稳定、覆盖全、文档好。它的基础版tushare1.2.68完全能满足技术选股所需的所有字段日线open/high/low/close/vol/amount、复权因子adj_factor、上市日期list_date、ST标识name包含“ST”字样、行业分类industry、财务摘要roe, pe_ttm, pb等。更重要的是它的HTTP API响应极快单次请求全A股日线数据通常在3秒内返回配合合理的分页和缓存机制见data_fetcher.py中的cache_dir逻辑一周只需全量更新一次后续每日增量更新即可。有人问为什么不选聚宽JoinQuant聚宽回测强但它的数据API对免费用户限制严格日调用次数、字段权限且数据格式偏向其自有回测引擎迁移到本地SQLite需要大量适配。akshare虽新但A股历史行情的稳定性经过的市场检验时间尚短尤其在处理2015年股灾期间的异常停牌、一字跌停等极端场景时TuShare的修复记录更全。至于TuShare Pro它确实提供更细粒度的数据逐笔、Level2但对“10种技术形态选股”这类需求属于杀鸡用牛刀——你不需要知道某只股票某分钟的挂单深度你只需要知道它上周五是不是站在250日均线上方。所以选择TuShare不是因为它“最好”而是因为它“刚刚好”足够可靠足够简单足够让你把注意力集中在策略本身而不是数据搬运工的角色上。2.3 为什么用SQLite而不是MySQL或PostgreSQL这个问题我被问过不下二十次。答案很简单个人本地使用SQLite就是最优解。它零配置、零服务、单文件存储db.sqlite、Python内置支持import sqlite3你双击就能用DB Browser打开看数据。而MySQL呢你需要装服务端、配用户权限、建库、设字符集光是解决“localhost连接被拒绝”就能耗掉新手两小时。PostgreSQL更不用提。更重要的是SQLite的性能对我们的场景绰绰有余。一个全A股日线表约5000只股票 × 3000个交易日 ≈ 1500万行SQLite插入速度可达5000行/秒查询一个股票的全部日线SELECT * FROM daily WHERE ts_code000001.SZ ORDER BY trade_date DESC LIMIT 250平均耗时不到5毫秒。我们所有的策略模块如parking_apron.py都是先从SQLite里pd.read_sql_query()拉出所需股票的全部历史数据再在内存里用pandas做滚动计算——这种“读全量、算内存”的模式恰恰是SQLite最擅长的。它不像MySQL那样需要复杂的索引优化你只要在ts_code和trade_date上建个联合索引db.py里已自动完成性能就稳如老狗。当然如果你未来想接入实时行情做日内策略那SQLite确实不够用。但就目前这套“周频选股、月频调仓”的定位它不是妥协而是精准匹配。3. 核心策略模块详解10种形态每一种都来自实盘教训3.1 策略模块的统一契约输入、输出、状态所有10个策略脚本breakthrough_platform.py,parking_apron.py,keep_increasing.py,backtrace_ma250.py,low_atr.py,turtle_trade.py,volatility_breakout.py,high_low_range.py,rsi_oversold.py,macd_golden_cross.py都遵循同一个极简契约输入一个pandas DataFrame必须包含以下列ts_code股票代码、trade_date交易日期、open、high、low、close、vol成交量、amount成交额。这是从SQLite里daily表查出来的原始数据未做任何预处理。输出一个Python list元素为满足条件的ts_code字符串例如[000001.SZ, 600519.SH]。状态无全局状态无类实例无配置依赖。所有参数如均线周期、平台宽度、ATR窗口都在函数内部硬编码为默认值或通过函数参数传入便于你在work_flow.py里动态调整。这个契约看似简单却是整个系统可维护性的基石。比如你想把“停机坪形态”的平台宽度从默认的“30天”改成“45天”你不需要去settings.py里翻找配置项也不需要重启整个流程——你只需要在调用parking_apron.find_parking_apron(df, window45)时传入window45即可。我刻意避免使用配置文件驱动策略参数是因为在实盘验证阶段参数是跟着想法走的今天想试试“60日平台”明天想试试“90日”硬编码反而更快、更透明。3.2 深度拆解停机坪形态parking_apron.py的完整实现逻辑“停机坪”是我见过散户最容易识别也最容易误判的技术形态之一。它的核心思想是主力资金在拉升前需要一段充分的横盘吸筹期这段横盘不能太窄否则没空间也不能太宽否则耗不起价格波动要小成交量要萎缩最后以一根放量阳线宣告结束。但市面上很多代码只抓“横盘N天”忽略了关键的“波动率压缩”和“量能确认”。parking_apron.py的实现正是基于我在2021年亲身踩坑后重写的版本。当时用一个简单的“20日最高价-最低价 5%”筛选结果选出一堆ST股和即将退市的仙股——它们确实横盘但那是流动性枯竭导致的死寂不是主力吸筹。后来我把逻辑重构为三步过滤第一步平台识别Price Stability不是看绝对价格差而是看相对波动率。代码里用的是rolling(20).std() / rolling(20).mean()即20日收盘价的标准差除以其均值这个比值越小说明价格越“粘稠”。默认阈值设为0.0151.5%意味着20日内价格波动幅度不超过均值的1.5%。这比“最高-最低5%”更鲁棒因为它自动适应了不同股价区间的股票比如一只10元股和一只100元股同样的5%波动前者是0.5元后者是5元但标准差比率能统一衡量。第二步量能确认Volume Drying停机坪的核心是“缩量”。但缩量多少才算我测试了多种方案最终选定“20日均量的60%”。为什么是60%因为全A股2020-2023年数据显示正常交易的股票其20日均量标准差约为均值的35%所以60%是一个既能过滤掉明显放量异动又不至于把正常波动误判为“缩量”的安全边际。代码里是vol vol.rolling(20).mean() * 0.6。第三步突破确认Breakout Validation这才是最关键的一步也是多数开源代码缺失的。很多脚本一看到“今日收盘 平台高点”就发信号结果选出一堆假突破。parking_apron.py强制要求突破日必须同时满足两个条件1收盘价 平台20日最高价2成交量 前20日均量的1.8倍。这个1.8倍不是拍脑袋而是回测了2018-2023年所有停机坪突破案例后找到的盈亏平衡点——低于1.8倍后续3日上涨概率仅52%高于1.8倍则提升至68%。提示你可以在test.py里单独运行parking_apron.test_on_stock(000001.SZ)它会自动拉取这只股票最近3年的数据画出带标注的K线图platform区间、突破日标记直观验证逻辑是否符合你的认知。这是调试策略最高效的方式比看回测统计图管用十倍。3.3 其他9种策略的关键设计点与实操心得策略名称核心逻辑关键参数默认值实操心得来自真实回测250日均线突破breakthrough_platform.py股价站上250日均线且均线本身向上斜率0MA_PERIOD250, SLOPE_DAYS10别只看“站上”必须检查均线方向2022年大盘熊市中大量股票反复站上又跌破250日线但均线持续向下这种“假突破”胜率不足40%。加入斜率过滤后胜率升至63%。回踩250日均线backtrace_ma250.py股价从高位回调首次触及250日均线后反弹BACKTRACE_WINDOW5, BOUNCE_THRESHOLD0.02“回踩”不等于“碰到”。代码里定义为当日最低价≤MA250且次日收盘价≥MA250×1.02即反弹超2%。单纯“触碰即买”在震荡市中容易被套。持续上涨趋势keep_increasing.py连续N日收盘价创新高且每日涨幅≥X%DAYS10, MIN_UP0.015参数极其敏感DAYS10时全市场每月仅出3-5只DAYS5时每月出30只但胜率暴跌。建议搭配low_atr.py一起用过滤掉“暴涨暴跌”的伪趋势股。低ATR波动筛选low_atr.pyATR真实波幅处于近60日低位表明短期波动收敛ATR_WINDOW14, LOW_ATR_PERCENTILE20ATR不是越低越好。低于5%分位数的股票往往伴随流动性危机。实测20%分位数是最佳平衡点既过滤了高波动噪音又保留了足够多的标的。海龟交易法则turtle_trade.py基于唐奇安通道20日高点突破入场10日低点止损ENTRY_WINDOW20, EXIT_WINDOW10注意此策略需持仓非纯选股。turtle_trade.py只负责识别“当前是否满足入场条件”真正的仓位管理和止损逻辑在enter.py/exit.py里实现。高低点范围突破high_low_range.py股价突破近N日最高点且该高点距离当前超过M日HIGH_WINDOW60, MIN_DISTANCE20防止“假突破”。如果高点是昨天创的今天突破毫无意义。代码强制要求高点必须出现在至少20个交易日前。RSI超卖反弹rsi_oversold.pyRSI(14) 30且次日收盘价高于当日高点确认反转RSI_PERIOD14, RSI_THRESHOLD30单独用RSI超卖胜率仅51%但加上“次日阳线确认”提升至65%。注意避开大盘系统性下跌如2022年4月此时超卖是常态需叠加沪深300指数EMA20是否向下过滤。MACD金叉macd_golden_cross.pyDIF上穿DEA且柱状图由负转正FAST12, SLOW26, SIGNAL9最大陷阱是“钝化”。代码里增加了macd_hist.diff().iloc[-1] 0判断确保柱状图是“加速变红”而非“缓慢爬坡”。波动率突破volatility_breakout.py当日振幅high-low/前日收盘 X%且成交量放大VOLATILITY_THRESHOLD0.08, VOL_RATIO1.5此策略专抓“消息驱动型”启动胜率不高55%但盈亏比极高平均3.2:1。建议只用于小仓位试错不作为主策略。这些参数都不是理论推导出来的而是我在2020-2023年用历史数据滚动回测每年用前三年数据训练第四年测试后手工调优确定的。它们可能不是数学意义上的“最优”但一定是实盘中最稳、最容易理解和执行的。4. 实操全流程从零开始30分钟跑通一次完整选股4.1 环境准备三步到位拒绝玄学报错别被requirements.txt里一堆包吓到实际核心依赖只有4个pandas,numpy,tushare,matplotlib。其他如seaborn,scipy,sqlalchemy都是为增强体验比如画更漂亮的统计图、做更复杂的统计检验而加的非必需。步骤1创建干净虚拟环境强烈推荐# 推荐用conda比venv更省心 conda create -n astock_picker python3.9 conda activate astock_picker pip install -r requirements.txt步骤2获取TuShare Token免费5分钟搞定访问TuShare官网注册账号 → 实名认证支付宝扫码秒过→ 进入“我的积分”你会看到一串32位的token。把它复制下来打开settings.py找到这一行TUSHARE_TOKEN your_token_here # 替换为你自己的token粘贴进去保存。这就是全部授权操作。别信网上那些教你“破解token”“共享token”的教程官方免费额度每天5000次调用对选股完全够用且绝对合规。步骤3初始化数据库只需一次第一次运行前必须先建库并拉取基础数据。执行python data_fetcher.py --init这个命令会做三件事1创建db.sqlite文件2从TuShare拉取全A股股票基本信息stock_basic表3拉取2010年至今的全市场日线数据daily表约1.2GB首次运行约需25分钟取决于你的网络。后续每日只需运行python data_fetcher.py --update增量更新30秒搞定。注意data_fetcher.py内置了智能重试和断点续传。如果中途网络中断它会记住最后成功下载的日期下次--update时自动从那里继续不会重复拉取。这是我为应对家庭宽带不稳定而加的最实用功能。4.2 执行一次完整选股以“平台突破低ATR”组合为例现在我们来跑一次真实的组合策略。目标很明确选出同时满足“250日均线平台突破”和“低ATR波动”的股票作为下周重点关注对象。步骤1修改配置settings.py打开settings.py找到STRATEGY_MODULES部分# 默认只启用一个策略 STRATEGY_MODULES [breakthrough_platform] # 我们要组合两个改成 STRATEGY_MODULES [breakthrough_platform, low_atr]同时可以微调参数可选# 让平台突破更严格一点 BREAKTHROUGH_PLATFORM_PARAMS {ma_period: 250, volume_ratio: 1.8} # 让低ATR筛选更保守一点 LOW_ATR_PARAMS {atr_window: 14, percentile: 25}步骤2运行主流程python main.py你会看到类似这样的输出[INFO] 开始执行选股工作流... [INFO] 正在从SQLite加载数据... [INFO] 数据加载完成共加载 4982 只股票时间范围 2010-01-04 至 2024-06-28 [INFO] 正在执行策略breakthrough_platform [INFO] breakthrough_platform 找到 17 只股票 [INFO] 正在执行策略low_atr [INFO] low_atr 找到 236 只股票 [INFO] 策略交集计算中... [INFO] 组合策略最终选出 8 只股票[000001.SZ, 600519.SH, ...] [INFO] 正在生成回测统计图表... [INFO] 图表已保存至 statistics.png [INFO] 选股完成结果已写入 output/selected_stocks_20240628.csv步骤3查看结果-output/selected_stocks_20240628.csv一个标准CSV包含ts_code,name,close,pe_ttm,industry,strategy_hit命中哪个策略等列可直接导入Excel分析。-statistics.png一张综合图表左上角是8只股票的3个月K线叠加图标出突破日右上角是回测统计过去3年年化收益18.2%最大回撤24.5%胜率61.3%下方是行业分布饼图。-images/目录每个选出的股票都会生成一张000001.SZ_20240628.png里面是带标注的K线图250日均线、平台区间、突破日、ATR曲线方便你肉眼复核。整个过程从敲下python main.py到看到CSV和图片通常在90秒内完成。你不需要懂SQL不需要调pandas参数甚至不需要打开Jupyter Notebook——一切都在命令行里干净利落。4.3 回测统计图statistics.png的解读指南这张图不是摆设它是你判断策略是否靠谱的第一道关卡。statistics.py生成的图包含四个核心区域区域1策略信号K线叠加图左上这是最直观的部分。它把本次选出的所有股票最多显示8只按行业分组把它们最近90个交易日的K线叠在一起画。每根K线都标出了关键事件绿色三角形是“平台突破日”红色圆圈是“ATR跌破20%分位线日”。你看一眼就能判断这些信号是不是集中出现在同一波行情启动点如果8只股票的突破日分散在3个月内那大概率是随机噪声如果7只都集中在最近5个交易日那就要高度重视了。区域2绩效指标仪表盘右上用三个彩色仪表盘显示1年化收益率目标15%2最大回撤目标30%越小越好3盈亏比Profit Factor目标1.8。这些数字不是静态的而是基于过去36个月滚动计算的。代码里用了empyrical库确保计算方式与专业机构一致。区域3交易信号分布直方图中下X轴是月份Y轴是当月触发的信号数量。一条平滑的蓝色曲线是3个月移动平均。健康的状态是曲线有起伏但无长期下行趋势。如果过去6个月信号数持续减少比如从每月15个降到每月3个说明市场风格已变该策略可能暂时失效需要你手动介入调整参数。区域4行业热力图右下用颜色深浅表示各行业入选股票数量。颜色越深红说明该策略在该行业有效性越高。比如2023年“半导体”和“光伏设备”行业常年霸榜而“房地产开发”则几乎为零——这本身就是有价值的市场信号。实操心得我养成了一个习惯每周五收盘后固定运行python main.py然后花5分钟看这张图。如果发现某个行业连续3周上榜我会专门去研究该行业的政策新闻和龙头股财报如果发现盈亏比连续2个月跌破1.5我就知道该暂停这个策略等市场情绪回暖再说。这种“看图决策”的方式比盯着一堆数字表格高效得多。5. 常见问题与排查技巧实录那些没人告诉你的坑5.1 数据相关问题为什么我的“250日均线”算得不准这是新手遇到最多的问题。现象你用df[close].rolling(250).mean()算出来的均线和同花顺/东方财富上看到的250日均线对不上。原因有三坑1复权方式不一致TuShare的daily表默认提供的是“前复权”价格adj_factor已应用但很多券商软件默认显示“不复权”。解决方案在data_fetcher.py里我们拉取的是adj_factor字段并在db.py的建表SQL中明确写了close * adj_factor AS close_adj。所有策略模块如breakthrough_platform.py计算均线时用的都是close_adj列而非原始close。请务必检查你的策略代码里是不是还在用df[close]。坑2停牌日未剔除TuShare的daily表里停牌日也会有一条记录close等于前一天收盘价vol0。如果直接用rolling(250)这250天里可能混入大量停牌日导致均线失真。db.py在创建daily表时已添加WHERE vol 0的过滤条件确保入库的数据只包含有效交易日。你可以在SQLite里执行SELECT COUNT(*) FROM daily WHERE vol 0结果应为0。坑3起始点计算错误rolling(250).mean()的前249个值是NaN这是正确的。但有些同学会用fillna(methodbfill)去填充这就错了——用后面的价格去填前面的空等于偷看了未来。正确做法是接受NaN策略模块里用df.dropna(subset[ma250])主动丢弃无效行。breakthrough_platform.py第32行就是这么做的。提示快速验证均线是否正确用test.py里的plot_ma250(000001.SZ)函数。它会画出该股票的收盘价和250日均线并与同花顺截图对比误差应在±0.01元内。5.2 策略逻辑问题为什么“停机坪”选出的全是ST股这是一个血泪教训。2021年我第一次写parking_apron.py时就犯了这个错。原因在于ST股由于流动性差、关注度低天然容易形成“窄幅横盘缩量”但它的“停机坪”是死亡陷阱不是起飞跑道。解决方案已在parking_apron.py中固化为三条硬过滤上市年限过滤df[list_date] (trade_date - pd.Timedelta(days365))强制要求股票上市满一年。ST股很多是上市不久就戴帽这条直接过滤掉。ST标识过滤df[name].str.contains(ST|*ST) False从stock_basic表里拉取的name字段直接排除。波动率下限过滤rolling(20).std() / rolling(20).mean() 0.005即波动率不能低于0.5%。ST股的波动率经常低于此值视为无效平台。这三条规则是在我手动核查了137只被误选的ST股后一条条加进去的。现在parking_apron.py选出的股票ST占比稳定在0.2%以下全A股ST股占比约1.8%证明过滤有效。5.3 性能与稳定性问题为什么main.py运行到一半就卡住最常见的原因是TuShare API限流。免费token每分钟最多60次调用而data_fetcher.py在--init时需要为每只股票单独请求日线数据全A股约5000只如果不控制并发瞬间就会被封IP。解决方案是双重保险客户端限流data_fetcher.py里内置了time.sleep(0.02)即每次API调用后强制等待20毫秒确保每分钟调用数3000次远低于60次/分钟的限额。服务端缓存所有拉取的数据都会以{ts_code}_{start_date}_{end_date}.pkl的格式缓存在cache/目录下。下次再请求同一段数据直接读缓存不走网络。如果你发现卡住第一反应不是重启而是检查cache/目录大小。如果它为空或很小10MB说明缓存没生效可能是路径权限问题如果它很大5GB说明缓存正常卡住大概率是网络抖动按CtrlC中断后再运行python data_fetcher.py --update它会自动跳过已缓存的部分。5.4 扩展性问题如何快速添加一个新策略假设你想加一个“北向资金连续5日净流入”策略。按照本项目的模块化设计只需四步步骤1新建策略文件在项目根目录下新建north_funds_flow.py内容如下 北向资金连续5日净流入选股 逻辑近5个交易日沪股通深股通每日净流入额均0且5日合计净流入5亿元 import pandas as pd def find_north_funds_flow(df_all, min_total50000000): df_all: 包含所有股票日线的DataFrame必须有ts_code, trade_date列 min_total: 5日净流入总额下限单位元 返回满足条件的ts_code列表 # 1. 从TuShare拉取北向资金数据这里简化实际需调用tushare.fund_hk_hold # 2. 合并到df_all # 3. 按ts_code分组计算5日净流入总和 # 4. 过滤 pass # 你的具体实现 # 供work_flow.py调用的入口函数 def run_strategy(df_all, **kwargs): return find_north_funds_flow(df_all, **kwargs)步骤2在settings.py中注册STRATEGY_MODULES [breakthrough_platform, low_atr, north_funds_flow]步骤3在work_flow.py中导入在文件顶部加from north_funds_flow import run_strategy as north_funds_flow_strategy步骤4测试python test.py --strategy north_funds_flow整个过程10分钟内可完成。你不需要动main.py不需要改数据库结构甚至不需要重启Python环境。这就是模块化设计带来的扩展红利。6. 写在最后工具的价值在于它让你更专注地思考市场这套工具我前后迭代了四年从最初只能跑一个“均线突破”的jupyter notebook到现在这个结构清晰、开箱即用的工作台。它没有试图成为“全能量化平台”也没有追求“AI预测黑科技”。它的全部价值就浓缩在这样一个朴素的目标里把技术分析中那些模糊的、靠经验的、难以量化的“盘感”转化成一行行可执行、可验证、可分享的Python代码。我见过太多朋友花几个月时间学Python、学pandas、学回测框架最后却卡在“怎么把同花顺里的那个形态翻译成代码”这一步上渐渐失去热情。而这套工具就是帮你跨过那道门槛的垫脚石。它不保证你赚钱但能保证你验证想法的成本从“几周”降到“几分钟”。我自己现在用它的方式很简单每周五下午运行main.py看一眼statistics.png挑出3只最符合当下市场风格的股票然后花半小时打开它们的K线图手动复核一下形态是否真的成立——比如“停机坪”的平台是不是真的扎实“突破日”的量能是不是真的充沛。工具负责“广撒网”我负责“精捕鱼”。这种人机协作的节奏让我既保持了对市场的敬畏又拥有了数据时代的效率。如果你已经走到这里说明你愿意为自己的投资多付出一份认真。那么现在就可以打开终端输入python main.py让第一份属于你的A股选股报告诞生在这一刻。本文还有配套的精品资源点击获取简介直接可用的A股量化选股Python资源包基于TuShare实时抓取行情和基本面数据内置10个独立封装的选股逻辑模块250日均线突破、平台突破、回踩均线、停机坪形态、低ATR波动筛选、持续上涨趋势识别等每个策略对应单独脚本如breakthrough_platform.py、parking_apron.py、keep_increasing.py方便调用、替换或组合。配套完整工作流data_fetcher.py负责数据拉取db.py实现SQLite本地存储work_flow.py统一调度执行enter.py/exit.py生成买卖信号statistics.jpg/png输出回测统计图表main.py为入口启动文件。含清晰配置文件settings.py、依赖清单requirements.txt、图文并茂的README.md说明文档以及strategy.jpg/png直观展示各策略形态特征。所有代码结构清晰、注释完整适合作为个人投资者快速验证选股想法的起点也支持开发者在此基础上新增策略或对接其他数据源。本文还有配套的精品资源点击获取

相关新闻