Skip to content

jaychouchannel/python-stock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

python-stock:A股量化回测 & 自动选股(AkShare + RandomForest)

一个以 AkShare 获取 A 股历史数据,结合 随机森林(RandomForest) 做涨跌概率预测,并提供:

  • 单只股票回测(含仓位/止盈止损/净值曲线)
  • 自动选股(遍历股票池输出候选标的) -(部分版本)新手实操交易建议导出(买入区间/止盈止损/仓位建议)

本仓库目前以多个版本脚本迭代为主(如 V15.0.pyV22.0.pyLast.py 等),你可以直接运行其中一个脚本体验功能。


目录


功能概览

1)单只股票回测(示例:V22.0.py)

  • 自动拉取指定股票 2023-01-01 起的 后复权 日线数据
  • 计算指标/特征(如 RSI、成交量倍率、趋势得分、ATR、乖离率、换手率等)
  • 训练模型预测 “次日上涨概率”
  • 按策略规则动态调整仓位,执行止盈/止损
  • 输出:
    • 训练/测试准确率(仅反映分类正确率,不等于收益率)
    • 回测净值曲线、仓位图
    • 最大回撤点、夏普、日胜率、交易统计等

2)自动选股(示例:V22.0.py)

  • 遍历预设股票池(可在脚本里改)
  • 对每只股票进行特征工程与预测,输出候选标的列表
  • 结果会按上涨概率排序并导出 CSV

3)指令面板(示例:Last.py)

  • 更轻量的特征(成交量倍率、趋势得分、ATR)
  • 输出“目标仓位比例”“建议下单股数”“移动保护位(止损价)”“风险压力测试”等指令信息
  • 同样会绘制策略净值曲线

项目结构(按现有文件推断)

仓库以脚本为主,版本号文件代表策略/功能迭代。

  • V22.0.py:增强版主脚本(回测 + 自动选股 + 图表输出 + 日志)
  • Last.py:V13.5 指令面板版本(简化特征 + 仓位建议/保护位)
  • V15.0.py / V16.0.py / V17.0.py / V20.0.py / V21.0.py / V23.0.py 等:历史迭代版本(可自行对比)
  • *_data_v2.csv:示例/缓存数据(仓库中看到多只股票的 CSV)
  • *_strategy_result_YYYYMMDD.png / *_enhanced_strategy_result_YYYYMMDD.png:回测图表输出示例
  • auto_selection_result_YYYYMMDD.csv / auto_selection_enhanced_result_YYYYMMDD.csv:选股结果输出示例
  • 选股结果_YYYYMMDD.csv新手实操建议_YYYYMMDD.csv:结果/建议输出示例(仓库中已存在同名文件)
  • .gitignore.idea/:工程配置

环境依赖

Last.pyV22.0.py 看,核心依赖为:

  • Python 3.9+(建议 3.10/3.11)
  • pandas
  • numpy
  • matplotlib
  • scikit-learn
  • akshare

Windows 终端中文显示:脚本里配置了 SimHeiMicrosoft YaHei 字体;如果你的环境没这些字体,图表中文可能乱码。


安装与运行

建议使用虚拟环境:

python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate

安装依赖(仓库暂未看到 requirements.txt,你可以先手动装):

pip install -U pip
pip install pandas numpy matplotlib scikit-learn akshare

如果你希望我把依赖整理成 requirements.txt / pyproject.toml,我也可以按你常用的 Python 版本补一份。


方式 A:运行 V22.0(增强版:回测 + 自动选股)

python V22.0.py

启动后会提示选择功能:

  • 1:单只股票增强版回测
  • 2:自动选股(增强版)

按提示输入股票代码(如 002415600519)。


方式 B:运行 Last.py(V13.5 指令面板/简化特征)

python Last.py

