Python 算法交易实验61 ADBS:QuantData到MyQuantBase-续3(故障处理)
Posted yukai08008
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 算法交易实验61 ADBS:QuantData到MyQuantBase-续3(故障处理)相关的知识,希望对你有一定的参考价值。
说明
故障重现并找到了,我觉得可以把这个问题当成一种设计模式予以强化。
内容
1 故障重现
我发现在CNT_Worker运行后,WorkOut队列会有小概率出现没有衍生特征的情况,进而无法输出,产生了阻塞。
- 当启动CNT_Worker时发生
- 观察到载入Pickle失败(Trancated,应该是sniffer在刷新这个文件)
2 修改Worker
一开始以为是pickle载入失败的问题,后来觉得应该不是,应该是Worker中的逻辑问题
原来在try的处理中,当计算条件不满足时也会给数据赋值,透传。这大约是因为在将条件进行扁平化判别条件时忘记将在输出时进行判定了。
msg.msg ='ok'
msg.status = True
msg.data = res_dict
msg.rule_result = 1
修改如下:
if is_trade_slot and is_retrievable and is_recs_right:
msg.msg ='ok'
msg.status = True
msg.data = res_dict
msg.rule_result = 1
else:
msg.status = False
msg.rule_result = None
msg.data = None
我觉得比较可能的故障原因是:
- 1 程序在不断的刷新数据
- 2 某个worker在某个时刻取数时可能数据量不足(某条数据在replace中…)
- 3 不满足is_recs_right,所以不执行amt等衍生量计算
- 4 仍然将输入的原始数据送到worker out中
3 使用Redis保存整个时间轴
在之前的方案中,采用Pickle方式维持本地的文件。后来我发现当启用多个worker的时候,这个开销就变得很大。
最初还是想节约一些内存空间,只保留最近的时隙,现在看来这个方法有点问题。因为Worker在进行实时加速时,肯定是要不断访问时间轴的,与其让worker自己去同步,不如在内存中维持一个完整的时间轴。
节约内存到浪费人的时间那就是真的不节约了,从这里也深深感觉到时间轴太重要了。
修改MyQuantBase里的sniffer,在redis中维持整个时间轴。形成「一次写入,多次读取」的实质效果。
4 模式
解决了一些具体的技术问题,我更关心的是这些技术问题所对应的模式问题。毕竟“从特殊到一般,再从一般到特殊”这样的归纳演绎才是完美的螺旋上升。
AF总是在“尽力投递” 。 所以在这次Worker的疏漏上,有一部分是因为不对Worker的产出物的宽度(维度)进行任何要求。所以,可以这么记忆,AF的高可靠加工流水线,需要增加一些输出性的要求。例如,本次的处理是产生特征,相当于是“加宽操作”,当加工结束后对应的宽度没有出现就是错误的。
扁平化逻辑要进行串联 。本次更大的锅是由这个模式背的。通过逻辑的扁平化,本来使得代码可读性更好,从而提高可靠性。然而,由于在最后没有进行串联,导致无效的加工也可以输出。
并发的反复读写还是要走内存。 这次在加速计算中,每个worker如果都通过读写pickle的话,每个worker都要额外花费很多时间在磁盘IO上。会浪费很多无谓的开销。像时间轴这种元数据,就应该直接在内存中读取。
通用的共用启用专门的服务。 这次使用了redis变量来缓存时间轴,但本质上这也不是最好的方式。我看redis的列表是字符型的,操作起来并不方便。所以像这种情况,我觉得使用一个微服务。这个微服务会keep一个python列表在内存中,并且通过接口来提供快速的查询操作。(当然,使用tornado会不会比flask更合适些?)
可预计错误与不可预计错误。 有些错误是在预料内的,这些应该使用机制来包容。有些错误是为预料到的逻辑错误,这些应该是用debug来解决的。
独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)
翻译:笪洁琼
校对:冯羽
本文约4200字,建议阅读14分钟。
本文将基于机器学习运用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的博客文章更详细地介绍了订单簿的机制,以及算法交易中强化学习方法的前景:
http://www.wildml.com/2018/02/introduction-to-learning-to-trade-with-reinforcement-learning/
原文标题:A Machine Learning framework for Algorithmic trading on Energy markets
原文链接:https://towardsdatascience.com/https-medium-com-skuttruf-machine-learning-in-finance-algorithmic-trading-on-energy-markets-cb68f7471475
译者简介
笪洁琼,中南财大MBA在读,目前研究方向:金融大数据。目前正在学习如何将py等其他软件广泛应用于金融实际操作中,例如抓包预测走势(不会预测股票/虚拟币价格)。可能是金融财务中最懂建筑设计(风水方向)的长腿女生。花式调酒机车冲沙。上赛场里跑过步开过车,商院张掖丝路挑战赛3天徒步78公里。大美山水心欲往,凛冽风雨信步行。
翻译组招募信息
工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。
你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。
其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。
点击文末“阅读原文”加入数据派团队~
转载须知
发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。
点击“阅读原文”拥抱组织
以上是关于Python 算法交易实验61 ADBS:QuantData到MyQuantBase-续3(故障处理)的主要内容,如果未能解决你的问题,请参考以下文章
独家 | 全解用Python建立能源市场算法交易的机器学习框架(附链接)