1. 导语
每个人都在用自己的能力尝试去理解期货,我也一样。
做好期货交易,在我的认知里,两种策略能持续稳定赚钱:一种就是无关价格方向,要有波动率、有流动性的中高频策略。另一种是主观交易,从供需入手,找到市场偏离价值的机会。
前者已经越来越偏技术装备的升级和策略的快速迭代,后者更需要扎实的产业供需分析,对宏观,产业,资金面数据的充分理解和平衡。
认识期货10年了,观察大宗商品价格在供需变化过程中的跌宕起伏,发现每次产业出现大行情的时候,基本面供需关系的变化是类似的,每一次可能引发行情的原因不一样,但结果却会是一样的,数据是客观的。
既然如此,为什么要让自己肉眼来发现行情呢,人总有疲劳的时候,总有不专心的时候,但机器不会,肉眼能看到几个品种?那还得相当勤奋吧。我要可以全市场监测,这样可以让自己专注于决策,而非基础的数据收集。
于是逐渐理清楚了需求:
1. 当基本面发生变化到一定程度的时候,再结合技术面的变化,提示交易机会和平仓机会。
2. 分析的前提是有充分的数据,建立数据库,让系统自动爬取数据并更新,不再传统的手动更新数据。
3. 自动生成产业数据和报告。
想到自己搭建这套系统的迷茫,从一篇篇文章中汇集知识点的辛苦,于是打算写下这篇文章,一是为了感恩,二是如果能给到需要的朋友一点点帮助,也算是有些欣慰了,如果写的不好,还希望多指正,在市场面前,我只是学生。
2. 搭建数据框架并自动生成报告
因为研究最久的是PTA,最有感情的也是PTA,因此选择PTA来做我的基本面量化首站。
首先要获得数据,获得数据就要搭建数据库,传统的excel肯定是不行,我选了MySQL数据库做数据储存。MySQL有自己的语句,但我的感受是苦涩,因此我仅仅是用了MySQL的储存功能,其他比如删空、查重等功能都放在了python里面进行。
数据的来源首选wind,是因为wind 的接口、数据广度都很合适,不过在具体产业数据的深度上还是需要产业的信息网站数据配合,因此网络爬虫的使用也是不可少的。编程语言上我选择的是语法简洁、金融模块强大的python。
数据内容的选择上,我会尽可能的将PTA产业链的数据都一一导入,覆盖上游原油,PX,PTA,聚酯,织造,服装进出口等环节。数据围绕供应,需求,库存,利润等展开。
在对数据进行分析前,还需要对数据进行清洗,毕竟这么多数据导出来,是不是有空值的,有异常值的,有重复的,在频率上是否一致,这些都要在数据分析前处理好,对于数据的填充,有多种办法,我一般优先选择interpolate模块,具体情况可以具体选择。
再下一步就是数据的预处理了,根据需要整理出熟悉的图表,比如PX的利润,pta的生产利润,聚酯产业链开工率,聚酯库存等等。这里需要考虑到增值税的变化,因为增值税的两次降低,需要将部分涉及增值税的数据分成三段分别计算后拼接起来,现在可以让数据展示出来了:
图表1
整理好这一系列数据后,我就想到能不能做成一个UI可视化界面,让这些数据自动显示,于是就顺便用了PYQT做成了这种界面:
图表2:
这样的界面出来后,一度让我比较满意,不过随着后面在陆续做MEG,MA等品种的基本面量化发现,这样还是比较繁琐,同时,在移动互联网时代,我还在做PC端的服务类产品,其实是不方便的。于是决定还是让其一键生成报告,这里用到了python中的docx模块让其自动写成pta日报,然后自动将word转化成pdf格式:
图表3:
在我的文件夹中就自动出现了这样一篇文章,名称,内容都自动实现。
图表4:
自动生成一篇pta日报的时间,在没有用到多线程的情况下的话,花费19秒,让我手动来写,还不算更新数据以及分析数据,没有两、三个小时我是搞不定的。
图表5:
图表6:
每一张图表后面,我会让其把最新的数据自动贴出来,同时让系统自主判断,当符合一定要求自动提示,比如上图中当pta工厂开工率在一定范围以上,会增加一句开工率处于高位的话。
做完以上这些,第一部分算是完成了。下面开始我需求的第二部分:基本面量化交易。
3. 基本面量化的开始-了解基本面
首先我将过去10年的PTA各个因子数据都提炼出来,并将涨跌幅在20%以上的行情起始、结束阶段的基本面信息情况一一分析。我们来看下pta产业链,笔者简化了一些环节,为的是看起来方便:
图表7:
由上图可以看出,PTA用途比较单一,绝大部分是作为聚酯的主要原材料之一。价格变化的背后,就是供需变化的结果。当生产利润不错的时候,工厂往往会选择增加产量,长期投资上选择新建产能。当集中投产的时候,就是利润坠落的开始,对该产业环节来说,就是长期的,痛苦的去产能过程,这个过程中,要么供应实质的减少了,要么需求真正的上来了。当完成这一出清的时候,供需的错位,又会导致另一种极端行情的到来。2010年的时候是宏观上利好,产业上PTA供应不足,聚酯需求不错,因此PTA工厂利润丰厚,同时PTA价格一直比较坚挺。2011年开始,供应集中释放,同时叠加宏观的资金收紧,PTA价格开始一落千丈,一直到2017年都在经历去产能的痛苦过程,这中间有2014年pta工厂的三巨头联盟、减少供应等产业自救措施出台,然而终究抵不过利益的诱惑,联盟解散。后来到2018年年中的时候,PTA产能集中度提升,需求利好,库存低位,再加上一些装置停车之类的导火线,引发了2018年8月份轰轰烈烈的上涨行情。抛开这些行情的表面,我们不难发现,这些行情背后,就是供需关系在主导行情,正是基于这些认识,才有了建立PTA基本面量化的依据。
既然是严谨的量化模型,就要考虑到因子的实用性,因此会放弃一些时效性滞后的数据,还有一些并不全面的数据。同时我也十分清楚,放弃一些数据,就意味着对某种行情的把握会不够准确,对于这种情况来说,可以暂时放弃此类行情的捕捉,弱水三千,我只取一瓢。等到后面数据更为完善,再捕捉更多的行情机会。先来看下我最后选择的因子:
图表8:
对于其上游PX,这里只选用了px 的加工费、国内的负荷两个数据,实际上应该还要选择PX 的供需平衡表,或者是库存消费比的,后续会重点加入库存消费比。因为PX的对外依存度比较高,进出口数据不能及时反映国外装置的变化,国外px装置开工率变化是上选。但对于PX国外装置的变化,我自己虽然有全部装置数据,但如果不能从第三方资讯让程序自动抓取,而需要我自己计算就太费工夫了,毕竟我的目标是全品种。这种暂时的放弃会对于多头行情不会有影响,但对于基于px投产导致的pta价格下跌行情捕捉会有限。其实放弃也是暂时无奈之举,国内px数据完善的信息提供商太少,相信随着信息的更加透明话,这一块会补齐。
PTA这块,信息就完善的多些,从pta工厂的负荷,到pta库存消费比,以及pta加工费都比较完善,这里依然放弃供需平衡表这种月度的数据,也是考虑到进出口数据的时效性,毕竟进出口的数据往往滞后一个多月才能拿到具体数据,用库存消费比代替供需平衡表事实证明是可行的,我们是要服务于交易的,而不是只追求一个事后充分的报告而已。
需求端聚酯,我们用了聚酯负荷,聚酯加权利润,库存,产销以及下游织造的库存天数,负荷等数据,接下来我们将这些数据放在一起,并升采样某些数据,将其频率全部调整成日级别,并将数据标准化,做相关性分析:
图表9:
将这些数据放在一个维度后,我尝试过用sklearn做多元线性回归,分别建立训练集和测试集,得出的是这样的结果:
图表10:
其中蓝色的是拟合函数,红色的是价格走势,R的平方为:0.67823,数据越靠近1,数据的预测准确度越高。
4. 逻辑的回测
以下进入行情逻辑回测实证,仅仅涉及到行情机会的发现,并没有用到杠杆。
机会的逻辑我偏向于估值+驱动的方法,首先要做的是从基本面上找到估值过低,或者估值过高的行情,然后再结合技术面以及产业装置变化等情况来寻找行情驱动因子。
因此,对于做多行情来说,有PX亏损,PTA亏损且开工不降甚至反升,聚酯利润持续走好,聚酯负荷提升,库存走低,长丝产销能根据行情及时爆发配合,织造库存低位等这几种情况的组合。
估值偏离内在价值是相对好找的,不太好找的是驱动因子,同时有些突发因素我们一目了然,但要让程序全网监测到一条消息并立刻分析出其对商品价格的冲击几何,这是我后面需要研究的方向之一。
做多行情的机会发现:
(1) 估值偏低提示策略一:
当PX和PTA都陷入亏损,提示估值偏低机会。
(2) 估值偏低提示策略二:
当下游聚酯综合利润高于200,且长丝加权库存处于平均15天以下并在逐步降低,聚酯开工率逐步提升,且PTA库存消费比低于0.5时,提示估值偏低机会。
(3) 估值偏低提示策略三:
当下游聚酯很好,PTA或者PX之一陷入亏损,提示估值偏低机会
(4) 估值偏低提示策略四:
当库存消费比极低,比如低于0.4,下游中性即可,而同时遭遇PTA总产能3%装置以上的停车,提示估值偏低机会。
当出现以上这些机会的时候,再监控技术面和资金面,当技术面也支持上涨时,基本面与技术面共振,提示趋势买入机会,这样可以做到买入在行情启动的一开始或者路上,也许会放弃一些利润,但也同样的降低了一些风险。
为什么要加上技术面的判断?在14年10月份开始的那波下跌更多是由于原油趋势下跌导致,而我们并没有导入原油的相关因子,初衷是认为还没有能力将原油看的很准,因此还不如暂时不加入。当时在下跌过程中的10,11月份基本面已经是不错的,如果不考虑到技术面的情况,就会得出要涨的错误信号。行情是由宏观,资金,产业链各个环节组合的效果,当发现明显只由宏观,或者原油主导,而基本面是与其反向的时候,要尊重盘面,不应该逆势开仓,耐心等待合适机会的来临。再比如18年下半年开始逐渐升级的中美贸易战更多影响的是预期,盘面也提前反应了悲观预期,就如同我一开始所说,暂时没有办法用数据来解释其逻辑的话行情就应该暂时放弃。
平仓的时机是极为重要的,有了好的开场就应该有好的结尾。否则一开始的努力都是白费。该谨慎的时候谨慎,该贪婪的时候就应该贪婪。当刚刚开仓不久,行情就遭遇跌破形态的回调,这是应该及时平仓的。平仓也有几个办法在这里仅供参考:
第一:行情很快反向,可根据技术面快速平仓。
第二:基本面的反转也可以作为平仓信号处理,买入的时候是基本面不错的时候,当基本面已经转为利空的时候,行情走老的可能性很大,可以主动让技术面的反转设置的敏感些,一有回撤就平仓。
第三:基于行情连续回撤,且回撤达到一定比例,止盈,或者是长期均线的反转,都是平仓的条件之一。
基于以上逻辑,我们得到了日线级别趋势做多行情的净值图:
图表11:
一些回测数据:开仓15次,其中盈利9次,亏损6次,赢利概率:60%,最大亏损单笔112元/吨,最大盈利单笔1874元/吨。亏损往往发生在进场时机并不太好,不过程序做到了及时出场。
这种策略基本是能发现行情的开始,但会提前结束,至于行情要多灵敏,或者多迟钝,我觉得不能为了回测数据好看而过度优化,而应该坚持符合行情逻辑,毕竟我们要把握的是未来的行情,而不是过去,我们需要让系统更能适合未来的环境,而非追求完美,越敏感我觉得就会越脆弱。
做空策略相对就要复杂一些,这里会涉及到一些投产预期的行情处理问题,比如当pta或者px在未来几个月将有较大装置投产时,期货往往会提前反应,而当前基本面往往没有多大变化,期货盘面往往表现为近强远弱,这种时候更应该关注跨期套利机会,其对于趋势行情是有干扰的。还有一点,如果是基于原油单因素趋势下跌,而基本面很好的情况下带来的下跌行情,也是暂时不能捕捉的到的。好在这种行情在过去十年中只出现了一次,也就是14年下半年这波,这波下跌的一开始是和基本面共振下跌的,基于基本面的估值过高已经捕捉到了这段。而到了11月份的时候,基本面已经很健康了,因此,14年12月份这波单单基于原油趋势下跌而下跌的行情并没有把握到。
另外,也不能因为仅仅利润高就做空,虽然按照统计,过去当利润达到一定界限的时候,利润回落的可能性比较大,但这并不能在逻辑上很好的得到解释,且以往的天花板往往会被打破,比如18年前PTA的利润到1000元/吨就非常不错的,然而随着产能集中度的提升,18年8月份这波上涨利润达2000元/吨以上也是常有的事,那样做只能捕捉过去的行情,这样的行情我认为也是经不起推敲的,如果将这个写进来,会埋雷的。
趋势做空策略,主要基于两点逻辑:
第一,pta或者px供应增加,导致供过于求,库存上升,估值偏离,当偏离到一定程度时,且出现行情驱动因子,行情开始往下回归估值,所以其利润越丰厚行情就越大。
第二,在前一波上涨过程中侵蚀了下游聚酯的利润,下游利润走差,库存高企,聚酯有降负荷的迹象,同样导致了估值的偏离,当出现驱动因子的时候,行情也将开始往下回归估值。
基于这两点逻辑,结合数据的可获得性,做出了以下策略:
(一) 估值偏高提示策略一:
上游投产导致当前估值偏高机会:当PTA投产或者PX投产,且聚酯走货不顺,聚酯库存累积,结合技术面的变化,提示做空机会。
(二) 估值偏高提示策略二:
当聚酯利润产生亏损,且库存持续走高到15天以上,结合技术面的变化,提示做空机会。
(三) 估值偏高提示策略三:
这个策略设置的敏感些,当PX和PTA都累积了一定的利润,而聚酯开始走低,聚酯加权库存超过15天,过去10天涨幅超过3%以上,且RSI超过70后回落,提示做空机会。
综合这些策略,再加上止损条件,其结果如下图:
图表12:
一些回测数据:开仓10次,其中盈利10次,亏损0次,赢利概率:100%,最大盈利单笔1377元/吨。当这个数据出来的时候,我第一反应是我是不是优化过度了,毕竟这是我最想规避的问题,其实数据设置的越严格,其成功概率会越高,同时,交易机会次数就会越少,这还是一个取舍的问题。
以下是多空策略的组合收益情况:
图表13:
对于PTA趋势行情的挖掘还会继续优化,在深度上,结合基本面对日内行情也做一个把握,近月逼仓识别一下,跨期套利机会发现起来。同时,在广度上,逐渐覆盖全品种,就可以加入强弱对冲机会,来规避系统性风险以及发现更多的机会。
行情一直在变化,我们也一直在路上,对市场保持敬畏之心,欢迎加微信交流沟通:
本文无须授权可直接转载,但需转载全文。
免责声明:本报告的信息均来源于公开资料,我公司对这些信息的准确性和完整性不作任何保证,也不保证所包含的信息和建议不会发生任何变更。我们已力求报告内容的客观、公正,但文中的观点、结论和建议仅供参考,报告中的信息或意见并不构成所述品种的操作依据,投资者据此作做出的任何投资与本公司和作者无关。
文章原创于外盘期货官网:http://www.haoyaya.com.cn/