R语言大会量化金融专场冯永昌演讲全文丨CTA后验和参数寻优中的统计学处理 – Python量化投资

R语言大会量化金融专场冯永昌演讲全文丨CTA后验和参数寻优中的统计学处理

R语言大会量化金融专场冯永昌演讲全文丨CTA后验和参数寻优中的统计学处理

时间:2016年5月28日 下午
地点:人民大学国学馆
演讲者:冯永昌博士


演讲正文:

冯永昌:
   
大家好!今天的主题是CTA,关键词是统计学处理。
   
量化投资里面除了阿尔法投资之外,最重要的就是CTA了。那么什么是CTA呢?CTA是美国对商品投资顾问的资质称呼,即Commodity Trading Advisor,可以对个人、机构或者基金提供投资咨询或者投资管理服务。但是商品主要用的是技术分析,因为它的基本面不像股票那样有用。把技术分析应用于CTA时,为了保证投资决策的持续性和基金管理的盈利性,需要技术分析的基础上加上资金管理、止损、跟踪止盈等投资管理要素,这样就形成了系统交易。而这种系统交易通常利用程序化来实施,所以CTA在实践中的词也叫程序化交易。注意这个是狭义的程序化交易,和高频交易、算法交易没关系。我们说的程序化交易指的就是程序化CTA,就是用技术分析去做大宗商品。那最核心的思路是什么呢?CTA主要是在做趋势投机。当然CTA可以去做套利,可以去做高频,可以去做其他策略,但这些都不是主流,CTA主要是做趋势投机。为什么不是震荡呢?因为所有的震荡在更小级别上看都是趋势。趋势是一切的关键,那么趋势是什么呢?趋势要严格定义其实很难,有涨有跌就有趋势。一跳也是个趋势,一分钟内也会有趋势。我们一般把一周以上价格的明显涨跌叫做周趋势,几周的一般叫做中级趋势,几个月的一般叫做长期趋势,当然日内也可以有日内趋势。
   
就和昨天我讲的阿尔法不能预测市场一样,CTA同样不能预测市场,只是跟随市场。CTA策略的胜率其实很低,超不过40%。那为什么知道下单的时候大概率是错的还要下单呢?因为错的时候CTA会认错止损,对了就跟随趋势一直拿下去,所以CTA有个好处就是赔率很高。测算表明,金融市场只有30%左右的时间具有明显的趋势,大部分时间市场没有趋势,都是在频繁的止损,所以CTA是个的胜率很低赔率很高的游戏。做趋势不是要预测趋势,只是跟随趋势,当我的指标告诉我趋势要来的时候,大概率是错的。但是知道是错的也得做,如果真的市场验证趋势是错的那么止损就可以了。这个和阿尔法是完全相左的逻辑,我见过很多做CTA的人永远也不理解阿尔法是怎么赚钱的,相反很多做阿尔法的人不理解趋势交易的思路。不同的思想,不同的假设,不同的价值观。
   
下面我们举个例子。Hans123这个策略在股指期货没有限制之前是非常流行的,道理很简单就是区间突破。以前一段时间的最高价和最低价作为通道,向上突破就做多,向下突破就做空,换句话说就是利用通道来判断趋势的发生。当然有可能是错的,错的时候止损,对的时候拿着。


下面是Hans123用Q语言写的一段代码:


然后跑一下后验,效果特别差。为什么呢?因为没有考虑止损。


加入止损之后,重新跑一下后验,效果好了一些。


但是有了止损还不够,在研究了交易单之后发现盈利保护没有做好,于是加入浮动止盈,后验结果有所改善。


但是这个结果并不满意,想一想有没有必要加入二次开仓,也就是在暴涨暴跌的送钱行情中进行加仓。后验结果又进一步。


以上就完成了一个CTA策略的优化,和我昨天讲的阿尔法相比没有什么技术含量,比较简单,但是需要对技术分析的思想有深刻的认识。做阿尔法投资如果不读个统计学博士一般是玩不转的,而CTA不用受很高的教育,如果对交易有深刻的理解,就可以用系统性交易的方式进行实施,结果会非常好一点不会比阿尔法差。不同的路径,不同的哲学,不同的成功模式,没有孰优孰劣。
   
