SIMON KUTTRUF作者冯羽校对笪洁琼翻译

全解用Python建立能源市场算法交易的机器学习框架

本文将基于机器学习运用Python对欧洲碳排放证书市场建立算法交易框架。


前言

人工智能的新突破每天都成为头条新闻。在金融领域,机器学习的广泛运用和强大的应用,客户们并不了解。事实上,很少有像金融行业那样具有深厚历史、清楚明了和结构化数据的领域——这使得它成为了“学习机器”的一个早期标志,在这个领域取得了巨大的成功,而且还在继续。

大约三年前,我参与了为能源市场的价格预测和算法交易开发机器学习(ML)模型,特别是在欧洲的碳排放证书市场。在这篇文章中,我想要分享一些我在我的ML项目中发现的相关知识、方法和见解。

的重点不是在技术细节上,而是在模型选择背后的一般考虑因素,在经典的学术教科书或新技术的在线教程中很少讨论。

在算法交易的例子中,我展示了一些“交易技巧”,你可能会发现,当你把机器学习应用到现实生活中的环境中,比如一个孤独的求知者或者你的同事们,可能会觉得这是有用的。

能源交易市场

欧洲碳排放证书(EU ETS)的市场是在2005年京都议定书之后确立的,作为欧盟气候政策的一个重要支柱,通过一项“总量控制和贸易”计划对欧洲约一半的人为二氧化碳排放进行监管。这一机制为各国政府提供了控制温室气体排放总量的控制(“上限”),同时承认了对市场力量(“交易”)的排放权的有效分配。其基本理念是对污染定价:该计划所涵盖的每一个工业设施都必须被监测并报告其温室气体排放的确切数量,然后通过交付配额来抵消各自的排放量(以吨为单位)。

这些“污染权”被拍卖或免费发放给工业企业,然后可以在场外交易或在中央市场上进行交易,以便按需求和供应灵活定价。

由于环境政策的减排目标限制了每年的总供应量,一些污染者不得不选择减少污染的措施(“减排”),比如在烟囱里安装额外的过滤器。这些污染者的边际减排成本低于目前许可证的市场价格(例如,由于他们的特定的过滤设备很便宜),他们可以将多余的污染配额出售给那些面临更高边际减排成本的污染者,并获取利润。

在一个完全有效的排放交易市场中,许可证的均衡价格将以最终减排单位的边际减排成本为基础,以满足限额供应上限设定的总体减排目标。

考虑到具体行业的减排成本的不确定性,该工具允许政府控制排放总量,而排放许可证的实际价格则根据需求方市场力量的变化而波动,包括:

  • 市场对未来政策变化的预期

  • 即将举行的拍卖许可证的规模、价格和持续拍卖的覆盖比率(见图1)

  • 市场参与者的投机

  • 银行行为(一年内发放的许可证在同一政策阶段的所有年份都有效)

  • 其他能源商品的价格关系

为了举例说明后者,假设每个热量单位的天然气价格低于布伦特原油的价格。

电力生产商和公用事业公司将转而使用这种更少碳的燃料,从而降低了对碳排放的需求。

因此,在这些时期,配额的价格也会下降(见图2)。

图1:下午2点的高覆盖拍卖的看涨信号,很快打破了一个看跌的趋势

图2:2017年欧盟与英国天然气的标准30日(绝对和标准化)

一个全面的模型需要反映所有这些因素。虽然我们可以安全地假定模式中观察到丰富的历史市场数据延续到现在,并将持续到未来(这是必要条件,不可或缺的假设,对于任何分析模型),很明显,这个设置,对于任何试图建立基于通用市场信念、基于经济物理学基本的关系或状态空间概念的模型,都过于复杂。

机器学习的应用

所以这是一个用来释放机器学习力量的案例。如何利用机器学习呢?

下面是一个使用监督学习的交易系统的典型工作流程图:

1.获取数据

财务时间序列的良好来源是你想要交易的交易所的API,AlphaVantage或Quandl的API。

数据的规模至少应该和你想要建模并最终预测的规模相同。你的预测范围是什么?

