深度|用于能源市场算法交易的机器学习框架

zhaorui0 2018-07-19

点击上方关注,All in AI中国

人工智能领域的新突破总会成为新闻的头条。与直接面向客户相比,机器学习在金融领域的应用鲜为人知。事实上,几乎没有哪个行业像金融业那样有那样多干净的、结构化的数据,这也是金融业成为机器学习"宠儿"的原因。

深度|用于能源市场算法交易的机器学习框架

大约三年前,作者参与开发了机器学习(ML)模型用于能源市场的价格预测和算法交易,特别是针对欧洲碳排放许可证市场。在本文中,作者想分享一些他在所有ML项目中发现的相关方法和见解,而不是在技术细节上。作者的重点将放在建模背后需要考虑的一般因素,而这在经典学术教科书或新技术的在线教程中很少讨论。在后面算法交易的例子中,作者将对"交易技巧"进行讨论,并表示将机器学习应用于现实生活环境中,可能会对你的研究有所帮助。

简述

欧洲碳排放许可证(简称 ETS)市场是在2005年《京都议定书》之后建立的,该议定书是欧盟气候政策的主要支柱,通过"总量限额与排放交易"计划管制欧洲大约一半的人为二氧化碳排放量。该机制是政府控制温室气体排放总量,同时承认了市场力量("贸易")对排放权的有效分配。其基本思路是对污染定价:即对计划中涉及的每个工业设施监测并向主管部门报告其确切的温室气体排放量,然后通过交付一定配额来抵消相应的数量(以吨计)。这些"污染权"被拍卖或免费提供给工业企业,然后可以在场外交易或在中央市场交易,以便按需求和供应来灵活地设定价格。

由于环境政策的减排目标限制了每年的排放总量,一些污染者不得不采取减少污染("减排")的措施,例如在其烟囱中安装额外的过滤器。这些污染者的减排成本低于当前市场价格(例如,因为他们的特定过滤器更加便宜)。然后可以在市场上出售他们多余的污染限额以获取利润,从而使污染者面临更高的边际减排成本。在完全有效的排放交易市场中,许可证的平均价格将以满足由许可证供应上限设定的总体减排目标所需的减排成本来确定。

深度|用于能源市场算法交易的机器学习框架

鉴于具体行业特定减排成本的不确定性,该工具允许政府控制排放总量,而排放许可的实际价格根据需求侧市场力量波动,即:

  • 市场对未来政策变化的预期
  • 即将进行的拍卖的规模,拍卖的价格和覆盖率(见图1)
  • 市场参与者的猜测
  • 银行业务(一年内发放的许可证适用于同一政策阶段的所有年份)
  • 其他能源商品的价格关系。

以后者为例,假设每个热量单位的天然气价格低于布伦特原油的价格。电力生产商和公用事业公司将转而使用这种碳密度较低的燃料,从而降低对碳排放配额的需求。因此,在这些时期内,配额价格也会下降(见图2)。

深度|用于能源市场算法交易的机器学习框架

图一

深度|用于能源市场算法交易的机器学习框架

图二

一个全面的模型需要反映所有这些因素。虽然我们可以假设在丰富的历史市场数据中观察到的模式延续到现在并将持续到未来(这实际上是必要的,这是任何分析建模不可或缺的假设),很显然,这个设置对于任何基于基本关系或来自经济物理学的状态空间概念来模拟市场的方法而言,过于复杂。

我们的确需要用一个例子来帮助你了解机器学习的力量。

以下是使用监督学习的交易系统工作流程:

深度|用于能源市场算法交易的机器学习框架

1. 数据

获取数据。获取金融时间序列的最佳来源是你想要进行交易的交易所的API,比如说AlphaVantage或Quandl的API。数据的规模至少应该与你想要建模和最终预测的规模一样好。你的预测范围是多少?较长期的范围将需要考虑额外的因素,如市场出版物、政策前景、Twitter潮流等等。

如果你是基于短线数据的市场信号进行短期或高频交易,你可能需要包括各种长度的滑动平均值,以便为你的模型提供历史背景和趋势,特别是如果你的学习算法没有像Recurrent Neural Networks或LSTM这样的显示记忆体时。技术分析中使用的所有常用指标(例如RSI,ADX,Bollinger波段,MACD)均基于某种数量(价格,交易量)的某种移动平均线,即使你不相信交易规则,也不相信它们将帮助模型反映大多数市场参与者的交易行为。

你的计算能力可能是一个限制因素,尤其是在你的ML模型将面临市场营销或套利寻求者的硬编码,在快速且独特的算法进行竞争的情况下。部署专用云服务器或ML平台(如H2O和TensorFlow)可以允许你在各种服务器上进行计算。

2. 监督模型训练

