)
金融科技示例工程【免费下载链接】ai_quant_tradeStock AI Trader: 1-stop platform for learning, sim live trading. Covers: stock basics, strategies, LLMs, factor mining, ML/DL/RL, graph nets, HFT, C deploy JoinQuant code. 股票AI操盘手一站式学习、模拟、实盘平台。涵盖股票基础、策略、大模型、因子挖掘、机器学习/深度学习/强化学习、图网络、高频交易、C部署及聚宽代码。项目地址https://gitcode.com/gh_mirrors/ai/ai_quant_trade点击查看免费下载本篇技术指南以 ai_quant_trade 仓库中 Stock_NeurIPS2018 样例 为核心完整讲解如何基于 FinRL Stable-Baselines3 复现论文《Practical Deep Reinforcement Learning Approach for Stock Trading》在道琼斯 30 支成分股上完成 A2C / DDPG / PPO / TD3 / SAC 五类深度强化学习交易策略的环境构建、模型训练与回测评估。读者学完后将掌握一套可复制到自有股票池上的 DRL 模拟交易研究流水线并能对照本文规避数据格式、训练/测试不一致、依赖版本等高频踩坑点。1. 样例背景与目录结构该样例位于 egs_trade/rl/a002_finRL_tutorial/a01_Stock_NeurIPS2018/其整体目标与仓库内其他 RL 样例如 a001_proto_sb3一致把深度强化学习真正用于多股票组合的模拟交易。样例目录包含以下关键文件README.md使用说明与踩坑记录本文的主体骨架1_Data.ipynb数据获取与特征工程2_Train.ipynb环境构建与 DRL 模型训练3_Backtest.ipynb回测与基线对比01_论文解读/对复现论文的逐节解读含 MDP 建模与 DDPG 原理requirements.txt依赖清单RESULT.md实验结果汇总run_e2e.pyfinRL 0.3.7 与 gymnasium/SB3 的 API 契约冒烟测试。复现的论文为Practical Deep Reinforcement Learning Approach for Stock TradingNIPS 2018 Workshoparxiv 1811.07522策略代码参考 FinRL-Tutorials 的 1-Introduction 章节。相比原始 notebook本样例做了两点本地化改造加入了大量中文说明并修复了部分无法跑通的 bug。训练环境参考单卡 GPU 下完成全部算法训练约需 15–30 分钟CPU 因训练速度过慢未进行测试本仓库 README 与训练 notebook 均明确标注。2. 环境安装与依赖清单2.1 主要依赖样例的运行依赖可分为三层策略库FinRLAI4Finance 基金会开源的强化学习金融交易库深度学习库PyTorchtorch对应 GPU 加速训练强化学习库Stable-Baselines3提供 A2C / DDPG / PPO / TD3 / SAC 等成熟算法实现。此外还包括数据获取yfinance、特征工程stockstats、投资组合优化pyportfolioopt、回测可视化pyfolio、交易时段exchange_calendars、tensorboard 日志等辅助库。2.2 安装步骤pip install -r requirements.txt pip install githttps://github.com/AI4Finance-Foundation/FinRL.git仓库内的 requirements.txt 给出了经过适配的依赖版本关键项如下stable-baselines32.9.0 gymnasium1.3.0 torch2.14.0 setuptools83.0.0 pyportfolioopt pyfolio tensorboard yfinance stockstats训练 notebook 顶部也保留了备用安装方式!pip install -r requirements.txt、!pip install git...FinRL.git或说明“把 FinRL 仓中的 finrl 文件夹拷到根目录即可使用”便于无法访问外网的离线环境。2.3 ElegantRL 备选库与 Windows 编译环境FinRL 除 Stable-Baselines3 外还支持 ElegantRL 与 Ray RLlib。README 提到 ElegantRL 比 stable-baselines3 更稳定可替换尝试但若在 Windows 上使用 ElegantRL需要先安装Microsoft C Build Tools约需 2.5G 空间打开 Visual Studio Build Tools 下载安装在“工作负荷”中勾选“使用 C 的桌面开发”在“单个组件/安装详细信息”中确保勾选两项MSVC 生成工具、Windows SDK。2.4 版本适配与 API 契约源码佐证本仓库对“老 FinRL 新 gymnasium/SB3”的兼容问题做了前置防御run_e2e.py 是一个不真正调用 FinRL避免其重量级原生依赖与 alpaca/wrds 拉取的冒烟测试它直接扫描finrl/meta/env_stock_trading/env_stocktrading.py源码并断言StockTradingEnv继承自gymnasium.Env而非旧版 gymstep()返回 5 元组(obs, reward, terminated, truncated, info)reset()接受seed参数并返回 2 元组(obs, info)Stable-Baselines3 的DummyVecEnv能正常包裹该环境。这些断言正好对应 gymnasium 与旧 gym 的关键差异若 FinRL 版本回退到 gym脚本会“快速失败”避免用户在训练时才发现问题。3. 策略设计与强化学习原理3.1 交易标的与基线市场道琼斯工业平均指数DJIA30 支成分股DOW_30_TICKER涵盖 AXP、AMGN、AAPL、BA、CAT、CSCO、CVX、GS、HD、IBM、JPM、KO、MSFT、V、WMT、DIS 等DRL 策略A2C、DDPG、PPO、TD3、SAC 五种深度强化学习算法进行模拟交易基线 1传统投资组合管理——最大化均值方差Mean-Variance Optimization基线 2道琼斯指数本身论文中用于对照市场表现。3.2 强化学习核心概念强化学习核心包含“智能体机器人”与“环境”交互流程如下智能体观察当前条件得到状态state智能体执行动作action环境进入新状态并给智能体一个数字奖励reward反馈新状态的好坏不断重复交互智能体追求最大化累计奖励。更形式化地股票交易可建模为马尔可夫决策过程MDP见 论文解读状态 s状态空间表示智能体对环境的感知例如人工交易员分析的各类信息。本实现中智能体从历史数据观察交易价格以及技术指标通过回放历史数据与环境交互学习。论文中的状态定义为s [p, h, b]即股票价格、持仓数量与账户余额动作 a动作空间编码智能体在每个状态可执行的动作。单支股票时a ∈ {−1, 0, 1}分别代表卖出、持仓、买入多支股票时a ∈ {−k, ..., −1, 0, 1, ..., k}例如“买 10 股 AAPL”或“卖出 10 股 AAPL”即动作值 10 或 −10。所有买入动作不得导致账户余额为负奖励函数 r(s, a, s′)用于激励智能体学习更好策略。典型设定为投资组合总市值的变动r(s, a, s′) v′ − v其中v′、v分别为状态s′、s下的组合总市值总市值 全部持仓市值pᵀh 账户余额市场环境DJIA 30 支成分股在回测时间段内的全部交易数据。3.3 论文方法与 DDPG 原理论文方法的核心是深度确定性策略梯度DDPG其三大组件Actor-Critic 架构建模大的状态与动作空间目标网络Target Network稳定训练过程Q′ 与 μ′ 拷贝 Q 与 μ 的参数提供时序差分备份两个网络交替更新经验回放Experience Replay降低样本相关性并提高数据利用率。论文指出传统方法的两个缺陷一是基于协方差矩阵的均值方差组合优化投资经理若想在每个时间点调整策略会非常复杂二是将交易视为 MDP 并用动态规划求解会因股票状态空间巨大而可扩展性差。DQN 虽用神经网络近似价值函数但离散动作空间会随股票数量指数增长造成“维度灾难”因此论文采用 DDPG 解决动作与状态的映射关系见 01_论文解读。4. 三步实战流程4.1 第一步获取数据1_Data.ipynb注意数据获取依赖 YahooDownloader 从 Yahoo Finance 拉取美股数据国内访问可能存在问题因此可以跳过此步骤直接使用数据集目录下提供的 train.csv / trade.csv。若网络可用流程如下安装 swig、wrds、pyportfolioopt并安装 FinRL用yf.download(tickersaapl, start..., end...)直接获取单只股票或用 FinRL 封装好的YahooDownloader(start_date, end_date, ticker_list).fetch_data()对 DJIA 30 全量标的拉取TRAIN_START_DATE2009-01-01至TRADE_END_DATE2021-10-29的 OHLCV 数据样例输出Shape of DataFrame: (94301, 8)包含 date/open/high/low/close/volume/tic/day 共 8 列close 使用复权收盘价day 为星期几 0–4用FeatureEngineer做特征工程加入技术指标与波动率指标技术指标INDICATORS默认 8 个macd、boll_ub、boll_lb、rsi_30、cci_30、dx_30、close_30_sma、close_60_smause_vixTrue加入 VIX 指数use_turbulenceTrue加入动荡指数Turbulence Index衡量给定资产范围内异常行为程度的风险指标用于金融危机等极端行情控制用data_split划分训练集与交易集最终train.to_csv(train_data.csv)、trade.to_csv(trade_data.csv)。训练与交易的时间窗口划分论文口径见 论文解读训练 2009-01-01 至 2020-07-01交易集外验证2020-07-01 至 2021-10-29样例输出训练集 83897 行、交易集 9715 行。4.2 第二步训练 DRL 模型2_Train.ipynb4.2.1 构建 OpenAI Gym 风格的市场环境训练环境使用 FinRL 的StockTradingEnv其实现位于finrl/meta/env_stock_trading/env_stocktrading.pyREADME 明确给出依赖路径。状态空间维度计算state_space 1 2*stock_dimension len(INDICATORS)*stock_dimension其中 1 为账户余额、stock_dimension 个为股票价格、stock_dimension 个为持仓数量、len(INDICATORS)*stock_dimension个为每支股票的技术因子状态。样例输出Stock Dimension: 29, State Space: 291。环境关键参数env_kwargs训练与回测共用参数值含义hmax100单笔最大买入股数动作先缩放到 0–1 再乘以 hmaxinitial_amount1000000初始资金num_stock_shares[0]*29各股票初始持仓buy_cost_pct/sell_cost_pct[0.001]*29买卖手续费比例千分之一state_space291状态空间维度stock_dim29股票数量tech_indicator_listINDICATORS技术指标列表action_space29动作空间维度reward_scaling1e-4奖励缩放系数随后通过e_train_gym.get_sb_env()得到 Stable-Baselines3 的DummyVecEnv向量化环境训练 notebook 打印类型确认为stable_baselines3.common.vec_env.dummy_vec_env.DummyVecEnv。4.2.2 训练五种算法通过开关变量选择算法if_using_a2c True if_using_ddpg False if_using_ppo False if_using_td3 False if_using_sac True五种算法统一采用DRLAgent位于finrl/agents/stablebaselines3/models.py训练模型输出保存在TRAINED_MODEL_DIR下的a2c/ddpg/ppo/td3/sac子目录保存为agent_*.zip。各算法超参数如下A2C默认参数total_timesteps50000训练日志显示n_steps5, ent_coef0.01, learning_rate0.0007DDPG默认参数total_timesteps50000PPOPPO_PARAMS {n_steps: 2048, ent_coef: 0.01, learning_rate: 0.00025, batch_size: 128}total_timesteps200000TD3TD3_PARAMS {batch_size: 100, buffer_size: 1000000, learning_rate: 0.001}total_timesteps50000SACSAC_PARAMS {batch_size: 128, buffer_size: 100000, learning_rate: 0.0001, learning_starts: 100, ent_coef: auto_0.1}total_timesteps70000。训练前还会用configure(tmp_path, [stdout, csv, tensorboard])配置日志使训练过程同时输出到终端、CSV 与 TensorBoard。SAC 训练日志中可以看到每若干 episode 打印一次begin_total_asset / end_total_asset / total_reward / total_cost / total_trades / Sharpe便于观察训练期组合表现。注意强化学习比机器学习慢很多本样例 CPU 训练约 2 分钟即可完成机器学习对比任务而强化学习单卡 GPU 约需 30 分钟且强化学习不稳定每次收敛的 loss 不同、效果可能差异大多跑几遍并调参是常态。4.3 第三步回测3_Backtest.ipynb4.3.1 波动率阈值风控回测阶段引入人工风控规则StockTradingEnv(dftrade, turbulence_threshold70, risk_indicator_colvix, **env_kwargs)。当波动率指标VIX超过阈值时判定市场波动剧烈环境强制空仓以规避风险。阈值设定方法为取训练窗口内风险指标的 99.6% 分位数样本内 VIXinsample_risk_indicator.vix.describe()显示均值约 16.47、最大 82.69quantile(0.996)≈ 64.57样本内动荡指数均值约 40.86、最大 652.51quantile(0.996)≈ 426.48。4.3.2 加载模型并预测trained_a2c A2C.load(os.path.join(TRAINED_MODEL_DIR, a2c, agent_a2c.zip)) # DDPG / PPO / TD3 / SAC 同理 df_account_value_a2c, df_actions_a2c DRLAgent.DRL_prediction(modeltrained_a2c, environmente_trade_gym)4.3.3 对比基线最大化均值方差均值方差Mean-Variance Optimization是经典投资组合管理策略。回测 notebook 实现了完整流程process_df_for_mvo()把长表数据按交易日重排为“日期 × 29 支股票收盘价”的矩阵StockReturnsComputing()按前后两天收盘价差值计算每日收益率计算平均收益meanReturns与收益的方差-协方差矩阵covReturns使用 PyPortfolioOpt 库的EfficientFrontier(meanReturns, covReturns, weight_bounds(0, 0.5))求max_sharpe()有效前沿权重马科维兹有效前沿相同风险下选择最大收益、相同收益下选择最小风险的组合将 100 万初始资金按权重分配到各股得到初始持仓Initial_Portfolio用TradeData Initial_Portfolio得到每个交易日的 MVO 组合资产序列。4.3.4 对比基线道琼斯指数原 notebook 中道琼斯指数基线通过YahooDownloader(start_date, end_date, ticker_list[dji])下载并以首日收盘价为基准归一化到 100 万close.div(fst_day).mul(1000000)。因国内无法访问 YahooDownloader本样例将该段代码注释回测对比以 A2C/SAC 与均值方差为主。4.3.5 性能对比与可视化将各策略账户净值与 MVO 结果按日期 merge 成一张表列名 A2C / DDPG / PPO / TD3 / SAC / Mean Var再用result.plot()绘制资产变化曲线并用 Quantopian pyfolio 工具finrl.plot.backtest_stats等计算详细回测指标。5. 模型目录结构与实验结果5.1 输出目录结构训练与回测产物按如下结构组织README 原图说明trained_models/ # 各算法 agent_*.zip 模型文件 results/ # 各算法训练日志stdout/csv/tensorboard与回测指标 csv tensorboard_log/ # tensorboard 日志5.2 实验结果仓库实测数据实验策略均值方差基线 DRL 策略 A2C 与 SAC训练环境单卡 GPU约 15–30 分钟账户初始资金 1000000。README 与 RESULT.md 记录3 个策略均实现很高收益。回测明细指标pyfolio 计算a2c: Annual return 0.531267 Cumulative returns 0.761977 Annual volatility 0.207082 Sharpe ratio 2.168219 Calmar ratio 5.108832 Stability 0.913644 Max drawdown -0.103990 Omega ratio 1.434179 Sortino ratio 3.603966 Skew NaN Kurtosis NaN Tail ratio 1.140148 Daily value at risk -0.024308 sac: Annual return 0.229471 Cumulative returns 0.316038 Annual volatility 0.135545 Sharpe ratio 1.597028 Calmar ratio 2.503250 Stability 0.885632 Max drawdown -0.091669 Omega ratio 1.300750 Sortino ratio 2.291562 Skew NaN Kurtosis NaN Tail ratio 1.029162 Daily value at risk -0.016218结合回测 notebook 的账户净值表可以看到A2C 期末资产约 176 万累计收益 76.2%、SAC 约 131.6 万、均值方差约 153.5 万A2C 在三者中表现最好。仓库总览 egs_trade/rl/README.md 也汇总了该样例市场为美股道琼斯 30年化收益 53.1%、最大回撤 -10.4%、夏普率 2.17。需注意上述结果是特定数据窗口与随机种子下的单次复现强化学习本身不稳定不同运行可能差异明显不能据此断言算法优劣。6. 潜在问题与不足仓库踩坑记录6.1 状态信息是否“看到了未来”问题状态用到了收盘价/最高价/最低价是否可能泄露未来信息解释不存在。因为这不是机器学习的分类或预测问题强化学习模型仅假设交易发生在收盘的最后一个时间点、使用该时刻的信息进行交易。当然这种假设较简单仅是一个原理演示级策略更完善的股票环境可参考 FinRL-Meta 的 meta 目录实现。6.2 训练与测试不一致测试引入了波动率阈值测试时加入了 VIX 阈值空仓规则而训练环境中没有该规则。原因模型无法完全学到风控策略因为股市崩盘样本很少因此需要加入人工策略出现大波动时卖出所有股票。这也是“训练/测试环境不一致”的典型案例实战中需权衡“模型自学习风控”与“人工规则兜底”的取舍。6.3 stable-baselines3 在 GPU 下 batch size 调大不加速README 记录SB3 在 GPU 环境下训练调大 batch size 也没有加速可能 SB3 在 GPU 下优化不佳可以尝试 ElegantRL 库。SAC 训练代码注释也提示“在单卡 GPU 下batch 调大显存占用和利用率也上不去不确定原因”。6.4 PyTorch 远程恶意代码执行风险存在 pytorch 远程恶意代码执行漏洞建议使用 1.13.1版本以规避。6.5 模拟环境的不足模拟环境相对简单没有考虑滑点slippage没有考虑股票停牌信息。因此在把策略迁移到实盘前需在更逼真的环境中补充这些要素。7. 常见问题 FAQ7.1 无法复现论文结果现象论文中的结果无法复现自己训练的模型比官方预训练模型性能差很多。原因强化学习不稳定建议调参或者多训练几遍同一个算法不同随机种子/不同训练轮次结果都可能显著不同。7.2numpy.float64 object has no attribute values读取训练数据时所有股票均混在一个 CSV 表里格式必须保持如下索引 日期 股票 0 2009-01-02 苹果 0 2009-01-02 亚马逊 1 2009-01-05 苹果 1 2009-01-05 亚马逊必须保持该格式同样的索引下至少有 2 个数据否则会报错。原因源码级finrl/meta/env_stock_trading/env_stocktrading.py的_initiate_state函数中self.data.close.values.tolist()约 404 行要求self.data.close必须是二维数组同文件__init__约 64 行中self.data self.df.loc[self.day, :]如果索引顺序排成 0,1,2,...会导致只取到一行、一维数据传入从而触发第 1 点所述问题因此若只有一支股票需要把索引全部改成一样这种情况几乎不存在可暂时忽略。解决方法三选一推荐第 3 种降低 numpy 版本把数据改成二维的即(10,)→(1,10)改完是否存在回测不完整性未详细验证保持上方所示的“索引-日期-股票”格式推荐。7.3zipline.assets not found现象anaconda3\lib\site-packages\pyfolio\pos.py:26: UserWarning: Module zipline.assets not found; mutltipliers will not be applied to position notionals. warnings.warn(原因pyfolio 报出的警告。Quantopians Zipline 只支持 Python 3.7 以下版本但 zipline 不是强制安装依赖可忽略该警告。8. 快速验证API 契约冒烟测试若只想快速验证“当前环境的 FinRL 与 gymnasium/SB3 版本是否兼容”无需完整训练即可运行仓库自带的端到端冒烟测试python egs_trade/rl/a002_finRL_tutorial/a01_Stock_NeurIPS2018/run_e2e.py脚本run_e2e.py会检查StockTradingEnv的父类是否为gymnasium.Env、step()是否返回 5 元组、reset()是否接受seed参数并验证 SB3DummyVecEnv的包裹与 step/reset 往返全部通过即输出E2E OK: a002_finRL_tutorial API contract holds for the upgraded stack.。该测试不依赖 FinRL 的本地安装路径时可通过环境变量FINRL_ENV_PATH指定env_stocktrading.py的实际位置。9. 小结与延伸至此一条完整的“数据获取与特征工程 → Gym 风格交易环境 → 五种 DRL 算法训练 → 波动率风控回测 → pyfolio 指标评估”流水线已跑通。本样例的核心价值在于提供了一套最小可复现的多股票 DRL 交易研究模板换掉DOW_30_TICKER与日期窗口即可迁移到其他股票池明确揭示了 DRL 交易研究的常见坑数据宽表格式、训练/测试环境不一致、SB3 GPU 利用率、RL 结果不稳定、版本兼容等提供了源码级佐证环境实现路径、run_e2e 契约测试与仓库内实测回测数据可直接作为后续策略迭代的基线参照。在此基础上可进一步探索仓库中更深入的主题更逼真的交易环境滑点/停牌、FinRL-Meta 的完善环境、以及 egs_trade/rl/a001_proto_sb3 中更基础的原型实现逐步把模拟交易能力延伸到实盘验证阶段。赞分享金融科技示例工程【免费下载链接】ai_quant_tradeStock AI Trader: 1-stop platform for learning, sim live trading. Covers: stock basics, strategies, LLMs, factor mining, ML/DL/RL, graph nets, HFT, C deploy JoinQuant code. 股票AI操盘手一站式学习、模拟、实盘平台。涵盖股票基础、策略、大模型、因子挖掘、机器学习/深度学习/强化学习、图网络、高频交易、C部署及聚宽代码。项目地址https://gitcode.com/gh_mirrors/ai/ai_quant_trade点击查看免费下载相关推荐FinRL 快速入门指南用 NeurIPS2018 股票交易系列走通数据 → 训练 → 回测DRL 全流程FinRL 快速入门指南用 NeurIPS2018 股票交易系列走通数据 → 训练 → 回测DRL 全流程 本文是 FinRL 官方文档 First Gl金融科技强化学习人工智能Momentum Firmware 的 JS Widget 视图组合式界面元素与按钮事件实战指南Momentum Firmware 的 JS Widget 视图组合式界面元素与按钮事件实战指南 Widget 视图是 Momentum Firmware J金融科技示例工程FinRL 多股票强化学习交易实战指南基于 Dow 30 从数据、环境到 DDPG 训练与回测FinRL 多股票强化学习交易实战指南基于 Dow 30 从数据、环境到 DDPG 训练与回测 导读 本指南以 FinRL 官方教程《Multiple Sto金融科技强化学习人工智能上一篇PHP面试问答项目使用教程下一篇3个魔法步骤用Mermaid Live Editor从零到专业图表创作创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考