长期的范围将需要额外的输入因素,比如市场公告、政策前景,基于twitter关联数据的情绪分析等等。如果你在短期的游戏,甚至基于纯市场信号的高频交易数据,您可能想要包括各种长度的平均值为模型提供历史背景和趋势,特别是如果你的学习算法没有像周期性神经网络LSTMs那样的显式记忆单元。

技术分析中使用的所有常见的指标(如相对强弱指数(RSI),平均趋向指标(ADX),布林线(Bollinger Bands),MACD(平滑异同移动平均线))是基于某种数量(价格、成交量)的移动平均线——即使你不相信简单的交易规则,该模型将帮助并反映了大多数市场参与者包括他们的交易行为。

您的计算能力可能是一个限制因素,特别是在您的ML模型将与硬编码、快速且独特的市场制造或套利者的算法相抗衡的情况下。

部署专门的云服务器或像H2O和TensorFlow这样的ML平台,可以让您在不同的服务器上进行计算。

清理数据(你如何插补空白?),绘制它,同它一起玩耍——你已经发现了交易机会,趋势,异常吗?

2. 监督模型训练

将您的数据划分为训练、验证(用于参数调优、特征选择等)和测试的补充集。这实际上比听起来要复杂得多:最理想的情况是,测试集应该尽可能地与当前的市场状态“相似”,验证和测试集应该遵循相同的分布。

否则,您可能会浪费精力在验证集上调整模型参数,结果却发现它对测试集的泛化是很糟糕的。遵循“市场机制”的概念,也就是在特定的商品组合中,特定组合商品的延长期支配着你的目标工具价格动态——有必要首先有一个聚类算法的无监督学习发现定义相关性数据,然后评估属于同一集群的验证集和测试集的模型性能(参见图3——在这个项目中,集群使得预测性能提高了8%)。

图3:按照聚类算法(彩色部分是EUA结算价格)确定的一致市场周期

在早期,决定并建立一个单一的评价指标。追逐太多不同的指标只会导致混乱。

在算法交易的正文中,一个合适的衡量标准是“利润和损失”(PnL),因为它用实际的动荡大小(“相关性”)对分类精度(价格上升/下降)进行加权。它符合您可能考虑的交易策略的度量标准。观察训练和验证集的模型性能,如果训练集上的错误,即“模型偏差”,是很高的,你可能需要允许更多的模型参数(例如在深度学习模型中增加更多的层/神经元)。

如果模型缺乏泛化(“训练集的模型过度拟合),也就是验证集和训练集上的性能差异(“模型方差”)很高,你可能需要添加更多的数据训练集,减少最相关的特性,添加正则化(如L2,L1或中止)或早期停止(在梯度下降优化)。仔细检查模型出错的情况将有助于识别任何潜在的和可避免的模型偏差,参见图4。

图4:错误分析——价格变动与预测信心(大于0.5:上升,<0.5:下降)

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

3. 交易策略

定义你的交易策略:一套根据模型输出定义具体交易内涵的规则:如根据一个给定预测的模型置信度的阈值,设置你在市场上的头寸,头寸的大小,以及在给定的市场状态下,你持有一个头寸的时间。策略通常会附带一些需要优化的自由参数(下一步)。

在本文讨论的监督学习的背景下,这是一个相当于手动基于反向测试和网格搜索的过程(下面列出了一些缺点)。

4. 回溯测试&最优化

现在,我们可以看到这些数字——你的交易系统,或者预测模型和给定的交易策略之间的相互作用,在一套完整的历史市场数据上表现如何?

在这里,步骤2(模型训练)中使用的测试集可以成为调优策略参数验证集

遗传算法可以让你探索政策空间,从第一代的100个随机选择的政策参数开始,迭代地剔除80个最差的执行者,让20个幸存者每人产生4个后代。

或者,您可以在多维参数空间中使用网格搜索:从策略参数的一些看似合理的值开始,您可以通过逐一改变参数值来达到最优设置。

您在这里的性能评价是您最终希望在交易策略中优化的,例如PnL或一些导出量,如投资回报、夏普比率(sharperation)、风险价值、Beta系数等等,参见图5。

图5: PnL和夏普比率用于各种交易策略

防止将参数过度拟合到验证集的一个很好的方法是交叉验证,它使用“向前测试”(WTF:Walk-Forward-Test)来验证您方法的鲁棒性:优化验证段上的策略参数,在验证段之后的数据上及时测试它们,将验证段向前移动,以包含测试数据,重复。这里的基本假设是,最近的过去比更遥远的过去更能衡量未来。

