Machine-Learning-and-AI-in-Trading
用 SVM、GMM 与 MLP 等机器学习算法,对股票价格进行量化预测与交易策略实验的研究代码库
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 SVM、GMM 与 MLP 等机器学习算法,对股票价格进行量化预测与交易策略实验的研究代码库
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2017年,一位名叫 Harsh Patel 的印度工程师在 GitHub 上传了一个仓库。他白天在 MiRL Lab 研究深度学习在医学影像中的应用,晚上和周末则埋头研究另一件事:能不能让机器学会炒股?
他的个人网站这样描述自己:"我出身农民家庭,靠着野心和快速学习能力走到了今天。"这个仓库——Machine-Learning-and-AI-in-Trading,就是他用代码践行野心的证明。
这个项目不是什么华尔街顶级量化基金的高深策略,而是一个典型的个人探索型量化实验。代码里充满了实验性的尝试:从最基础的 SVM(支持向量机)到多层感知器(MLP),从 GMM(高斯混合模型)市场状态识别到蒙特卡洛期权定价——你能看到一个人从"用机器学习预测股价"这个朴素念头出发,一步步尝试各种方法的完整轨迹。
整个项目代码量不大,仅包含两个核心 Python 脚本和一些研究型子模块,但涉及的技术栈相当全面,体现了量化交易研究中的典型工具链。
第一条路线:SVM + GMM 市场状态分类(SVM_Strategy.py)
这是项目的核心实验代码。作者用 pandas_datareader 从 Yahoo Finance 获取 SPY(标普500ETF)2000年到2017年的历史数据,通过 TA-Lib 计算技术指标:RSI(相对强弱指数)、SMA(简单移动平均线)、ADX(平均趋向指数)、SAR(抛物线止损反转)。然后用高斯混合模型(GMM) 将市场划分为若干"状态"——牛市、熊市、高波动、低波动等,最后用支持向量机(SVM) 在历史数据上训练,预测下一个交易日是买入、卖出还是持有信号。
作者在代码注释里承认,SVM 部分存在一些变量名拼写错误(unsup/unsupp/Regimes.Columns 等),导致该脚本实际上无法直接运行。这是一个典型的问题——代码更像是草稿而非生产级实现。
第二条路线:MLP + TensorFlow 股价预测(Trading_MLP_TF.py)
这个脚本用 TFANN(一个轻量级 TensorFlow MLP 封装)做股价回归预测。作者构建了一个10层深的神经网络(输入层→9个隐藏层→输出层,每层32个神经元),用 yahoostock.csv 作为数据源,通过 L2 正则化防止过拟合,ADAM 优化器最小化均方误差。训练完成后对测试集做预测并绘图。
有趣的是,这个脚本同样存在运行时错误——代码中混合了函数定义和执行逻辑,filePath 变量未定义,缺少 fit/predict 方法的实际调用——但核心的神经网络架构设计是清晰的。
第三条路线:蒙特卡洛期权定价 + 对数正态回归
项目还包含 C++ 实现的蒙特卡洛期权定价器(Monte_Carlo_call_option_pricer_simple.cpp)以及比特币价格的对数正态分布回归分析(lognormal_reg.py)。这些模块体量较小,更像是作者学习量化金融工具时的练习代码。

图1:比特币价格的对数正态回归拟合(来源:项目仓库)
| 组件 | 用途 | 备注 |
|---|---|---|
| Python | 主语言 | 数据处理 + 模型训练 |
| TensorFlow | 神经网络训练 | MLP 实现 |
| TA-Lib | 技术指标计算 | RSI/ADX/SAR 等 |
| Scikit-learn | SVM、GMM 实现 | 分类 + 聚类 |
| Pandas/NumPy | 数据处理 | 基础工具链 |
| yfinance / pandas_datareader | 数据获取 | Yahoo Finance 数据源 |
| Matplotlib / Seaborn | 可视化 | 策略回测绘图 |
这个项目最有价值的部分不是代码本身,而是 README 中透露的研究轨迹:作者从 LSTM 开始探索("LSTM 给出了有希望的结果"),然后转向 MD-LSTM 和 MiD-LSTM,同时尝试 GMM + SVM 的市场状态分类,以及基于规则的日内策略。这个从失败到新尝试的循环,本身就是量化研究的真实面貌。
不过必须指出,这个项目存在严重局限:
1. 数据质量问题。使用 Yahoo Finance 免费数据存在幸存者偏差(只使用目前还存在的股票,历史上退市或破产的股票不在数据集中),会导致回测结果过于乐观。
2. 过拟合风险。策略在单一资产(SPY)和单一时间段上优化,没有做交叉验证或样本外测试。一个在历史数据上"完美"的策略,往往在实盘中表现糟糕。
3. 交易成本被忽略。代码中计算收益时完全没有考虑手续费、滑点和流动性限制,这在实际交易中会显著影响策略盈利能力。
4. 代码本身无法运行。SVM 脚本存在变量名拼写错误,MLP 脚本缺少依赖变量定义。作者也在 README 里坦承:"These are my own codes which are strictly experimental."
这是一个个人量化研究实验库,展示了用机器学习做股价预测和交易策略探索的典型流程。代码非生产级,但作为学习量化交易研究方法的参考素材——特别是了解如何将技术指标、市场状态识别与机器学习分类器结合——具有一定的启发价值。
适合谁看:对量化交易好奇、想了解 ML 在金融领域应用的初学者。不适合想直接拿代码实盘的人。