01学完这一课,你能做到什么
学完这一课,你应该能:
- 区分智能体、环境、状态、观测、动作、奖励和策略;
- 把股票交易写成可以重置、逐步运行的模拟环境;
- 设计不偷看未来、能处理账户约束的观测与动作;
- 用一致的净值变化计算奖励,避免每日收益和平仓收益重复记账;
- 先用随机动作和基准检查环境,再进入 或 。
适合描述“观察—行动—反馈—再行动”的连续决策。它不会自动消除,也不会替你决定数据、目标和交易规则。环境定义得不可信,模型学到的可能只是漏洞。
一句话记住先把环境做对,再训练策略。
02强化学习解决的是连续决策
监督学习通常给模型输入 X 和目标 Y,例如用预测未来五日收益;强化学习则让智能体反复做决定:先观察市场和账户,再选择动作,环境推进后返回新观测和奖励。
假设 金叉但 已经超买。固定规则需要提前规定冲突时听谁的;强化学习可以把这类信息放进观测,让策略在反馈中比较动作的长期结果。但参数在不同市场可能失效,强化学习并不会自动解决过拟合。
几种学习方式的区别可以这样记:监督学习有输入和标签;无监督学习从无标签数据中找结构;自监督学习用数据自身构造任务;强化学习用行动后的奖励优化累积目标。奖励不是人工给每一步写好的标准答案,而是环境根据行动结果返回的反馈。
AlphaGo 的自我对弈能帮助理解“与环境互动”,但围棋规则明确,金融市场非平稳、部分可观测,还要承担费用和成交限制。游戏成功不能直接推出交易策略有效。
监督学习
输入和标签配对,学习从 X 到 Y 的映射。
强化学习
行动后得到奖励,学习怎样让长期回报更好。
一句话记住预测一个结果,和连续做决定,不是同一个问题。
03把六个概念放进交易环境
把概念放到一张交易表里:
| 概念 | 交易中的例子 | 负责什么 |
|---|---|---|
| 环境 | 历史行情、现金、持仓、成交规则和时间 | 按规则推进市场模拟 |
| 状态 | 市场与账户的完整真实状态 | 由环境维护 |
| 观测 | 智能体被允许看到的行情特征、和现金 | 由环境输出 |
| 动作 | 持有、买入、卖出或目标仓位 | 智能体提出,环境校验 |
| 奖励 | 扣除成本后的净值变化或其他明确目标 | 环境计算 |
| 策略 | 给定观测时如何选择动作 | 学习算法优化 |
状态和观测不一定相同。环境可能知道完整成交状态,但智能体只能看到决策时允许使用的信息。一次交互可以写成:
观测 s_t → 动作 a_t → 执行与时间推进 → 奖励 r_() 和新观测 s_(t+1)
一轮从 reset 开始,到终止或时间上限结束,称为一个 episode。智能体负责提出动作,环境负责决定能不能成交、怎样成交,不能把任何动作都按理想价格执行。
- 1观测只看决策时可用信息
- 2动作买入、卖出或持有
- 3执行检查资金、持仓和规则
- 4奖励按净值变化记账
- 5新状态进入下一时点
一句话记住智能体提动作,环境定结果。
04奖励要和账户净值对得上
奖励可以每一步给,也可以在阶段结束时给。常见的累积折扣回报是:
G_t = Σ_k γ^k r_(t+k+1)
γ 是折扣因子,决定未来奖励的权重。假设未来两步奖励分别是 10 和 20,γ=0.8,那么从当前看见的回报是 10 + 0.8×20 = 26。即时奖励不等于只看短期;长期回报仍可以把未来反馈纳入目标。
交易环境的起点最好用统一的账户净值变化:
r_t = V_(t+1) ÷ V_t − 1
假设当前净值 V_t=100000,下一估值点净值 V_(t+1)=101000,则奖励是 101000÷100000−1=1%。费用、现金和持仓都应进入净值。如果另加回撤惩罚,要同时记录未惩罚净收益,避免把训练分数误称为账户收益。
一个常见错误是:每天已经把持仓收益计入奖励,卖出时又把整个持有期间收益再计一次。正确时序应是:在 t 时读取允许信息,发出动作,在预设成交时点撮合并扣费,更新现金和持仓,再到下一估值点计算净值。
奖励只追求总收益,可能鼓励极高风险;加入成本、回撤或风险惩罚会改变目标。不同奖励函数的训练分数不能直接比较,最后仍要看统一的收益、回撤和交易质量指标。
rₜ = V₍ₜ₊₁₎ ÷ Vₜ − 1
先完成成交和记账,再比较两个估值点的账户净值。
一句话记住每天记一次净值变化,不要卖出时重复记账。
05先用 Gym 风格环境理解接口
倒立摆 CartPole 是理解环境接口的好例子。观测通常包含小车位置、速度、杆角度和角速度;动作是向左或向右施力;保持平衡会得到奖励,越界或达到时间上限后结束。
调用 reset 开始新 episode,调用 step(action) 执行一步并得到观测、奖励和结束信息。不同 Gym 版本可能把“自然终止”和“时间截断”分开返回,应该以当前安装版本的接口为准。一个 step 也不必等于一秒。
训练或调试时可以跑约 100 个 episode,观察平均步数是否从 20 多逐渐到约 29。这样的变化只能说明正在观察一次运行,不能证明环境已经解决。还要和随机动作比较,并用多个随机种子检查结果是否稳定。
一句话记住先确认 step 的含义,再解读平均奖励。
06把最小股票环境写清楚
可以先用 510050 上证 50 做教学示例。若每个时点取过去 5 天的开、高、低、收,观测就是 5×4=20 维。但每个字段必须来自当时已经完成的 bar,不能用当天收盘后才知道的价格去决定当天开盘成交。
价格标准化可以使用过去 252 日的均值和标准差。假设历史均值为 3.00、标准差为 0.20、当前价格为 3.20,则 Z-score 是 (3.20−3.00)÷0.20=1。窗口不足、标准差为 0、缺失行情都要有明确处理。标准化只是统一尺度,不会让任意分布自动变成正态。
只有行情没有账户状态是不够的。空仓和满仓可能看到同一组价格,但可执行动作完全不同,所以还应考虑现金、持仓、可卖数量、持有时间或成本。动作可以先设为不动、固定额度买入、全部卖出;也可以使用离散的目标仓位档位。动作定义必须和算法、成交规则一致。
市场
过去 5 天 OHLC,共 20 维。
账户
现金、持仓和可卖数量。
时序
只使用决策前已完成的数据。
一句话记住同样的行情,账户不同,动作也可能不同。
07环境先测漏洞,再谈收益
股票环境至少要明确手续费、、最小交易单位、现金不足、持仓上限、可卖数量、T+1、、停牌和数据缺失。ETF、股票和的规则不同,不能把三动作模型直接套到所有资产。期货还要考虑、合约乘数、到期换月和强平。
历史模拟中的动作通常不会改变市场价格,这只是近似;资金规模变大后,冲击和会让结果失真。环境允许不可能的成交时,模型可能获得高奖励,但那是利用漏洞,不是学会交易。
训练前先随机选择持有、买入和卖出,跑至少三轮,保存每一步的动作、有效成交、现金、持仓、费用和净值。再和同期买入持有、空仓基准比较,用不同随机种子重复。随机策略偶尔盈利,可能只是样本上涨;重复同一历史 episode 也不等于增加了独立市场样本。
动手验收时,手工构造一段价格序列,逐笔检查空仓、买入、持有、卖出、手续费和最后未平仓估值。交付环境规格、观测与动作空间、奖励公式、成交规则、终止条件、随机基准和未实现约束清单。只有记账正确、没有未来信息、非法动作可控,才进入下一课。模拟环境也不能直接连接真实账户;真实委托、成交和模拟动作必须分开记录。
- 1手工序列逐笔对账
- 2随机动作查执行和费用
- 3基准比较对照持有与空仓
- 4时间切分训练、验证、测试分开
- 5再训练环境通过后才开始
一句话记住随机基准是在测环境,不是在证明策略。
4 道小题
全部答对,这一课就算真正读懂了。答错了会告诉你为什么。
这一课,浓缩成一张卡
学完可以保存或分享给朋友。保存成图片的功能会在下一版加上。
先建立不偷看未来、记账一致、约束明确的交易环境。
- 连续决策
- 净值奖励
- 环境验收
记住这 5 句话
- 01强化学习把交易看成连续决策,但目标、数据和约束仍由研究者定义。
- 02环境负责状态推进、动作校验、成交和奖励;智能体负责提出动作,策略负责从观测选动作。
- 03观测要包含与决策相关的账户状态,并严格限制在当时可获得的信息内。
- 04用账户净值变化统一奖励,避免每日奖励与平仓奖励重复计算。
- 05先用手工序列、随机动作和基准验收环境,再进入 Q-learning 或 DQN;模拟不能直接代替真实交易验证。
完成这一课
读完讲义、答对小题,这一课就算学完了。
- 读完讲义
- 通过随堂自测
实验数据AI+金融投资训练营教学样本。固定教学样本
固定教学样本只用于解释量化研究方法,不代表任何真实标的未来表现,也不构成投资建议。