machine-learning-for-trading 第 21 章实战:用强化学习解决执行、做市与对冲的顺序决策问题

发布时间:2026/9/13 20:58:58
machine-learning-for-trading 第 21 章实战:用强化学习解决执行、做市与对冲的顺序决策问题 machine-learning-for-trading 第 21 章实战用强化学习解决执行、做市与对冲的顺序决策问题【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading本章围绕《Machine Learning for Trading》第 3 版仓库中的 第 21 章 展开核心主题是强化学习Reinforcement Learning, RL在金融中最可信的应用场景不是宽泛的 alpha 发现而是执行、做市与衍生品对冲。本文先解释为什么 RL 与监督学习的本质差异预测 vs 控制决定了它的适用边界再以 MDP 建模为起点逐一剖析仓库中 7 个可运行 notebook 的实现细节从 DQN/PPO/A2C 三算法同环境对比到 PPO 最优执行、加密永续合约执行、做市、深度对冲、逆向强化学习最后落到第 21.8 节的模拟到现实sim-to-real鸿沟与部署纪律。读完你将掌握如何用 Gymnasium 编写无前视偏差的交易环境、如何用rl_calibration把真实市场数据校准进模拟器、如何用配对paired标准误诚实解读基准对比结果以及为什么平均奖励无法告诉你一个策略到底在不在交易。为什么金融场景中的 RL预测与控制分离本章开篇就给出了全书最关键的论断监督学习负责预测可能会发生什么而 RL 负责在动作会影响未来结果时决定下一步做什么。这个区分决定了 RL 在金融中只有特定场景下才真正有价值——执行、做市和套期保值具有清晰的目标函数、紧密的反馈回路和可辩护的奖励信号因此是 RL 的结构性主场而宽泛的 alpha 发现缺乏这些条件RL 并不天然优于监督学习。仓库在第 21.121.8 节用一条逻辑链展开这一论点先建立金融问题 部分可观测马尔可夫决策过程POMDP的建模语言再给出从 DQN 到 actor-critic 的实用算法地图然后用执行、做市、对冲三个应用案例验证最后用模拟到现实的鸿沟来收束结论。贯穿始终的方法论是RL 不是自动跑赢市场的开关而是一套必须在奖励设计、模拟器真实性与基准公平性上保持严格自律的顺序决策工具。金融市场作为 MDP状态、动作、奖励与部分可观测性第 21.2 节强调MDP 的规格说明不是技术形式主义而是把市场假设、约束与经济目标嵌入模型的一次建模决策。你需要明确回答状态包含什么价格、波动率、流动性、持仓、动作空间是什么离散仓位 vs 连续执行节奏、奖励如何定义负的实现缺口、库存风险惩罚、尾部风险度量、转移如何模拟GARCH 路径、真实 K 线回放、折扣因子取多少。仓库中这一节对应的核心模块是 rl_environments.py 与 rl_calibration.py。其中ExecutionEnv是本章最重要的环境类之一其状态向量为六维状态分量含义inventory_ratio尚未卖出的订单比例time_ratio剩余时间占整个执行视界的比例spread当前买卖价差×100 缩放后进入观测depth当前可用流动性÷1000 归一化volatilityGARCH 条件波动率×100 缩放regime市场状态0正常1压力动作是[0,1]区间的连续量作为参考节奏的乘数pace_min_multiplier0.5到pace_max_multiplier1.5而不是直接指定成交量——这样任何策略都无法单步清仓保证了比较的是何时交易而非订单是否放得下。奖励为负的实现缺口加库存风险惩罚与节奏偏离惩罚两者默认均为 0由 notebook 显式传入。部分可观测性是本节的另一个重点为什么状态工程、循环模型recurrent models和私有 agent 信息在金融应用中如此重要因为交易者永远看不到完整的市场状态对手盘意图、流动性全貌只能从观测中推断。这也是后续 notebook 反复强调观测只能使用已收盘 K 线的深层原因。核心算法地图从 DQN 到 Actor-Critic第 21.3 节给出的是实用算法地图而非完整 RL 综述离散动作问题可以用基于价值的方法DQN而大多数真实的金融控制任务需要能处理连续动作的 actor-critic 方法。同时引入风险敏感变体并厘清稳定性、样本效率与动作空间灵活性之间的权衡。仓库用 01_algorithms_comparison.ipynb 落地这一节在同一交易环境、同一交互预算下训练 DQN、PPO 和 A2C并在相同 episodes 上评分。该实验的核心教学点不是排名而是单个平均奖励无法告诉你策略是在交易还是已经坍缩到一个仓位上而动作的分布可以。GARCH(1,1) 校准的收益率过程环境的收益率过程是拟合到 BTCUSDT 小时线通过data.load_crypto_perps读取的GARCH(1,1)模型$$\sigma_t^2 \omega \alpha , r_{t-1}^2 \beta , \sigma_{t-1}^2$$方差由常数 $\omega$、对上一收益率的反应 $\alpha$ 与携带前一方差的持续性项 $\beta$ 组成。当 $\alpha \beta$ 接近 1 时大波动会引发波动并缓慢衰减——这就是波动率聚集volatility clustering投机价格序列中最稳健的统计规律。CryptoMarketCalibrator见 rl_calibration.py加载小时线后取收盘价对数收益率用arch包拟合 GARCH(1,1)并施加一个原始拟合没有的约束若 $\alpha\beta$ 达到或超过平稳性上限则按比例缩放到恰好落在上限目标持久性 0.98。否则方差过程没有长期均值模拟路径会漂移到任意尺度。校准失败时还有基于平方收益率自相关矩估计的回退实现_fit_garch_moments。无前视偏差的环境设计SimpleTradingEnv的两个设计决策比其他部分更重要奖励支付的是已经持有的仓位在 $t$ 步agent 看到刚发生的收益率 $r_t$但收取的奖励是 $p_{t-1} r_t$——即上一步选择的仓位所赚的收益减去变动成本当前动作只在 $t1$ 生效。没有这个时序agent 就能利用已经观测到的收益率行动那正是让模拟交易结果毫无意义的前视偏差look-ahead。观测被缩放到可比量级小时收益率是百分比的零头而默认权重初始化的神经网络对 $O(1)$ 量级的输入处理得好得多因此波动率与动量特征在进入观测前乘以 10。观测为五元组当前收益率、上一期收益率、VOL_WINDOW20步滚动标准差、MOM_WINDOW5步动量求和、当前仓位。三个算法的信号来源差异与超参仓库对三个算法的定位01_algorithms_comparison.pyDQN基于价值、off-policy。学习动作价值函数 $Q(s,a)$用 replay buffer 复用历史转移因此每个单位进步需要的新鲜环境步数更少。超参learning_rate1e-4、buffer_size10_000、batch_size64、gamma0.99、exploration_fraction0.3、exploration_final_eps0.05。PPOactor-critic、on-policy。显式持有策略用策略梯度直接更新并用学习到的价值函数降低梯度方差clipped objectiveclip_range0.2截断超出范围的更新这是其稳定性的来源。超参learning_rate3e-4、n_steps256、n_epochs10。A2C无裁剪的 actor-critic从很短的 rollout 更新是家族中更便宜也更不稳定的成员。之所以用它而不是 SAC是因为动作空间是离散的而 SAC 需要连续动作。超参learning_rate7e-4、n_steps5。三者共享TOTAL_TIMESTEPS50_000的交互预算、同一 seed 与各自独立的环境实例防止一个算法的训练推进另一个算法的随机状态。注意奖励以百分比而非小数返回奖励的尺度决定每次梯度步的有效大小原始小时收益率太小会让 Stable-Baselines3 的默认学习率在预算内几乎不前进。为什么平均奖励不够位置分布诊断实验在 10 个固定 eval seed123132上做配对评分随后在同一诊断 episodeseed 456上记录完整轨迹。真正的诊断是动作分布一个策略在三个仓位Short -1 / Flat 0 / Long 1上停留的步数统计。策略如果固定在单一仓位上就已经停止响应观测了——只要该仓位碰巧合适它会一直收集体面的平均奖励。此外由于模拟器无漂移且存在非负交易成本该环境中任何策略的期望奖励都不可能为正高于零的均值只是抽样波动。结论把策略动作画出来是最便宜的检查手段适用于任何动作空间小到可以枚举的 RL agent。应用一最优执行——PPO vs TWAP vs Almgren-Chriss第 21.4 节把执行定义为机构 RL 最干净的使用场景围绕实现缺口implementation shortfall、时机风险与市场冲击展开把 RL 定位为 TWAP、Almgren-Chriss 这类固定时间表在流动性与波动率随时间变化时的动态替代方案。关键提醒是不是 RL 一定赢而是任何改进主张都高度依赖模拟器真实性、奖励设计与谨慎的基准对比。仓库对应两个 notebook形成模拟器训练 → 真实数据回放的递进模拟环境中的 PPO 清仓02_optimal_execution_ppo02_optimal_execution_ppo.ipynb 训练 PPO agent 逐EXECUTION_HORIZON60步清算TOTAL_SHARES10_000股并与两个固定时间表在逐字节相同的模拟路径上对比同时报告配对差与其标准误。实现缺口以到达名义价值的基点计$$\text{IS} \sum_i (P_0 - P_i)$$其中 $P_0$ 是到达价arrival price。三个成本来源价差卖家越过买价每股让出半个价差、临时冲击与参与率即订单消耗可用流动性的比例共同增长、永久冲击市场把成交解读为信息价格不完整恢复每卖一股都让后续更便宜。而等待也有成本未卖出的库存暴露在价格自身波动中由奖励中的风险厌恶项收取。校准的诚实标注是本节最值得学习的地方。notebook 明确区分了三类参数来源CryptoMarketCalibrator.get_execution_env_params直接拟合garch_alpha、garch_beta、garch_uncond_volGARCH 于小时对数收益率p_stay_normal、p_stay_stressed滚动波动率四分位分割的状态转移。代理proxyspread_normal/spread_stressed用的是小时高低价区间的中位数而非报价价差——对 BTC 永续这种流动性市场小时区间远宽于真实报价价差因此所有策略都支付了比真实执行大得多的成本depth_normal/depth_stressed用的是小时成交量中位数而非盘口挂单深度这解释了为什么压力状态的 depth 反而更大成交量在压力时上升而挂单深度下降。假设assumedpermanent_impact/temporary_impact由 Amihud 非流动性比率重标定后被夹到下限——对这种流动性市场重标定估计远低于下限所以环境收到的就是夹子本身冲击模型里的数字没有任何一项是被测量出来的。Almgren-Chriss 基准是 oracle其静态时间表为$$q_t Q , \frac{\sinh(\kappa (T - t))}{\sinh(\kappa T)}, \qquad \kappa^2 \frac{\lambda \sigma^2}{\eta}$$实现需要 $\sigma$ 与 $\eta$而该实现用的是整个 episode 的平均波动率与平均深度——这是交易者在开始时不可能拥有的信息02_optimal_execution_ppo.py。因此它衡量的是一个完美知情的静态计划能做到多好而非在线策略可以声称超越的对手。PPO 使用ent_coef0.01熵奖励防止策略过早坍缩到发现 TWAP 就不探索这一常见失败模式。评估在每个 eval seed 上构造全新ExecutionEnv使配对比较不受状态串扰。除了短fall 分布还要读成交量在视界内的位置末四分之一成交量占比与最后一步单独占比对照均匀节奏的参考线60 步时末四分之一应为 25%。把成本推迟到视界末尾不是省钱而是在押注流动性且最后一步无视参与率上限强制清仓——推迟的可测代价就在这里。真实永续合约 K 线回放04_crypto_execution_rl04_crypto_execution_rl.ipynb 用记录的 BTCUSDT 永续合约小时 K 线替代模拟路径因此 agent 的状态可以携带模拟器必须发明的变量永续-现货溢价指数premium index与距离下次资金费结算的小时数。价格是真实的agent 面对的是真实发生过的波动率与流动性但成交仍是建模的所以它不能证明真实订单的成本。面板构建的核心纪律04_crypto_execution_rl.pyohlcv与每 8 小时发布的 premium index 用join_asof(strategybackward)前向填充模拟交易者当时能看到的最新溢价。每个决策使用的特征都来自已收盘的 K 线收益率、24 小时滚动波动率、成交量、溢价全部shift(1)滞后一小时。其中成交量列权重最大——环境对成交量的参与率上限用前一小时的成交量计冲击因为那是决策时能看到的最新流动性。按日期切分训练与评估训练 episode 全部早于EVAL_START_DATE2024-01-01报告 episode 全部不早于它并用assert train_data[timestamp].max() evaluation_data[timestamp].min()显式验证切分。观测为七元组inventory_ratio、time_ratio、volatility、premium_index、volume_ratio前小时成交量 / 24 小时均值、hour_of_day、hours_to_funding。动作仍是[0,1]节奏乘数但参与率上限是前小时成交量的十分之一冲击为平方根加线性的参与率函数。与模拟版本不同最后一步没有参与率豁免未清仓部分在同一条 K 线上强制平仓且强制部分与策略自身部分按合并参与率计冲击——拆单与一次卖完成本完全相同每个此类 episode 记一次forced liquidation。评估基准有三个TWAP什么都不知道、funding-aware 规则在溢价丰厚、距结算 ≤2 小时时加速FUNDING_SPEEDUP1.25、PPO。三个策略在相同 seed 窗口上配对对比。诊断强调两点forced-liquidation 率 ≠ forced 成交量一个策略可能大部分 episode 都以非自愿交易结尾但只以这种方式平掉极小比例订单——那是节奏习惯而非执行失败只报率会无法区分两者。按溢价状态/资金距离分组的执行率只是关联不是因果证据shares_sold还受剩余库存、剩余时间、参与率上限影响而溢价具有持续性按它分组的时段在其他方面也不一样。要确证特征被使用需要固定其余状态做敏感性检验或去掉该特征重训。应用二做市——PPO 报价 vs 保留价规则第 21.5 节说明为什么做市是天然 RL 问题报价决策必须持续权衡价差收入、库存风险与逆向选择。经典 Avellaneda-Stoikov 基准提供了有原则的参照点而 RL 框架展示了自适应报价如何在不需要完全指定的解析假设下响应更丰富的市场状态。03_market_making_ppo.ipynb 训练 PPO agent 在每个 500 步 episode 中选择报价 skew三个水平-1/0/1单位是四分之一个价格标准差与价差宽度三个乘数0.8/1.0/1.25构成 9 个离散动作。关键实验设计环境把每条报价都居中在保留价reservation price上agent 与固定规则一视同仁$$p^r_t p_t \left(1 - \frac{q_t}{q_{\max}} , \sigma_t \right)$$持仓多头会把两条报价都下拉使 ask 更接近市场、更容易成交bid 更远、更难成交。因此比较隔离出的问题是窄而可回答的学习到的 skew 与可在 episode 内变化的价差宽度给已经程序化内置的库存响应增加了什么成交模型是整个 spread-vs-fill-rate 权衡的来源距离中价 $d$ 的限价单一步成交概率为$$P(\text{fill}) 1 - \exp\left(-\lambda , e^{-\kappa d / s} , m\right)$$其中 $s$ 是基础价差、$\lambda$ 到达率、$\kappa$ 距离敏感度、$m$ 是被冲击一侧 1 的不平衡因子——$m$ 正是逆向选择的入口maker 更容易在被市场远离的一侧成交。奖励为标记财富增量减库存惩罚$r_t \Delta W_t - \lambda_q (q_t/q_{\max})^2 p_{t1}$episode 结束时剩余库存以半个价差成本清算策略无法靠持仓隐藏风险。训练采用VecNormalize(norm_obsTrue, norm_rewardTrue, clip_obs10.0, clip_reward10.0)六维观测尺度差异悬殊、逐步奖励被少数大幅库存价值变动主导两者都会让策略梯度优化器难以收敛。评估时必须冻结归一化统计量并关闭奖励归一化——运行统计量是训练策略的一部分不应用它们等于给网络投喂它从未见过的输入分布。评估用 240 个配对 episode 对三个Reservation 不同宽度规则与 PPO 打分并采用预先固定的参考基准与 3 个标准误的分辨阈值——先看哪条规则最好再测试它会让区间变成选择产物selection artefact。报价偏移拆成两部分环境保留价贡献的部分固定规则也是这个值与 agent 自己加的 skew。读取时要对照报价发出时的库存而非成交后的持仓否则会把答案的一部分建进 x 轴。应用三深度对冲——把对冲从精确复制重构为摩擦感知的风险控制第 21.6 节从精确复制转向摩擦感知的风险控制交易成本、离散再平衡与模型误设会削弱经典 delta 对冲而当目标显式地是终端 PL 的风险度量时深度对冲才真正有趣。与 Whalley-Wilmott、表格 Q-learning 与 delta 对冲的对比教会读者谨慎解读学习到的对冲结果而非假定神经网络自动优于经典基准。05_deep_hedging_pfhedge.ipynb 在离散再平衡与比例成本下对冲一个空头看涨期权精确复制已不可能问题变成接受哪种 PL 分布。五种对冲在完全相同的 Heston 路径上对比Black-Scholes delta、Whalley-Wilmott、pfhedge深度对冲器、从零手写的同一思想、表格 Q-learner05_deep_hedging_pfhedge.py。自融资 PL 约定$$\text{PL} \underbrace{\sum_{t} \delta_t (S_{t1} - S_t)}{\text{对冲收益}} - \underbrace{c \sum{t} |\delta_t - \delta_{t-1}| , S_t}{\text{交易成本}} - \underbrace{\max(S_T - K, 0)}{\text{期权赔付}}$$完美的对冲应使该量为常数在摩擦下它是一个分布整个主题是偏好哪种分布。训练目标为5% 预期缺口expected shortfall即最差 5% 路径的平均 PL——这与最小化方差不同方差对好消息与坏消息一视同仁预期缺口只看亏损尾部。底层用 Heston 随机波动率过程使得 Black-Scholes delta 不仅是离散化的而且是用错模型的为了让解析基准不带伤上阵它们被给予每条路径的实现波动率而非单一常数。实现细节值得注意三组各 10,000 条独立路径训练、验证、评估。三个训练 seed42/314/2718各训一次在验证集上选预期缺口中位数的那次评估集在选 seed 之前完全不被触碰——否则选择本身就会污染报告数字。深度对冲器状态为四元组log_moneyness、time_to_maturity、volatility、prev_hedgerollout 全程可微尾部损失可直接反传05_deep_hedging_pfhedge.py。PL 约定被双向核对把pfhedge的compute_pl与自写公式在同一 delta 仓位序列上比对断言差距 1e-5——同一套 PL 约定是关于两个实现的声明必须检查而非断言。比较基于 PL 分布形状经验 CDF保留直方图隐藏的尾部报告均值、标准差、预期缺口与最差路径四个数字让均值目标与尾部目标的分野可见。复现提示seeded PyTorch 训练是设备相关的不同 CUDA 或 PyTorch 构建预期产生不同 PL提交的运行数字仅对应其打印出的版本。逆向强化学习从观测行为反推目标第 21.7 节把章节从优化已知奖励拓宽到从观测行为推断目标并区分逆向 RL 与行为克隆行为克隆跳过问题直接拟合动作产出策略但没有解释逆向 RL 拟合奖励产出解释并通过解释得到原则上可迁移到原时间表不适用市场的策略。06_inverse_reinforcement_learning.ipynb 把箭头倒过来给定交易者的行为记录什么目标会让这些动作合理演示数据来自目标已知的规则TWAP因此推断出的奖励可以对照真相检验而非被欣赏06_inverse_reinforcement_learning.py。对比三族方法行为克隆直接拟合状态-动作对。分裂时保证同一 episode 的状态不会跨过训练边界并观察一旦克隆开始自己驱动环境、其误差如何增长分布漂移。最大熵 IRL在固定候选轨迹库上写出执行特征上的线性奖励包括让目标成为似然的配分函数partition function用梯度上升优化IRL_ITERATIONS100。特征期望匹配让当前策略 rollout 的专家特征期望与演示对齐——注意区分两种过程哪个有可下降的目标函数、哪个没有。对推断出的奖励权重要按它们的本来面目阅读在一种不能识别出唯一奖励的参数化下它们只是什么与演示行为共变的描述。可识别性identifiability、演示质量与模型假设严格限制了真正能推断出的东西——这正是本节对读者最大的概念价值。模拟到现实的鸿沟部署纪律第 21.8 节是全章的总纲性警示非平稳性、冲击反身性、延迟、糟糕的成交假设与奖励黑客reward hacking才是金融 RL 部署的真正障碍而不只是选对算法。章节由此从一堆有前景的应用转向RL 在实践中成立必须满足什么条件的可靠指南落脚点是模拟器保真度、离线 RL、离线策略评估、分阶段部署与治理。仓库在 07_backtest_with_impact.ipynb 用回测落地其中的冲击反身性维度在覆盖流动性区间的真实美股标的上用四种强度的平方根冲击模型运行一个动量策略与一个美元订单分别测量冲击收费吃掉了多少纸面收益、在流动性与稀薄两个队列中它多频繁地成为盈亏的分水岭。这回答了执行 notebook 里参与率上限只在不寻常的薄小时段才收紧刻意留下的问题当订单规模开始占流动性的实质比例时假设的变化会如何改变结论。全章的总结性信息Summary是RL 对具有明确定义经济目标、在现实假设下评估的顺序控制问题最可信其贡献是把应用案例研究与对基准、模拟设计与部署风险的纪律性怀疑结合起来。运行方式与验证仓库为第 21 章提供了两套运行路径21_rl_execution_hedging/README.md# 从仓库根目录运行某个 notebook 的脚本版 uv run python 21_rl_execution_hedging/notebook.py # 测试模式通过 Papermill 减少数据 uv run pytest tests/test_chapter_notebooks.py -v -k 21_rl_execution_hedging此外环境与执行语义有独立测试覆盖tests/test_ch21_rl_environments.py 验证了波动率序列是条件的而非已实现的test_volatility_series_is_conditional_not_realized、终端行奖励与返回奖励一致test_terminal_row_reward_matches_the_returned_reward、报价库存是报价所响应的那个仓位test_quote_inventory_is_the_position_the_quote_responded_to、冲击是平方根加线性的test_impact_is_square_root_plus_linear、薄流动性下强制清算可达test_forced_liquidation_is_reachable_under_thin_liquidity、强制剩余不计库存风险test_forced_remainder_is_not_charged_inventory_risk以及终端拆单不比一次交易便宜test_terminal_split_is_not_cheaper_than_one_trade等关键不变量。运行前需要仓库环境包含stable-baselines3、gymnasium、arch、pfhedge、polars、plotly等依赖加密 notebook 还需通过data.load_crypto_perps/data.load_crypto_premium读取小时级永续 K 线与溢价指数。章节参考文献脉络第 21 章的参考文献覆盖了支撑上述每个应用的原始工作逆向 RL 综述Arora Doshi, 2021、Deep hedgingBuehler et al., 2019、ABIDES 多 agent 市场模拟Byrd et al., 2020、Decision TransformerChen et al., 2021、G-Learner 与 GIRLDixon Halperin, 2020、Soft Actor-CriticHaarnoja et al., 2018、带 RL 的最优执行Hafsi Vittori, 2025、QLBSHalperin, 2019、金融 RL 综述Hambly et al., 2023、Double Q-learningvan Hasselt et al., 2015、GAILHo Ermon, 2016、金融 RL 现代视角Kolm Ritter, 2019、Actor-CriticKonda Tsitsiklis, 1999、FlowHFTLi et al., 2025、交易 RL 批判性综述Millea, 2021、DQNMnih et al., 2015、PPOSchulman et al., 2017、最大熵 IRL 新视角Snoswell et al., 2020、量化交易 RLSun et al., 2023、策略梯度Sutton et al., 2000、Dueling DQNWang et al., 2016、高斯过程交易策略识别Yang et al., 2015以及期权动态对冲 RLZheng et al., 2023。总结把整章收束成四条可迁移的实践纪律动作空间结构决定算法家族离散动作先考虑 DQN它需要对动作求最大连续动作执行节奏、对冲仓位用 PPO 等 actor-critic——这正是后续执行与对冲 notebook 全部使用 PPO 的原因。奖励时序是模拟可信与否的分水岭奖励只支付上一步已持有的仓位赚到的收益任何让策略利用已观测收益率的安排都会让结果无意义。基准的诚实性是其定义的一部分标注哪些参数被拟合、哪些是代理、哪些是假设的夹子并说明 Almgren-Chriss 基准拥有全 episode 未来信息——否则对比会变成对知情程度的比较。配对标准误 位置/成交量分布才是结论的载体平均奖励与平均短fall 都掩盖了策略在不在交易、成本是否被推迟到视界末尾而匹配窗口只移除路径差异不保证区间更窄——配对改变方差的程度取决于两臂的协方差符号。【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考