将数据拆分为互补集,以进行训练、验证(参数调整,特性选择等)和测试。这实际上比听起来更复杂:你最好让测试集与当前的"市场状态"尽可能"相似",并且验证和测试集都应该遵循相同的分布规律。否则,你可能会在验证集上浪费很多精力来调整模型参数。但却发现它很难推广到测试集。遵循"市场制度"的概念(即商品的特定组合支配目标工具的价格动态的延长期),你有必要使用无监督学习的聚类算法发现定义数据中的相关性,然后评估模型内属于相同聚类的验证和测试集中的数据性能(参见图3在此项目中,聚类将预测性能提高了8%)。

深度|用于能源市场算法交易的机器学习框架

图三

在早期,决定并建立一个评估指标。追逐太多不同的指标只会导致混乱。在算法交易的背景下,合适的衡量标准是"盈亏"(PnL),因为它将分类精度(价格上/下)与实际的摆动大小("相关性")进行加权。它符合你可能考虑的交易策略指标。观察训练和验证集的模型性能。如果训练集中的错误(即"模型偏差")很多,则可能需要考虑更多的模型参数(例如,通过在深度学习模型中添加更多层/神经元)。如果模型很难概括('模型过度拟合到训练集'),那就是验证集和训练集('模型方差')的性能差异很大,你可能需要向训练集添加更多数据,减少最相关的特性数量,添加正则化(例如L2,L1或丢失)或提前停止(在梯度下降优化中)。仔细检查模型出错的情况将有助于识别任何潜在的和可避免的模型偏差,见图4。

深度|用于能源市场算法交易的机器学习框架

图四

建立你的目标性能:对于市场预测,75%的分类精度实际上非常好——它比随机猜测(50%精度)要好50%。该基线与诸如物体或语音识别之类的其他ML应用非常不同,它们在封闭的环境中运行,在这个环境中,可以清楚地识别影响建模目标的因素(图像像素的RGB通道,声音样本的波频率)。

3. 交易政策

定义你的交易策略:你可以定义模型输出的具体交易影响的一组规则:例如,取决于给定预测的模型信心的阈值,你在市场上的什么位置,多长时间你在市场的给定状态下持有一个位置等等。一个政策通常带有一些需要优化的更多自由参数(下一步)。在这里讨论的监督学习的背景下,这是一个基于回溯算法和网格搜索算法的手动进行的过程(下面概述了一些缺点)。

4.回溯和优化

现在我们来看看数据——你的交易系统,在一组历史市场数据上表现如何?在这里,步骤2(模型训练)中使用的测试集可以成为调整策略参数的验证集。遗传算法允许你探索策略空间,从第一代100个随机选择的策略参数开始,迭代地消除80个最差表现者并使20个幸存者各自产生4个后代。或者你可以在多维参数空间中使用网格搜索算法:从策略参数的某些合理值开始,你可以通过逐个改变参数值来实现最佳性能设置。此处的性能指标是你最终要在交易策略中优化的指标,例如PnL或某些衍生数量,如投资回报率,SharpeRatio(每波动率风险回报率),风险价值,beta等,请参见图5。

深度|用于能源市场算法交易的机器学习框架

图五

5.模拟和实时交易

在你的策略生效之前,冻结所有系统参数并实时测试,就像根据你的交易算法的输出实际下订单一样。这一重要步骤被称为纸张交易,是你检验方法有效性的关键试金石。你可能会注意到,在历史数据中,你实际上使用的是在特定时间间内不可用的值,例如在计算移动平均值时。

这里介绍的典型工作流程有一些严重的缺点:

对于衍生合约,例如基础的期货,历史数据通常会报告一天或一个选定时间间隔的开盘价和收盘价以及结算价,该结算价约为在该区间内实现的所有交易中的合约平均价格。但这不太可能是你可以清算买入或卖出订单的价格,具体取决于在不同买入/卖出价格水平下具有不同交易量的订单的动态。因此,你从第2步开始的模型预测确实是指理论价格,但可能不是你所押注的价格。更详细的建模方法需要考虑订单的实际结构和动态。

制定策略(步骤3)不是基于机器学习的建模的一部分,而是由直觉,经验或简单的启发式指导的手动过程。例如,当模型预测价格上涨时,你会下一个购买订单。但是你会购买多少份额?面对复杂的市场环境,你将持有多长时间?

姗姗来迟的反馈:在获得关于策略性能的第一个指示之前,你需要执行步骤1-3。即使模型和策略实际上相互作用密切,预测模型和策略的参数也是独立优化的。在这个框架中探索政策参数的空间是通过低效的数值优化来完成的,而不是通过预测机器学习模型的强大梯度优化。

强化学习的框架集成了上面的步骤2和3,将交易建模作为一个代理(交易者)与环境(市场,订单)的交互,以通过其动作(下订单)来优化奖励(例如回报)。虽然仍处于早期阶段,但最近的研究表明这是一条值得探索的途径——需要进行进一步的研究。

深度|用于能源市场算法交易的机器学习框架

相关推荐