创新点
利用强化学习解决做市(Market Making)问题,旨在最大化市场做市利润和控制库存风险,探索强化学习在金融领域的有效性,使用了TQL和DQN。
本文方法
输入State: 当前价格s、库存数量q、剩余的时间T-t
输出Action: (b ,a)agent想要的买入价格b和卖出价格a
实际网络设计时Action被定义为一个离散的空间,网络输出为单一数值旨在表示价格偏移量,本文将agent的出价控制在[s-2, s+2],da=0.2可以划分出21个动作(动作总数Na = 21)在中间价格的基础上左右移动十步。例如:输出的action为7,7-10= -3代表着左侧第三个动作(距离中间),despl=-3 * 0.2 = -0.6,通过偏移值despl转化bid-price和ask-price。随后通过速率函数(用于描述订单执行频率),获得买or卖的概率,决定是否买卖,更新库存q。
*当前价格和中间价格不同,中间价格由当前价格转化来
Reward: reward = dw - self.kappa / 2 * (dw - self.stats.mean()) ** 2
dw财富变化量 = 当前-之前的; self.stats里面存一个周期T所有的dw,减去self.stats.mean()可以跟踪整个周期里的财富变化情况,关注单期回报偏离平均值的程度,反映agent的风险偏好
self.kappa–系数k控制了agent对回报波动的厌恶程度,k越大表示agent更加保守,k越小意味着agent愿意承担更高的风险换取更大的收益。
统计指标和对比策略
统计指标
- 平均财富 (np.mean(ws))
表示在多次模拟中,最终财富的平均值。较高的平均财富意味着更好的表现,它表示策略在长期中能带来更多的利润。 - 标准差(np.std(ws))
表示最终财富的波动程度。标准差越大,表示财富的变化幅度越大。 标准差越低策略更加稳定,风险更低。 - 夏普比率(np.mean(ws)/np.std(ws))
夏普比率衡量了每单位风险(标准差)所能获得的平均回报。夏普比率表示在承担相同的风险时可以获得更高的平均回报,或者在获得相同的平均回报时承担较低的风险。 - 效用值 (utility)
效用函数值衡量了策略的期望效用。本文使用的是指数效用函数的形式 -exp(-β * ws),其中 β 是风险厌恶系数,论文中 β=0.5。 在这个特定的效用函数中,较低的效用函数值意味着更好的表现,因为这表示策略产生的负效用较小,或者说策略更符合做市者的风险偏好
对比策略
- 最优代理(Optimal Agent)
论文中的报价策略是基于以下公式:
论文实现中,opti-agent输出的也是一个价格的偏差值,这个偏差值是考虑到库存风险。
后面减去的项表示市场制造者根据其风险厌恶程度和剩余时间调整报价。当市场制造者风险厌恶β较高或者剩余时间较短时,这个项的影响更大。随着风险的增加,市场制造者会调整报价以减少潜在损失。价格波动性的影响:σ表示价格波动性,较高的σ代表价格更可能大幅变动,需要谨慎管理库存。 - 对称代理(Symmetric Agent)
对称代理会围绕中间价格设置相同的买卖价差,不考虑市场动态的变化,也不试图捕捉任何不对称的信息优势。
实验
代码在以下网址: https://github.com/mselser95/optimal-market-making
根据其可以复现出论文结果:
- DQN-agent在最终财富上接近最优代理,尽管平均最终财富略低于Symmetric代理,但DQN的财富标准差更低,表明其相比之下更加稳健。
- DQN-agent的效用估计最小,几乎达到理论上的最优效用水平。
横坐标: 策略所累积的财富量。
纵坐标: 出现在给定财富区间内出现的次数或频率。
Optimal Agent | Symmetric | DQN | |
---|---|---|---|
Mean Wealth | 47.79 | 57.67 | 53.74 |
Std. Dev. Wealth | 6.09 | 11.86 | 6.97 |
Sharpe Ratio | 7.83 | 4.86 | 7.71 |
Mean Cum. Reward | 22.46 | -7.17 | 29.04 |
Utility Estimate | -2.63e-9 | -4.34e-6 | -2.33e-10 |
本论文设置的初始数据为s0=100,之后的数据为上一个数据上随机浮动self.sigma * self.sqrtdt(当dt=0.005时,这个数大约为0.14),尝试修改输入输入数据训练市场环境。
使用的数据为,上证指数(000001.SS)每分钟的数据,修改dt=1,T=237,由于真实的数据浮动比较大,将da修改为0.3。
数据样例:
2024-08-26 09:30:00+08:00,2856.448486328125,2860.654541015625,2853.00244140625,2853.00244140625,2853.00244140625,911119000
2024-08-26 09:31:00+08:00,2853.650146484375,2854.696044921875,2852.7041015625,2852.7041015625,2852.7041015625,437619900
对比各项指标基本符合论文的规律:
Optimal Agent | Symmetric | DQN | |
---|---|---|---|
Mean Wealth | 10.52 | 14.74 | 11.376 |
Std. Dev. Wealth | 4.32 | 3.708 | 3.684 |
Sharpe Ratio | 2.434 | 3.976 | 3.088 |
Mean Cum. Reward | -19.86 | -22.09 | -7.78 |
Utility Estimate | -0.0235 | -0.0024 | -0.0172 |
小结
这篇论文旨在使用强化学习解决做市问题,本阅读笔记主要记录了DQN部分的实验内容。实验结果显示,DQN在一些指标上确实表现更优。然而,将输入的价格数据换成真实市场数据后,尽管DQN-agent的策略仍有优势,但除了标准差外,其他指标均有所下降。这可能是因为真实市场的数据更加复杂;此外,时间跨度设置为一分钟可能过长,使用更短的时间间隔可能会减小浮动;最后,训练数据量较小,且不如原论文中的数据那样具有随机性。