以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 程序化交易实盘俱乐部 (http://222.73.7.161/bbs/list.asp?boardid=9) ---- [原创]谈谈程序化交易那点破事(连载) (http://222.73.7.161/bbs/dispbbs.asp?boardid=9&id=75277) |
-- 作者:lizhaozhao -- 发布时间:2015/2/2 15:25:31 -- [原创]谈谈程序化交易那点破事(连载) 开发一个程序化交易策略的过程本质上都是在追求经验风险最小化。为什么叫“经验风险”?根据已知的历史数据去归纳总结,不就是经验嘛。经验风险最小化顾名思义就是根据已知样本数据去不断优化你的策略,去达到风险最小化的目的。为什么叫“风险最小化”?风险就是指你出错的可能性,我们通过不断的优化去减少出错的可能性,不就是风险最小化嘛。风险最小化更直观的理解就是收益最大化。(呵呵,别嫌我啰嗦)。 于是通过我们的不懈努力终于得到了一个经验风险最小化的模型,但现在问题来了,我们选定这个模型的假设与问题真实解之间究竟有多大差距,我们就没法得知。比如说我们认为宇宙诞生于150亿年前的一场大爆炸,这个假设能够描述很多我们观察到的现象,但它与真实的宇宙模型之间还相差多少?谁也说不清,因为我们压根就不知道真实的宇宙模型到底是什么。 直观的表现便是用历史数据测试很好的模型一旦实盘就不行了。(为什么不行?本人曾千百遍的逼问自己),看看经验风险最小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行。但实际上能逼近么?答案是不能。(为什么不能?因为样本数据相对于真实世界来说简直九牛一毛,有人可能会说那我用一个品种上市以来所有的历史数据来做样本,我会问他“那未来呢”?哈哈哈) 闲话少说,来看看我们的真是风险到底是什么: R(w)≤Remp(w)+Ф(n/h) 公式中R(w)就是真实风险,Remp(w)就是经验风险,Ф(n/h)就是置信风险,经验风险代表了分类器在给定样本上的误差,置信风险代表了我们在多大程度上可以信任分类器在未知文本上分类的结果 也许有人会问为什么公式不用等于号要用大于等于呢?因为公式的第二部分是没有办法精确计算的,因此只能给出一个估计的区间,也使得整个误差只能计算上界,而无法计算准确的值(所以叫做泛化误差界,以上公式及理论基础请问度娘,本人不做过多介绍)。 经验风险大家容易理解,那置信风险呢?置信风险与两个量有关,一是样本数量,显然给定的样本数量越大,我们的学习结果越有可能正确,此时置信风险越小;二是模型(函数)的VC维,显然VC维越大,推广能力越差,置信风险会变大。 那到底什么是VC维呢?(读到这里肯定有人开始讨厌我了,但不打紧,为了大家更好的理解,我还是解释一下),所谓VC维是对函数类的一种度量,我们可以简单的理解为模型的复杂程度,VC维越高,一个模型就越复杂。VC维理论是统计学习理论界的大牛Vapnik和Chervonenkis创造的,详细的解释此处需要2000到3000字,大家还是去问度娘吧。 现在大家都明白一个直观的道理了吧。原来交易策略要适应未来并长期有效,关键就是要函数的VC维越小越好(程序越简单越好)。 回过头来我们谈谈策略优化的问题,我们有一定的样本数据,通过过度优化(设很多参数,加很多过滤条件…),必然会得到一个测试效果很好的模型(数量为N的样本数据必然能被一个N-1次多项式函数几乎100%的拟合),也就是说,只要模型足够复杂,不管多么非线性的数据总是可以被拟合的。但是…这不和我们刚才提出的要减小VC维,减小模型复杂度的理论相冲突吗???好吧,为了减小模型复杂度,那我就不去优化策略好了,可是不去优化策略,我程序的拟合度又很低,在历史数据里测试都没法赚钱,怎么办呀??? 为了更好的解释这一问题,我又要提出两个遭人烦的专业名词了,“偏差”和“方差”,具体还是去问度娘。一个在历史数据中没怎么优化的模型,测试效果肯定不好,叫欠拟合,一个在历史数据中过度优化的模型,测试效果肯定好,叫过拟合。欠拟合就叫偏差太大,过拟合就叫方差太大,怎么才能在偏差和方差二者之间权衡呢?这个问题正是我下一节要讲的。这是一篇连载的帖子,作者暂时有点累了,呵呵…… (一大堆文绉绉的专业名词和概念想必看了就烦,想刨根问底的朋友可以去看看网易公开课里面有个叫斯坦福大学机器学习公开课的课程,讲师是目前大名鼎鼎的百度的首席科学家吴恩达) |
-- 作者:衡山掌门 -- 发布时间:2015/2/2 17:04:41 -- 写的很好 支持一下 |
-- 作者:lizhaozhao -- 发布时间:2015/2/2 19:53:50 -- 有人在问我,你上文说的“只要模型足够复杂,不管多么非线性的数据总是可以被拟合的”。 还说什么“数量为N的样本数据必然能被一个N-1次多项式函数几乎100%的拟合”。你是谁牛皮的吧?你能做得到吗?给你某段时间2000根K线样本数据(数量随便写的),你设计一个算法,根据这个算法可以依据所要判断的K线之前的数据做为自变量来精确地判断下一根K线是涨还是跌。(意思就是说我要判断10:00点钟K线的涨跌,必须只能用10:00点以前的数据去做自变量,不然就成未来函数了,还有什么意义呢,哈哈)。 可以负责人的告诉大家,我可以做得到。而且是100%的正确(判断涨还是跌)。不是我个人能力有多强,而是我只需用到了一些机器学习和数据挖掘方面的算法,这些算法的种类很多,就不一一道来了。说到底它就是一个强奸数据的工具,哈哈! 肯定有人会说这么多年来这么多人梦寐以求想达到的目标,你用一个数据挖掘的算法轻轻松松的就达到了,那全世界的钱都让你一个人赚去得了。哈哈哈,千万别忘了我们前文所说的这个拟合精度仅仅是建立在已知样本上的,而且函数的VC维极高,它对样本外(未来)数据的推广能力(适应性)是很差的,用这样的策略去交易未来的行情,结果只有亏得一塌糊涂。 我来解释一下为什么是这个结果,因为为了适应已知数据非常非线性的波动特点,算法当然会去选择一个非常复杂的N次函数(一个在维度非常高的空间中的分类超平面),远远超过电影《星际穿越》中的五维空间哦,物理学中能被证明出来的空间也就五维,但是数学中的维度是无限多的。 言归正传,这样得到的分类函数是过拟合的,按我们前文的结论,过拟合是高方差的,是没有推广能力并不适应未来的。 |
-- 作者:惊弓之鸟 -- 发布时间:2015/2/2 21:08:50 -- 很好 ![]() |
-- 作者:onceflyhigh -- 发布时间:2015/2/3 9:32:11 -- 还没看见干货,拭目以待....... |
-- 作者:joe1328 -- 发布时间:2015/2/3 21:52:55 -- 写得很好!赞叹!希望不要是烂尾楼。楼主写出了很多我一直在思考而不得其要的问题,请楼主继续深入写下去,谢谢! |
-- 作者:deng_deng -- 发布时间:2015/2/4 16:29:37 -- 马甲吧?哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 |
-- 作者:yucongy -- 发布时间:2015/2/10 16:31:35 -- 从来没听说过有非线性模型能百分百拟合金融数据,楼主能解决该问题实是大牛啊~ |
-- 作者:lizhaozhao -- 发布时间:2015/2/10 23:31:11 -- 回楼上的,能拟合金融数据的算法有很多种,有贝叶斯网、神经网络、支持向量机等,理论上只要决策函数足够复杂,就能接近100%的拟合样本内数据。 |
-- 作者:QQ56048933 -- 发布时间:2015/2/11 13:01:59 -- 高手,支持一下 |