在上一篇文章中,小编为您详细介绍了关于《对话优必选周剑:弱人工智能时代下将公司做到50亿美金》相关知识。本篇中小编将再为您讲解标题量化投资中,计算技术指标时常见的8个坑【邢不行|量化小讲堂系列49-实战篇】。
原标题:量化投资中,计算技术指标时常见的8个坑【邢不行|量化小讲堂系列49-实战篇】
引言:
邢不行的系列帖子“量化小讲堂”,通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助。
个人微信:xbx9025 ,有问题欢迎交流。

这是邢不行第49 期量化小讲堂的分享
“我自己计算的指标,跟同花顺给出的指标值差别很大,这是什么情况?”
“talib计算的指标和很多主流平台也不一样……很好奇参数相同为何差别这么大?”
“有人算过macd指标吗?算出来和wind提供的数值相差有点多呀。”

以上问题都来自我量化课程答疑群里的小伙伴。
我们在做量化交易的时候,经常会自己编程计算一些技术指标。计算完之后为了验证准确性,会和行情软件上的数据进行对比,此时往往会发现有差别,就会产生以上的疑问。
那么这些差异,是什么原因造成的呢?我们应该采用什么样的应对措施呢?本文就列举了几个常见错误,来帮大家避免这些问题。

如果你是根据股票数据计算指标,第一点需要注意的是,你的股票数据是否经过复权处理。
在股票市场里,因为分红派息、拆股送股等原因,股价会发生异常变化。为了消除这些异常变化,大家往往会对股票数据进行复权处理。
以下是亨通光电这个股票的原始价格和复权之后的价格。可以看出,原始数据的K线图中有一个巨大的缺口。

亨通光电原始数据

亨通光电复权后的数据
针对这样的股票,我们在计算指标的时候就要特别留意:我们自己使用的数据是否进行了复权。如果你的数据没有复权,而行情软件使用的数据复权了,那么自然计算出来的技术指标的结果是不一样的。

另外,即使你保证了你的数据和行情软件一样,都经过了复权处理,但你还要注意:你们的复权方式是否一样。
因为其实复权方式有不同的计算方法。举个简单的例子,股票分红之后会进行扣税,有的复权方法会计算扣税,有的却不会计算。
即使同样是行情软件,复权方法都会不一样。以下是2019年2月28日贵州茅台这个股票在通达信行情软件和大智慧行情软件的数据对比:

贵州茅台在通达信行情软件

贵州茅台在大智慧行情软件
从图中我们可以看到,同样的股票、同样的日期、同样的后复权,但最后的数据却不一样。这其实就是两个软件计算复权的方式不一样导致的。感兴趣的可以扒扒它们的计算公式,或者加我微信xbx9025交流。
所以我们要特别留意自己数据的复权方式。如果你的数据和行情软件数据的复权方法不一样,那最终计算出来的技术指标肯定是有差别的。

除了复权之外,我们还要留意股票数据的完整性。
很多技术指标,即使用的数据一样,但如果你开始计算指标的时间不一样,最终结果也会差很多。
比如当你刚打开行情软件的时候,由于网络等原因可能导致股票数据加载不完全,它上面显示的技术指标可能是从6个月之前开始算的。
但是你自己的数据是从6年之前开始计算的,两者的开始时间不一样,这种情况就会造成某些技术指标的结果不一样。
当然也有可能是你自己数据比较短,只有最近一部分时间,这样也会造成和行情软件的不一致。
所以,当自己计算的技术指标与交易所显示的不同,那我们要去注意一下两者的数开始时间是否一致。

之前讲了股票,接下来讲讲数字货币。
首先是不要在不同的交易所之间比较技术指标。
数字货币的交易所有几千家。交易所之间的买卖交易是互相独立的,因此它们的交易数据也是各自独立存在而不相干的。
例如,以下两幅图是bitfinex交易所和okex交易所BTC/USDT交易对的K线数据对比。

bitfinex交易所

okex交易所
这两幅图对应的时间段完全相同,仔细观察会发现,两者价格走势接近,但不是完全一样的。所以基于此算出来的技术指标肯定也不会完全一样。
所以,我们在计算指标的时候,千万不要自己的数据是来自一家交易所的,但是却对照着另外一家交易所的行情数据去对比计算出的技术指标,这肯定是不一样的。

数字货币是7*24小时交易,不同地区的交易所会显示不同的时区。那此时我们就要特别注意,我们自己数据的时区和交易所行情数据显示的时区是否一致。
比如币安交易所,它的主流用户在中国,所以网页上显示的数据默认是就是北京时间。但是如果你使用接口去抓取币安的K线数据,它使用的却是UTC时间,也就是英国的格林威治时间。
那么此时当你计算技术指标的时候,使用的是UTC时间,很明显就会和交易所页面上显示的UTC+8的指标数据对不上了。
此时的应对方法就是修改交易所页面展示数据的时区,一般交易所都提供这个功能。下图是在bitfinex交易所修改时区的方式,右下角点击UTC时间,就会弹出选择时区的框框。


数字货币市场中有无数的“垃圾币”,这些币的成交量很低,经常会在1个小时之内一笔交易都没有。那么面对这样的一个小时,如何来画这一根K线呢?
有的交易所会直接略去这一根K线,把这个时间段给删了。而有的交易所是根据前一根K线的收盘价作为这根缺失K线的开高低收价,同时成交量设置为0来补全这根K线数据。
例如下图中的K线,大家看到一些横线,就是代表这根K线的时间内,没有发生一笔交易。

那么对于没有交易的K线数据,我们要确保,我们数据中的处理方式和交易所是一样的,不然计算得到的技术指标就会不一致。

大部分的技术指标都是源于国外,在翻译的过程中难免有些不准确,还有可能夹带着主观思想。因此经常会发现,同一名称的技术指标,在不同的地方,采用的是不同计算方法。
比如TA-lib库计算的ATR指标和国内主流行情软件中显示的指标就是不一样的。因为他们计算方法不一样。
国内行情软件一般是取TR(真实波幅)的简单平均,而TA-lib则是采取类似EMA平均一样的方法求TR的平均值。
通达信行情软件中计算ATR的公式如下图:

那TA-lib库计算ATR的公式是什么样的呢?通过深挖TA-lib库的底层代码发现这么一个注释:

talib.ATR的作者Wilder采用了移动平均的概念来使每一个新的ATR都包含前一个ATR的信息:ATR(t)=(ATR(t-1)*(Period-1)+TR(t))/Period,所以不是简单的算术平均。
这里提到的TA-lib库,在我们之前的量化小讲堂系列文章中有提到过。简单来说就是一个技术分析库,里面包含了大部分主流的技术指标,让使用者不用再重复造轮子。具体可参考之前的文章:
1)不用再自己写技术指标了丨Ta-lib视频教程
2) 建议收藏丨Windows下安装TA-Lib终极教程
还有的技术指标长得很像,而且计算思路也类似,比如刚刚提到的MA和EMA。MA是简单移动平均线,是根据最近n天的收盘价求算数平均值得到;而EMA看起来和MA很像,英文名字一不小心就看错,它是指数移动平均值,相当于是一个加权平均值,但是它的加权方式很特别,感兴趣的可以自己搜索下,或者加我微信交流。
所以当我们使用其他工具或者自己编写代码计算技术指标时,计算结果和交易所对不上,在排除数据源的问题后,很有可能就是指标的计算公式不一致。

同一技术指标的计算除了那些“肉眼可见”的区别之外,还有很多不容忽视的坑。
比如我们熟悉的布林线指标,在计算其中的标准差的时候,有的地方分母是使用的样本数,而有的地方采用的是样本数-1。
再比如很多指标在选择数据的时候,有的取包含今日在内的过去n根K线数据,有的取不包含今日数据的前n根K线。这样计算出来的结果显然是有差别的。
这些细小的差距对结果的影响不大,但差距又确实在那。往往会让你花很多时间去寻找为什么不同,最终发现的时候只给你带来一句:卧槽...

以上分析了计算指标和行情软件不同的几个原因,都来自于我实际的经验。其中有的可以解决,也一定要解决,不然你的策略结果就是错的。
而有的问题其实也解决不了,比如股票复权之类的问题。面对这种窘境,完美主义者可能会刨根问底且想方设法去找到原因并将其修正过来,但这种方式并不见得是最好的解决方案。
相信我,与其将时间花在这上面不如花更多的时间去研究策略。一般来说,只要确保数据源没问题,以及计算逻辑没错,就可以了。
系列文章推荐阅读
关于股票市值:99%投资者不知道的坑,你知道吗?
历年排名前10的基金,在第2年表现如何?Python告诉你答案
在量化投资中,原来K线还能这么画(附画K线代码)
关于量化的任何问题,或者想要了解其他内容,可以加我微信 (xbx9025 ) 和我交流游戏网
编后语:关于《量化投资中,计算技术指标时常见的8个坑【邢不行|量化小讲堂系列49-实战篇】》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《中国移动AI服务器采购 浪潮大额中标超2亿》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器