下面讲讲后验,后验牵扯到了哲学问题,在CTA方法论中最有统计味道的,也就是后验。不同背景的从业者对后验的看法不同,有的追求实盘交易的匹配性,有的指标的好坏,还有些人不是很关心。而这里就牵扯到了一个基本的思路,就是数据到底有没有用。对于学量化的人来说,数据是对的,也是错的。学过统计的人都应该听过一句话,就是所有模型都是错的,但是有些模型是有用的。因为数据里边有信息也有噪声,有用的是信息,不可把控的是噪音。如果你完全不相信数据,那么你就进入了一个随机世观,如果你完全依赖数据,那么你就陷入了历史说明论。这个时候你怎么办,只能通过多种方式的平衡,比如获得一组市场数据后,你可以通过mean-variance的平衡,让方差最小,在模型的预测度和模型的能力之间去寻找一种平衡。比如alphago一样,你可以无限的复杂,把历史上的所有棋盘都学得精精确确没有误差,可是在一个新的棋局面对新的对手时,你是没有任何依据可寻的,所以这里需要一个平衡。你需要在历史期盼中学习到有用的信息,而舍弃那棋盘博弈者自身独特的下棋方法。这里CTA策略也一样,可能我不知道对于我的数据我到底该不该进行寻优,下面就是一个很核心的点,过度拟合和参数优化的有效性。
   
一个通道突破策略,时间可以设成参数,把指令设成参数,把一切可变的都设成参数,然后把所有可能的步长都进行遍历。但复杂性几何级的提升,这个就是机器学习的事情,可是在CTA中你不能把模型做的那么复杂,用一个支持向量机去算一算,完全没有用。在CTA里真正赚钱的是均线,而不是支持向量机,支持向量机10年前的时候我同学在研究最后发现完全不赚钱。其实我就一个很简单的交易系统,参数不超过3个,对于统计学来说超过3个参数的就完全没有意义。寻优后的参数我选择哪一个?最好的做法就是画一个曲线,二维的时候是一个曲面,三维的时候就是一个3+1的热力图,你去寻找一个区域,这个区域里的参数都比较好,你才能在区域中挑一个去使用,这个结果才是有实盘效应的。要不然按照传统方法通过暴力运算把所有结果都算出来,统计学上完全没有意义。找到好区域有几种做法。比如cross-variation,学过机器学习的同学一定知道他的重要性,把数据分成训练数据和测试数据,但是我的数据有限时,不能有那么多数据区随便切割,我就可以在样本内进行步长的移动,自然生成若干个样本。在CTA中也一样,我可以把一段区间留下来,让它自由移动,去生成n个序列,从而去测试,寻找好的参数。或者用moving average等,我这就不累述了,只有这样的后验才是有用的。第二个呢,就是参数抽样。如果你的参数非常多,全都算一遍效率非常低,比如说测试20个标的,K线呢20分钟,10分钟,都想看一看,甚至3分钟,7分钟的奇异均线我都很好奇。多个策略也要一块后验,各个时间段都想了解有各种参数的数据集,这样的话问题就很复杂,算起来就非常慢。这时候就要用抽样,抽样不但可以提高效率,还可以把数据孤点过滤掉。参数进行抽样和数据进行抽样两种方式都可以生成曲面。最后一招就是运用了现代统计学中的一个办法。在优化中是寻求建立一个参数和业绩之间的关系,这个关系是什么目前虽然不知道,比如非线性关系,这个关系是未知的比如由hans123,海龟交易生成的。它其实就是一个函数关系,我可以用非参数的方法,局部线性的方式去估计,估计寻完优后每个参数对应的业绩。通过Local linear或者smoothing等方法。这样就可以把平滑的面做出来,知道业绩最好的区域在哪里。这种方法才是现在CTA策略的做法,也是芝加哥的CTA对冲基金正在使用的方法。我自己的博士生导师在世界最大的CTA基金里当adviser,也教过这种方法,当然,除了这些还有很多的方法,但是原理就是一开始我讲的趋势交易,技术就在后验的精度要高,有预测效力,还有一个就是对资金管理的认知和策略组合的认知以及对真正合约的认知,为什么统计不同的合约,为什么我自己造一个非常有趋势的新的合约,这些就是现代CTA的思路。现代CTA的思路就可以做到,一般一个精准后验后,可以说我方法论的极限和我硬件的极限使得我的性价比不高,只能说10%回撤50%收益,这个比例是定下来的。但是你要可以说到做到,或者说这一年的表现,加减仓等一切都是定下来的,跟预先结果吻合。而不是最近有的炒策略,炒策略就是说中间过程中根据自己的理解去干预什么时候加减仓,完全就是炒量化,当然炒量化也是一种炒法,可能比炒期货高级一点,但是你永远事先不知道,事后会发生什么事,也没有办法做到事先承诺的点。

今天是个抛砖引玉的话题,以后大家还要学习统计学的思路,数据是真的也是假的,真假之间不是诡辩,要用统计学的知识去计算。人大的很多老师对现代时间线序列方面有很多的建树,我们可以运用这些方法到CTA策略中去,通过天语或者大宽网等写策略都可以,但是你的思路要对,知道CTA是什么东西,知道用我的方法要怎么去做。

对于程序化交易,最后借用桥水中国区总裁的话总结一下,承认自己的无知是一种非常强大的力量!谢谢大家!
梦幻模拟战下载
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论