按提示输入:

  1. 股票代码(如 601868
  2. 实盘总本金(元)

脚本会输出类似“量化策略指挥部”的面板,包括:

  • AI 信心值(上涨概率)
  • 趋势得分、成交倍率
  • 目标持仓比例
  • 建议下单股数(100 股整数倍)
  • 移动保护位(止损价)与潜在亏损测算

策略与模型说明(重要)

以下说明以 V22.0.py / Last.py 的实现为准(不同版本细节略有差异)。

数据来源

  • 通过 AkShare 接口 stock_zh_a_hist 获取 A 股日线数据
  • 使用 后复权(hfq) 以保证价格序列的连续性(更适合长期回测对比)

特征工程(以 V22.0 为例)

V22.0 中使用的核心特征包含(以脚本实际为准):

  • RSI:相对强弱指标
  • MA5/MA20/MA60 均线系统
  • MA5_BIASMA20_BIAS:均线乖离率(超买超卖参考)
  • Vol_Ratio:成交量倍率(成交量 / 成交量5日均值)
  • Trend_Score:趋势得分(例如收盘在 MA60 上方记 1.0)
  • ATR + ATR_Ratio:波动率与 ATR 占比
  • 换手率:若数据源缺失则容错为 0
  • Vol_Change:成交量变化率
  • Industry:行业因子(脚本内置股票-行业映射与数值化)

预测目标(分类标签):

  • Target = (次日收益率 > 0),即预测“明天涨不涨”。

训练/测试划分

  • 训练集:2023-06-01 ~ 2023-12-31(用于学习近期规律)
  • 测试集:2024-01-01 至今(用于回测/评估)

注意:这是一种固定切分方式。实际使用可考虑滚动训练/Walk-forward 等更贴近实盘的方法。

仓位与风控(以 V22.0 为例)

  • 预测概率 Prob 超过阈值后开仓(阈值在 SELECTION_CONDITIONS['min_prob'] 中配置,默认 0.5)
  • 按趋势强弱给不同仓位(例如强趋势给到 0.8,弱趋势给到 0.3)
  • 止盈:从入场后最高点回撤超过 1.5 * ATR 触发
  • 止损:亏损超过 2% 或跌破 entry - 2 * ATR 触发
  • 手续费:用 0.0012(0.12%)模拟(脚本中写明“印花税+佣金”,实际请以券商为准,并考虑滑点)

输出文件说明

不同脚本可能输出不同文件名,常见包括:

  • stock_strategy_YYYYMMDD.log
    策略日志(V22.0 使用 logging 输出,便于排查数据抓取/回测过程)

  • {code}_enhanced_strategy_result_YYYYMMDD.png
    回测净值曲线 + 仓位图(V22.0 会保存)

  • auto_selection_enhanced_result_YYYYMMDD.csv
    自动选股结果(包含最新价、上涨概率、趋势得分、RSI、最大回撤、预测准确率等字段)

  • (可能)trade_advice_YYYYMMDD.csv
    新手实操建议(部分版本附带:买入区间、止盈止损、仓位建议等)

仓库根目录中也能看到一些已生成的示例输出,例如:

  • 600519_enhanced_strategy_result_20260311.png
  • auto_selection_enhanced_result_20260311.csv
  • 选股结果_20260311.csv
  • 新手实操建议_20260311.csv

常见问题(FAQ)

Q1:为什么运行时提示抓取失败 / 数据为空?

  • 股票代码必须是 6 位纯数字(如 600519002415
  • 网络问题、AkShare 数据源暂时不可用、或该标的停牌等,都可能导致为空

Q2:图表中文乱码怎么办?

  • Windows 通常可用 SimHeiMicrosoft YaHei
  • macOS/Linux 需要安装中文字体或修改 matplotlib 字体配置

Q3:测试集准确率高,为什么收益不一定高?

  • 分类准确率只说明“涨跌方向猜对了多少”,并不直接等价于“可交易收益”
  • 交易策略还受仓位、止盈止损、手续费滑点、行情结构等影响

Q4:如何自定义股票池与选股条件?

V22.0.py 顶部可以找到类似配置:

  • STOCK_POOL = [...]
  • SELECTION_CONDITIONS = {...} 按你的需求修改即可。

风险提示与免责声明

  • 本项目仅用于 学习与研究(量化、机器学习、回测框架思路),不构成任何投资建议。
  • 历史回测不代表未来表现,实盘可能出现连续亏损、滑点扩大、流动性不足、极端行情失效等情况。
  • 请务必结合自身风险承受能力,谨慎使用;新手建议先小资金/模拟盘验证。

致谢

  • AkShare 提供数据接口支持
  • scikit-learn / pandas / numpy / matplotlib 等开源生态

About

A-share (China) stock quantitative research toolkit in Python using AkShare and RandomForest—supports single-stock backtesting with risk controls, equity curve visualization, and automated stock screening with CSV/PNG outputs.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages