2024-arXiv-Alpha2:使用深度强化学习发现逻辑公式化Alpha
arXiv | https://arxiv.org/abs/2406.16505
GitHub | https://github.com/x35f/alpha2
摘要:
Alpha在为量化交易提供信号方面至关重要,业界高度重视公式化alpha的发现,因为它们具有可解释性和易于分析性,而不是表达性但容易过度拟合的黑盒alpha。先前关于自动生成公式化alpha集合的研究大多基于遗传规划(GP),存在对初始种群敏感、转化为局部最优、计算速度慢等问题。最近使用深度强化学习(DRL)进行alpha发现的努力并没有完全解决关键的实际问题,如alpha相关性和有效性。我们通过将alpha发现过程表述为程序构建,提出了一个使用DRL的alpha发现新框架。智能体Alpha2组装了一个针对评估指标进行优化的alpha程序。由DRL引导的搜索算法基于潜在alpha结果的值估计在搜索空间中导航。评估指标鼓励alpha的表现和多样性,以获得更好的最终交易策略。我们的搜索alpha公式也带来了预计算量纲分析的优势,保证了alpha的逻辑合理性,在很大程度上修剪了庞大的搜索空间。在真实的股票市场上进行的实证实验表明,Alpha2能够识别出一组不同的逻辑和有效的alpha,这显著提高了最终交易策略的性能。
一、引言
1.1 研究动机
-
现有的使用算法技术寻找公式化alpha的研究有两个缺点:
-
首先,它们无法从更原始的算子或更深的结构中找到公式化的alpha。对于基于GP的方法来说,由于它们对初始种群分布的敏感性和高计算需求,这个问题甚至更严重。
-
其次,现有方法倾向于将alpha的性能作为唯一的评价指标,从而产生具有高IC和低可解释性的alpha。
-
-
从实际市场数据的实用策略来看,alpha应该满足两个属性:
-
首先,alpha之间的多样性在构建稳健的交易策略中起着重要作用,有助于降低过度拟合的风险,确保策略在面对市场波动时保持弹性。
-
其次,alpha应该根据一定的规则(如维度一致性)在逻辑上合理。例如,开盘价+交易量应该避免,因为他们没有相同的量纲。基于gp的方法直接修改表达式的结构,而AlphaGen则以逆波兰表达式的形式构建因子。后两种方法只能在alpha完全构造后进行量纲分析,无法提前修剪搜索空间,浪费了大量的计算工作。
-
-
alpha发现的一个关键挑战在于其庞大的搜索空间:
-
考虑一个40个二进制运算符和20个操作数的任务,对于由最多由15个运算符组成的alpha,搜索空间膨胀到大约 1 0 63 10^{63} 1063,在这个空间上执行暴力搜索是不切实际的。
-
在AlphaGo类算法中**RL引导的蒙特卡罗树搜索(MCTS)**在大型搜索空间(如围棋、国际象棋、将棋、星际争霸和汇编程序)中显示出了强大的寻找解决方案的能力。
-
1.2 主要贡献
- 将生成公式化alpha的任务重新概念化为程序生成过程,alpha程序的集合可以很容易地按照预定义的规则提前修剪搜索空间。
- 提出了一种新的搜索算法,将RL与MCTS结合起来,生成具有逻辑性且相关性较低的alpha。
- 实验结果验证了方法的有效性,大大减少了搜索空间并展示了发现逻辑、多样和有效的alpha的能力。
二、模型方法
2.1 Alpha 程序化生成
公式化 alpha 是一个函数 ζ \zeta ζ,在每个交易日 d ∈ { 1 , 2 , … , D } d\in\{1,2,…,D\} d∈{1,2,…,D} 将股票 i i i 过去 τ \tau τ 天的原始特征转换成一个值 z d , i = ζ ( x d , i ) z_{d,i}=\zeta(x_{d,i}) zd,i=ζ(xd,i),使用 IC 评估 alpha 的有效性。
公式化 alpha 是操作符 Operator 和操作数 Operand 的结构化组合,由一系列指令构建而成,其中每条指令都被描述为一个4元素元组(Operator, Operand1, Operand2, Operand3)。
- 操作符 Operator 分为一元、二元、三元和指示符类型,指示符 Indicator 标记alpha程序的开始和结束。
- 操作数 Operand 包括标量、矩阵、寄存器和占位符。
- 标量 Scalar 操作数 是操作符的参数。
- 矩阵 Matrix 操作数 是市场的输入特征。
- 寄存器 Register 用于存储中间结果。
- 占位符 Placeholder 操作数 为 Null,用于将指令对齐到4个元素的元组。
alpha指令逐条转换(上图颜色对应),构建表达式树。
寄存器赋值是隐式的:
- 如果一条指令不使用寄存器,它的输出将存储在第一个可用的寄存器 Reg0 中**(蓝色、绿色)**。
- 对于使用单个寄存器的指令,输出将替换当前值。
- 当一条指令涉及两个寄存器时,计算结果将替换 Reg0,并清空 Reg1**(橙色)**。
在程序完成后从 Reg0 读取值。
2.2 RL引导的MCTS搜索
MCTS 蒙特卡洛树搜索:
https://web.stanford.edu/class/cs234/
https://www.youtube.com/watch?v=vDF1BYWhqL8&ab_channel=StanfordOnline
强化学习任务:马尔可夫决策过程(MDP),记为 ( S , A , p , r , γ , ρ 0 ) (S,A,p,r,\gamma,\rho_0) (S,A,p,r,γ,ρ0)
- S S S 为状态空间,所有可能程序的集合,每个状态 s s s 对应一个唯一的函数,是函数 ζ \zeta ζ 的矢量化表示。
- A A A 为动作空间,所有可能指令的集合。
- p ( ⋅ ∣ s , a ) = 1 p(·|s,a)=1 p(⋅∣s,a)=1 为转移概率,用于应用一个动作后构建下一个alpha程序。
- r ( s t , a t , s t + 1 ) = Perf ( ζ t + 1 ) − Perf ( ζ t ) r(s_t,a_t,s_{t+1})=\text{Perf}(\zeta_{t+1})-\text{Perf}(\zeta_{t}) r(st,at,st+1)=Perf(ζt+1)−Perf(ζt) 为奖励函数, Perf ( ζ t ) \text{Perf}(\zeta_{t}) Perf(ζt) 为评价度量函数,即奖励由在执行动作 a t a_t at 后到达 s t + 1 s_{t+1} st+1 时评价指标的增加决定。
- γ ∈ ( 0 , 1 ) \gamma\in(0,1) γ∈(0,1) 为折现因子,是控制alpha程序长度的超参数
- ρ 0 ( s ) \rho_0(s) ρ0(s) 为初始状态分布,总是从空程序开始,即对于空程序,其值为1,否则为0。
Alpha2 使用一个 DRL 智能体来探索 alpha 程序生成任务。DRL 通过深度神经网络引导 MCTS 过程,以当前状态 s t s_t st 作为输入,输出动作分布和价值预测。动作分布预测了智能体应该采取的每个动作的先验概率,而价值预测预测了智能体应该从当前状态 s t s_t st 期望的累积奖励。本文使用了多项改进使得搜索算法在发现公式化 alpha 上表现更佳。
2.2.1 稳健性
改进估计子节点价值的方法
- **均值算子:**MCTS 通常使用均值算子来计算子节点的价值,但由于公式化 alpha 的固有稀疏性,在算法的初始阶段均值算子表现欠佳。
- **最大值算子:**在树搜索的早期阶段,大多数 alpha 产生的是无信息信号,导致策略方向具有随意性,最大值算子更擅长在稀疏的公式化 alpha 环境中导航。然而只使用最大值算子可能会导致发现对参数敏感的alpha。
- **幂均值算子:**介于平均算子和最大值算子之间。使用均值算子会导致对最优价值的低估,从而减缓学习速度,而最大值算子则会导致高估。
本文通过一个超参数来控制最大值算子和均值算子之间的平衡,子节点价值估计公式:
Q
(
s
,
a
)
=
r
(
s
,
a
)
+
β
∗
mean
(
V
s
)
+
(
1
−
β
)
∗
max
(
V
s
)
Q(s,a)=r(s,a)+\beta*\text{mean}(V_s)+(1-\beta)*\text{max}(V_s)
Q(s,a)=r(s,a)+β∗mean(Vs)+(1−β)∗max(Vs)
V
s
V_s
Vs 是状态
s
s
s 上节点的价值备份。为了进一步提高价值估计的有效性(特别是对于均值操作符),价值备份是从添加到节点的前 k 个值中计算得出的,即
V
s
=
{
v
1
,
…
,
v
k
}
V_s = \{v_1,…,v_k\}
Vs={v1,…,vk}。
2.2.2 多样性
本文通过计算 alpha 之间的相关性来量化多样性。对于待评估的 alpha 函数
ζ
t
\zeta_t
ζt,首先计算其在所有股票和交易日上的 alpha 值
z
t
z_t
zt,然后计算其与当前 alpha 集合中 alpha 值的最大相关性:
MaxCorr
(
z
t
,
G
)
=
max
i
IC
(
z
t
,
z
i
)
,
G
=
{
z
1
,
z
2
,
…
,
z
n
}
\text{MaxCorr}(z_t,G)=\max_i \text{IC}(z_t,z^i),G=\{z^1,z^2,…,z^n\}
MaxCorr(zt,G)=imaxIC(zt,zi),G={z1,z2,…,zn}
评估指标根据最大相关系数对 IC 进行折现:
Perf
(
ζ
t
)
=
(
1
−
MaxCorr
(
z
t
,
G
)
)
∗
IC
(
z
t
,
μ
)
\text{Perf}(\zeta_t)=(1-\text{MaxCorr}(z_t,G))*\text{IC}(z_t,\mu)
Perf(ζt)=(1−MaxCorr(zt,G))∗IC(zt,μ)
2.2.3 逻辑性(维度一致性)
在实际应用中,尤其是在金融领域,特征之间的有意义交互至关重要。将不同的特征组合可能导致虚假关系,从而使得基于这些特征构建的交易策略不可靠。一个连贯的 alpha 表达式的一个关键质量是其操作符和操作数之间的维度一致性。需要注意的是,随着表达式复杂度的增加,其维度也会发生变化。
本文在节点扩展阶段即施加规则以限制搜索空间,在实际评估 alpha 之前进行。通过在每个寄存器中记录表达式的维度,从而在扩展 MCTS 树时,能够根据操作符指定的维度要求预先筛选节点。
三、实验结果
**股票集合:**沪深300指数和中证500指数成分股
**样本期:**训练集(2009年1月1日至2018年12月31日)、验证集(2019年1月1日至2020年12月31日)和测试集(2021年1月1日至2023年12月31日)
**原始特征:**open, close, high, low, volume, vwap
**目标:**与股票20日收益率具有高信息系数(IC)
**Alpha 组合:**将 IC 前 20 的 alpha 因子使用 XGBoost 组合
**评估指标:**IC、Rank IC
**设备:**13900K、A5000*2
**基线方法:**MLP、XGBoost、LightGBM、AlphaGen、gplearn
3.1 IC和相关性对比
3.2 策略表现
3.3 股票市场回测
top-k/drop-n,k=50,n=5
69370)]
3.2 策略表现
[外链图片转存中…(img-hX3sE4s1-1739196069370)]
3.3 股票市场回测
top-k/drop-n,k=50,n=5
[外链图片转存中…(img-SVZiVqNJ-1739196069370)]