伦敦 伦敦00:00:00 纽约 纽约00:00:00 东京 东京00:00:00 北京 北京00:00:00
当前位置:主页 > 投资学院 > 交易策略 >
交易策略

10强化学习做市商高频交易策略[有代码]

  市场价差就是订单簿上最高买价和最低卖价间的差值,中间价格就是最高买价和最低卖价间简单求平均。如上图中的价差就是100.5-100=0.5元,中间价格就是(100+100.5)/2=100.25元。

  非定性分析也非定量分析,金融价格数据是一个随机游走模型,监督学习主要是用于根据训练标签来预测未来的价格,但它坚守他的交易策略也能赚钱一样。对于坐市商来说,这与培养一个成功的坐市商Agent的初衷背道而驰,Agent在评估价格可能上涨时它会买入仓位并持有不动,而监督学习又很难将手续费等因素考虑在内,口头分析,电通渣硕在读,很难被预测。编辑考虑了与一篇2013年的论文《Adaptive Market Making via Online Learning》中的在线学习算法对比。

  最重要的是不能有太多库存,Agent开始投机了。Agent会实行探索试错和学习,所以虽然它的实验很牛逼,挑战较大。欢迎大佬点赞和指点。研究方向是强化学习用于量化交易,但是如果真的采用这个策略。

  编辑有些夸张了,到这里并没有更多升级了,只是在上面的一堆模块的排列组合中,选了各个最好或较好的模块组合在了一起。最终版Agent使用瓦片编码的线性组合作为信息表示方法,训练算法使用SARSA,奖励函数使用非对称抑制奖励函数。这个版本兼顾了利润和训练的稳定性,并且很好的控制了库存。样本外回测结果如下图所示:

  坐市商的风险主要来源于存货风险,当发出的买卖双边订单只成交了一边时,手中便积累了库存。如果此时价格朝不利方向变动,那么就会造成亏损。

  做市商通常不断的在盘口提供买单和卖单来为市场提供流动性,而做市商的风险就是库存管理,对于做市商来说的最美的事情不过是0.99买单和1.01的卖单在短时间内都能成交。但是如果单子在手里押的太多而且价格朝不利方向移动,就会面临亏钱的风险。这篇论文的大佬开发了一个限价单高频交易模拟环境,并使用TD( temporal-difference)强化学习训练了一个高频交易Agent,使用瓦片编码的线性组合作为值函数逼近器,并设计了一个控制库存风险的自定义奖励函数。最终效果优于简单的基准策略和最近的一些其他的在线学习方法。

  训练算法分析:虽然某些算法在特定的股票上表现比基础版Agent好,但是没有一个像SARSA一样一致。在大多数情况下,他们的表现更差,无论是样本外的表现还是学习效率。

  基本版的Agent的账户状态仅由库存状态,标准化后的盘口价差组成,并且使用普通的利润函数作为奖励函数。Agent使用了One-step Q learing和SARSA算法训练,结果不是很理想。

  引入了平均绝对位置(MAP),编辑认为那篇论文的模拟环境写的没有自己精细逼真,但实盘肯定没有自己的好使。不具备可说明性,而且要训练一个稳定的交易策略,(额,为了衡量这个指标,并且也会导致学习过程中的不稳定性和样本外表现不佳。强化学习不需要提供训练的标签数据,因此编辑又研究了另外2种奖励函数:首先,就好像人类也无法预测价格,但是用强化学习是有希翼从历史价格数据中发现出一套行之有效的交易策略的,所以我认为深度强化学习是很适合用于量化交易的,而对于主流的观点来看,只是强化学习也是一个黑盒模型,这里会放上我看的相关论文,哈哈)强化学习于监督学习不同的地方就在于,这个值较大则说明库存可能比较大,希望获得最大的奖励函数。

  性能评价:用来评估交易策略表现的主要指标是它所赚的钱的数量。虽然这种做法在策略评估方面很常见,但这对做市商来说没有意义,因为没有启动资本的自然概念。大家也不能根据利润来评估大家的策略,因为每个代理都要在不同的股票上进行测试,每个股票都有不同的价格和流动性。相反,编辑引入了一个标准化的每日PnL,评估Agent在捕捉价差方面的好坏。这个指标定义为每日总利润除以平均市场差价,使不同市场的利润正常化;这相当于为了获得利润而需要捕捉的市场差价的数量。

  对于交易类的Agent来说,最直观的奖励函数就是利润了,大家先定义一下在当前环境中,利润的计算方式:

  瓦片编码这个是翻译的直接结果,我之前也没接触这个概念,也还没有阅读论文的代码,欢迎各位同学在评论区给出更多见解。

  这种方法相当于学习三个独立的值函数,每个函数都使用相同的TD-error进行梯度下降更新。

  实验数据:所有的实验中中的数据都被分为不相交的训练集和测试集,并留有验证集以优化超参数,

  Agent观察到的状态分别为市场状态和自身账户状态,自身账户状态由三个变量组成:

  坐市商通过不断在盘口提供买单和买单,来增加市场的流动性及缩小盘口价差,其主要盈利来源是微小的价差利润(单笔利润低单每天的成交数量非常多)和交易所的手续费返还。如上图中的订单簿,如果做市商同时以100元的价格买和100.5的价格卖1笔,那么在2边都成交后,坐市商能赚0.5元。

  该论文中的Agent并非时间驱动,而是事件驱动,任何价格,交易量或者订单簿的变化都会驱动Agent做新的决策。

  编辑使用10只股票的8个月的盘口数据及成交数据搭建了一个模拟环境,并只使用了最优5档数据,并允许Agent在这些价格上发出订单。因为Agent的下单数量比较小,所以编辑认为其对市场造成的影响也很小。编辑指出另一个问题是当某个档位的订单数量变小,说明其要么被实行要么被取消,如果订单被实行,因为有成交记录环境可以处理这种情况,但如果订单是被取消的,模拟环境并不知道哪些具体的订单是被取消了的。具体来说,当模拟环境中的Agent下单时,大家并不知道订单取消的行为发生在大家的模拟订单前还是后,也就无法判断这个订单能不能给实行成交。对于这种情况,编辑的处理方式是认为订单取消行为呈均匀分布,这意味着被取消的订单在Agent订单之前的概率与Agent订单之前的成交量与Agent订单之后的成交量成正比。

  交易订单通常由三个元素组成:方向,价格,数量。大家看到的交易所提供的订单簿就是市场所有交易者提交的订单的信息聚合。不同档位的价格的差距叫价差。交易订单也分为市价单和限价单。市价单以对手价成交,如果对手盘第一档的委托数量不够消化该订单,那么交易所会将该市价单和对手盘第二档撮合成交,还没处理完就继续往下撮合,直到该订单被完全消化,较大数量的市价单可能会带来很大的滑点,但能保证订单的完全成交。而限价单则制定了交易价格,对手盘数量不够时,剩余订单就继续挂在盘口。限价单能固定交易价格(成本),确不能保证完全成交。

  状态表示分析:分别对比的账户状态信息,账户状态信息+市场状态信息,瓦片编码的线种表示方法的区别。令人意外的是,账户状态信息+市场状态信息这种方法引入了市场状态却对最终收益造成了严重损害,并且训练过程也更不稳定,甚至会有随着训练次数增加,表现退化甚至完全无法收敛的情况。仅使用户状态信息的Agent训练得更加高效和稳定。而编辑的瓦片编码的线性组合表示方法取得了最佳的性能,说明该表示方法兼顾了信息量和表示效率。10强化学习做市商高频交易策略[有代码]


点击次数:  更新时间:2020-03-16 10:41   【打印此页】  【关闭
XML 地图 | Sitemap 地图