5. 模拟和实盘交易

在您的策略上线之前,冻结所有系统参数和实时测试,就好像实际上是根据您的交易算法的输出来排列您的订单一样。这一重要步骤被称为纸交易,是检验你方法有效性的关键试金石。

你可能会注意到,在你的历史数据中,你实际上使用的值在给定的时间内是不可能达到的,例如计算移动平均值。如果你的策略看起来仍然很有希望,恭喜你——是时候去上线了!虽然您可以从手动下单开始,但不要低估了将您的策略与交易API结合在一起的管理和技术能力。

实际应用中存在的问题

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

对于衍生品合约,如基础上的期货,历史数据通常会报告一天的收盘价或选择的时间间隔和结算价格,这是在区间内实现的所有交易中合同的平均价格。但这不大可能是你可以通过购买或卖出订单的价格,根据订单数量的动态不同,在不同的价格/要价水平上有不同的交易量。所以你的模型预测从第2步开始,是指理论价格,但很可能不是你要下注的价格。

更详细的建模方法需要考虑到订单簿的实际结构和动态。

开发策略(步骤3)不是基于机器学习的模型的一部分,而是由直觉、经验或简单的启发式指导的手工过程。当模型预测价格上涨时,你会下一个购买订单(“长线”)。

但是你买了多少量?你使用什么置信度阈值?面对不利的市场环境,你能坚持多久?

反馈来得很晚:在你第一次看到你的策略的表现之前,你需要经历第1-3步。

预测模型和策略的参数是独立优化的,即使模型和策略实际上是相互关联的。

在这个框架中探索策略参数的空间是通过低效的数值优化来完成的,而不是通过对预测机器学习模型的强大梯度优化。

强化学习的框架整合了上面的步骤2和步骤3,将交易建模为一个代理(交易者)与环境(市场、订单簿)的交互,通过其操作(下订单)来优化奖励(如返回)。

虽然还处于早期阶段,但最近的研究表明,这是一个值得探索的途径——“需要做进一步的研究”。

后记

参见维基百科,关于“限量及交易”机制的广泛讨论,以及关于欧盟市场框架的更具体信息的维基百科。史密斯,环境经济学(牛津大学出版社,2011),对市场环境政策的历史和影响进行了很好的介绍:

  • 欧盟市场(EU ETS)维基链接:

    https://en.wikipedia.org/wiki/European_Union_Emission_Trading_Scheme


  • 排污权交易(Emissions Trading)维基链接:

    https://en.wikipedia.org/wiki/Emissions_trading

Denny Britz的博客文章更详细地介绍了订单簿的机制,以及算法交易中强化学习方法的前景:

  • Denny Britz’ 博客地址 :

    http://www.wildml.com/2018/02/introduction-to-learning-to-trade-with-reinforcement-learning/

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

产业机器学习Python
2
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

网格搜索技术

网格搜索是一项模型超参数优化技术,常用于优化三个或者更少数量的超参数,本质是一种穷举法。对于每个超参数,使用者选择一个较小的有限集去探索。然后,这些超参数笛卡尔乘积得到若干组超参数。网格搜索使用每组超参数训练模型,挑选验证集误差最小的超参数作为最好的超参数。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

遗传编程技术

遗传编程或称基因编程,简称GP,是一种从生物演化过程得到灵感的自动化生成和选择计算机程序来完成用户定义的任务的技术。从理论上讲,人类用遗传编程只需要告诉计算机“需要完成什么”,而不用告诉它“如何去完成”,最终可能实现真正意义上的人工智能:自动化的发明机器。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

监督学习技术

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

语音识别技术

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

特征选择技术

在机器学习和统计学中,特征选择(英语:feature selection)也被称为变量选择、属性选择或变量子集选择。 它是指:为了构建模型而选择相关特征(即属性、指标)子集的过程。

交叉验证技术

交叉验证,有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证的目标是定义一个数据集到“测试”的模型在训练阶段,以便减少像过拟合的问题,得到该模型将如何衍生到一个独立的数据集的提示。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

暂无评论
暂无评论~