传统观念:大盘涨所有股票都能涨,编程统计历年牛市个股上涨占比,量化普涨行情实际覆盖率。
牛市个股上涨占比统计工具量化大盘涨≠个股涨教学级量化投资原型内容包含免责声明和风险提示不荐股、不预测行情、不引导开户、无任何引流。一、实际应用场景描述在智能证券投资课程中市场广度Market Breadth与个股分化是核心教学内容。本程序适用于- 高校量化投资、技术分析课程实验- 投资者教育Investor Education- 市场结构认知训练- 破除大盘涨我就赚的认知偏差核心目标- 统计牛市期间个股上涨占比- 量化普涨行情的实际覆盖率- 用数据说明大盘上涨 ≠ 所有个股上涨- 输出历史统计报告✅ 不做未来预测✅ 不构成投资建议✅ 仅作为历史数据统计示例二、痛点引入真实可感知痛点 表现认知偏差 大盘涨了我的股票肯定涨幸存者偏差 只看涨停板忽略下跌股缺乏数据支撑 凭感觉判断市场热度盲目追涨 以为牛市就能躺赢工具门槛高 专业行情软件复杂 需要一个轻量、本地、可解释、可复现的统计工具三、核心逻辑讲解工程视角1️⃣ 数据模型设计BullMarketSession├── index_name 指数名称├── start_date 牛市起始日├── end_date 牛市结束日├── index_return 指数涨幅%└── stocks 个股列表含涨跌幅2️⃣ 核心统计指标指标 含义上涨个股占比 涨幅 0 的个股比例跑赢指数占比 涨幅 指数涨幅的比例下跌个股占比 涨幅 0 的比例分化系数 个股涨幅的标准差3️⃣ 统计流程输入牛市区间遍历所有个股计算每只涨跌幅统计上涨 / 下跌数量计算跑赢指数比例输出统计报告4️⃣ 关键公式上涨占比 上涨个股数 / 总个股数 × 100%跑赢指数占比 涨幅 指数涨幅的个股数 / 总个股数 × 100%四、Python 模块化代码可直接运行 项目结构bull_market_coverage/│├── main.py├── models.py├── analyzer.py├── reporter.py├── storage.py├── README.md└── DISCLAIMER.md✅ models.py数据建模models.py牛市行情与个股数据模型class StockPerformance:个股表现def __init__(self, symbol, name, return_pct):self.symbol symbolself.name nameself.return_pct return_pctclass BullMarketSession:牛市区间def __init__(self, index_name, start_date, end_date, index_return):self.index_name index_nameself.start_date start_dateself.end_date end_dateself.index_return index_returnself.stocks []✅ analyzer.py核心统计逻辑analyzer.py牛市个股上涨占比统计import numpy as npdef analyze(session):统计牛市区间个股表现total len(session.stocks)if total 0:return None# 上涨个股up_stocks [s for s in session.stocks if s.return_pct 0]down_stocks [s for s in session.stocks if s.return_pct 0]flat_stocks [s for s in session.stocks if s.return_pct 0]# 跑赢指数的个股beat_index [s for s in session.stocks if s.return_pct session.index_return]returns [s.return_pct for s in session.stocks]return {total_stocks: total,up_count: len(up_stocks),down_count: len(down_stocks),flat_count: len(flat_stocks),up_pct: round(len(up_stocks) / total * 100, 2),down_pct: round(len(down_stocks) / total * 100, 2),beat_index_count: len(beat_index),beat_index_pct: round(len(beat_index) / total * 100, 2),avg_return: round(np.mean(returns), 2),median_return: round(np.median(returns), 2),std_return: round(np.std(returns), 2),max_return: round(max(returns), 2),min_return: round(min(returns), 2)}✅ reporter.py统计报告输出reporter.py牛市覆盖率统计报告def report(session, stats):print(\n * 55)print(f【牛市个股上涨占比统计报告】)print( * 55)print(f指数{session.index_name})print(f区间{session.start_date} ~ {session.end_date})print(f指数涨幅{session.index_return}%)print(- * 55)print(f\n 总样本{stats[total_stocks]} 只个股)print(f\n 上涨个股{stats[up_count]} 只{stats[up_pct]}%)print(f 下跌个股{stats[down_count]} 只{stats[down_pct]}%)print(f➡️ 平盘个股{stats[flat_count]} 只)print(f\n 跑赢指数{stats[beat_index_count]} 只{stats[beat_index_pct]}%)print(f 指数涨幅 {session.index_return}%)print(f\n 收益分布)print(f 平均收益{stats[avg_return]}%)print(f 中位收益{stats[median_return]}%)print(f 标准差{stats[std_return]}%)print(f 最高收益{stats[max_return]}%)print(f 最低收益{stats[min_return]}%)print(\n * 55)if stats[up_pct] 80:print(⚠️ 提示上涨个股不足 80%市场分化明显)if stats[beat_index_pct] 50:print(⚠️ 提示超半数个股未跑赢指数选股至关重要)if stats[std_return] 30:print(⚠️ 提示个股收益离散度大风险与机遇并存)print( * 55)✅ storage.py本地存储storage.pyJSON 本地存储import jsonFILE_PATH bull_market_analysis.jsondef save_result(data):with open(FILE_PATH, w, encodingutf-8) as f:json.dump(data, f, ensure_asciiFalse, indent2)✅ main.py交互入口main.py牛市个股上涨占比统计工具from models import StockPerformance, BullMarketSessionfrom analyzer import analyzefrom reporter import reportfrom storage import save_resultdef main():print( 牛市个股上涨占比统计工具教学版)# 牛市基本信息index_name input(指数名称如 沪深300)start input(牛市起始日YYYY-MM-DD)end input(牛市结束日YYYY-MM-DD)index_ret float(input(指数涨幅%))session BullMarketSession(index_name, start, end, index_ret)# 个股数据录入print(\n 录入个股数据空行结束)while True:symbol input(股票代码)if not symbol:breakname input(股票名称)ret float(input(区间涨幅%))session.stocks.append(StockPerformance(symbol, name, ret))# 统计分析stats analyze(session)if stats is None:print(⚠️ 无个股数据无法统计)return# 输出报告report(session, stats)# 保存结果result {session: {index: session.index_name,start: session.start_date,end: session.end_date,index_return: session.index_return},stats: stats}save_result(result)print(✅ 统计结果已保存)if __name__ __main__:main()五、README 与使用说明# 牛市个股上涨占比统计工具教学版## 项目说明统计牛市期间个股上涨占比与跑赢指数比例破除大盘涨我就赚的认知偏差。## 使用方式bashpip install numpypython main.py## 输入示例指数名称沪深300牛市起始日2024-02-01牛市结束日2024-05-01指数涨幅15.8## 适用范围- 量化投资课程- 市场结构教学- 投资者认知训练## 注意事项- 仅基于历史数据- 不构成任何投资建议- 使用前请阅读 DISCLAIMER.md六、DISCLAIMER.md免责声明与风险提示# 免责声明与风险提示## 免责声明本程序仅供**教学与科研用途**用于演示市场广度统计方法。作者不提供任何证券交易建议不推荐任何股票不承诺任何收益。## 风险提示1. 历史统计不代表未来市场表现2. 牛市定义存在主观性不同标准结果不同3. 个股表现受行业、市值、题材等多因素影响4. 上涨占比高不等于随便买都能赚5. 统计数据可能受幸存者偏差影响退市股未计入使用本工具产生的任何后果作者概不负责。七、核心知识点卡片教学向分类 内容Python 类、列表推导、NumPy 统计量化金融 市场广度、个股分化、跑赢指数投资理念 破除大盘涨个股涨误区认知训练 幸存者偏差、均值回归工程思想 模块化、数据驱动可扩展性 可接入历史行情 API八、总结工程师视角这是一个完全中立、去营销化、可教学的原型系统✅ 不鼓吹牛市✅ 不否定指数投资✅ 不伪装成选股神器它真正展示的是如何用 Python 把模糊的市场感觉转化为可验证、可反思、可纠偏的数据认知核心教学价值在于破除认知偏差- 大盘涨 20%可能 30% 的个股在跌- 牛市中仍有大量个股跑输指数- 普涨只是错觉分化才是常态本文代码仅供学习与技术交流不构成任何投资建议股市有风险入市需谨慎。利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