这是邢不行第 49 期量化小讲堂的分享

作者 | 助教-夏普、邢不行

“我自己计算的指标,跟同花顺给出的指标值差别很大,这是什么情况?”

“talib计算的指标和很多主流平台也不一样……很好奇参数相同为何差别这么大?”

“有人算过macd指标吗?算出来和wind提供的数值相差有点多呀。”

以上问题都来自我量化课程答疑群里的小伙伴。

我们在做量化交易的时候,经常会自己编程计算一些技术指标。计算完之后为了验证准确性,会和行情软件上的数据进行对比,此时往往会发现有差别,就会产生以上的疑问。

那么这些差异,是什么原因造成的呢?我们应该采用什么样的应对措施呢?本文就列举了几个常见错误,来帮大家避免这些问题。

01 

股票价格是否复权

如果你是根据股票数据计算指标,第一点需要注意的是,你的股票数据是否经过复权处理。

在股票市场里,因为分红派息、拆股送股等原因,股价会发生异常变化。为了消除这些异常变化,大家往往会对股票数据进行复权处理。

以下是亨通光电这个股票的原始价格和复权之后的价格。可以看出,原始数据的K线图中有一个巨大的缺口。

亨通光电原始数据

亨通光电复权后的数据

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

02

复权方式不一样

另外,即使你保证了你的数据和行情软件一样,都经过了复权处理,但你还要注意:你们的复权方式是否一样

因为其实复权方式有不同的计算方法。举个简单的例子,股票分红之后会进行扣税,有的复权方法会计算扣税,有的却不会计算。

即使同样是行情软件,复权方法都会不一样。以下是2019年2月28日贵州茅台这个股票在通达信行情软件和大智慧行情软件的数据对比:

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

贵州茅台在大智慧行情软件

从图中我们可以看到,同样的股票、同样的日期、同样的后复权,但最后的数据却不一样。这其实就是两个软件计算复权的方式不一样导致的。感兴趣的可以扒扒它们的计算公式,或者加我微信xingbuxing0807交流。

所以我们要特别留意自己数据的复权方式。如果你的数据和行情软件数据的复权方法不一样,那最终计算出来的技术指标肯定是有差别的。

03

股票数据开始时间是否一样

除了复权之外,我们还要留意股票数据的完整性

很多技术指标,即使用的数据一样,但如果你开始计算指标的时间不一样,最终结果也会差很多。

比如当你刚打开行情软件的时候,由于网络等原因可能导致股票数据加载不完全,它上面显示的技术指标可能是从6个月之前开始算的。

但是你自己的数据是从6年之前开始计算的,两者的开始时间不一样,这种情况就会造成某些技术指标的结果不一样。

当然也有可能是你自己数据比较短,只有最近一部分时间,这样也会造成和行情软件的不一致。

所以,当自己计算的技术指标与交易所显示的不同,那我们要去注意一下两者的数开始时间是否一致。

04

数字货币市场中交易所不一样

之前讲了股票,接下来讲讲数字货币。

首先是不要在不同的交易所之间比较技术指标。

数字货币的交易所有几千家。交易所之间的买卖交易是互相独立的,因此它们的交易数据也是各自独立存在而不相干的。

例如,以下两幅图是bitfinex交易所和okex交易所BTC/USDT交易对的K线数据对比。

bitfinex交易所

okex交易所

这两幅图对应的时间段完全相同,仔细观察会发现,两者价格走势接近,但不是完全一样的。所以基于此算出来的技术指标肯定也不会完全一样。

所以,我们在计算指标的时候,千万不要自己的数据是来自一家交易所的,但是却对照着另外一家交易所的行情数据去对比计算出的技术指标,这肯定是不一样的。

05

数字货币市场中数据之间的时差

数字货币是7*24小时交易,不同地区的交易所会显示不同的时区。那此时我们就要特别注意,我们自己数据的时区和交易所行情数据显示的时区是否一致

比如币安交易所,它的主流用户在中国,所以网页上显示的数据默认是就是北京时间。但是如果你使用接口去抓取币安的K线数据,它使用的却是UTC时间,也就是英国的格林威治时间。

那么此时当你计算技术指标的时候,使用的是UTC时间,很明显就会和交易所页面上显示的UTC+8的指标数据对不上了。

此时的应对方法就是修改交易所页面展示数据的时区,一般交易所都提供这个功能。下图是在bitfinex交易所修改时区的方式,右下角点击UTC时间,就会弹出选择时区的框框。

06

数字货币数据缺失

数字货币市场中有无数的“垃圾币”,这些币的成交量很低,经常会在1个小时之内一笔交易都没有。那么面对这样的一个小时,如何来画这一根K线呢?

有的交易所会直接略去这一根K线,把这个时间段给删了。而有的交易所是根据前一根K线的收盘价作为这根缺失K线的开高低收价,同时成交量设置为0来补全这根K线数据。

例如下图中的K线,大家看到一些横线,就是代表这根K线的时间内,没有发生一笔交易。

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

07

同一技术指标的计算方法不一样

大部分的技术指标都是源于国外,在翻译的过程中难免有些不准确,还有可能夹带着主观思想。因此经常会发现,同一名称的技术指标,在不同的地方,采用的是不同计算方法。

比如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很像,英文名字一不小心就看错,它是指数移动平均值,相当于是一个加权平均值,但是它的加权方式很特别,感兴趣的可以自己搜索下,或者加我微信交流。

所以当我们使用其他工具或者自己编写代码计算技术指标时,计算结果和交易所对不上,在排除数据源的问题后,很有可能就是指标的计算公式不一致。

08

特别容易忽视的小差别

同一技术指标的计算除了那些“肉眼可见”的区别之外,还有很多不容忽视的坑。

比如我们熟悉的布林线指标,在计算其中的标准差的时候,有的地方分母是使用的样本数,而有的地方采用的是样本数-1。

再比如很多指标在选择数据的时候,有的取包含今日在内的过去n根K线数据,有的取不包含今日数据的前n根K线。这样计算出来的结果显然是有差别的。

这些细小的差距对结果的影响不大,但差距又确实在那。往往会让你花很多时间去寻找为什么不同,最终发现的时候只给你带来一句:卧槽...

09

总结

以上分析了计算指标和行情软件不同的几个原因,都来自于我实际的经验。其中有的可以解决,也一定要解决,不然你的策略结果就是错的。

而有的问题其实也解决不了,比如股票复权之类的问题。面对这种窘境,完美主义者可能会刨根问底且想方设法去找到原因并将其修正过来,但这种方式并不见得是最好的解决方案。

相信我,与其将时间花在这上面不如花更多的时间去研究策略。一般来说,只要确保数据源没问题,以及计算逻辑没错,就可以了。

联系作者

推荐阅读

2018量化炒币7大玩法复盘 | 视频、PPT分享

关于股票市值:99%投资者不知道的坑,你知道吗?

历年排名前10的基金,在第2年表现如何?Python告诉你答案

在量化投资中,原来K线还能这么画(附画K线代码)

系列文章

点击图片即可阅读

如果你想入门量化,但是始终找不到方向,可以加入我的知识星球。我会在里面解答你的问题,分享我的感悟,不论是投资、技术,还是职业选择、思维方式。

igraph 算网络指标_量化投资中,计算技术指标时常见的8个坑相关推荐

  1. 【邢不行|量化小讲堂系列49-实战篇】量化投资中,计算技术指标时常见的8个坑

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]EOS期现 ...

  2. java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略

    <量化投资:以python为工具>第五部分笔记 先来画k线图,要注意finance模块已经从matplotlib库中去除,现在要用mpl_finance库,单独安装. 其中有candles ...

  3. python k线图和指标_量化交易中,如何使用Python画K线、成交量、买卖点【邢不行】...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总] 请点击此处 这是邢不行第  68 ...

  4. 圆柱体积怎么算立方公式_四个计算圆柱的体积常用公式(附例题)

    圆柱的体积是六年级下册第三单元的知识点.利用圆柱的体积公式计算圆柱的体积显得尤为重要.让我们一起来复习一下吧! 第一个计算圆柱的体积公式 新课是怎样引出圆柱的体积的呢?你还记得那个操作不? 选自人教版 ...

  5. 年龄到底怎么算才对_人的年龄怎么计算

    展开全部 一般都是以周岁或者虚岁e69da5e887aa62616964757a686964616f31333365653136来计算的. 1,周岁,是国际通用的年龄计算方式.它计算的是出生后已经度过 ...

  6. 计算器算贝塞尔公式_不会计算的你千万不要错过:一建经济必做50道计算题+42页公式详析...

    本次送出的这份资料是一建<经济>考前必做50道题+42页经济学霸笔记,内含80%计算题精讲,有公式的注意事项,有典型案例,有解题思路!真的不要错过了! 2019年我一次考过了一建4科,其实 ...

  7. cdr怎么算曲线周长_如何去计算cdr里面曲线图形的周?

    2017-03-01 文字商标和图形商标在设计与使用上有什么 文字商标是指用汉字及其拼音字母或其他文字.字母组合而成,使用在商品或服务上的标志.文字,包括汉字.汉语拼音字母.我国少数民族文字和外国文字 ...

  8. python计算期望值_机器学习:计算方差时为何除以n-1

    小弟准备了数据结构.Java.大数据.AI.面试题.python等各种资料 需要领取等朋友麻烦 转发此文,然后私信[学习]即可获取 设样本均值为 ​,样本方差为 ​,总体均值为 ​,总体方差为 ​,那 ...

  9. KKS1(生产订单计算-计算差异)时 常见差异问题

    消息代码 消息描述 备注说明 011 订单没有状态DLV 或者TECO 订单未完工或关闭,不计算差异,正常 013 系统状态 CRTD 是活动的 (ORD 1807040001) 生产订单没有下达,正 ...

最新文章

  1. How is application controller loaded by UI5 framework
  2. Error: could not open `C:\Java\jre7\lib\i386\jvm.cfg
  3. eclipse使用技巧_有效使用Eclipse的热门技巧
  4. winform中treeview控件实现部分节点显示checkbox
  5. python正则判断_Python 正则表达式
  6. 2020年快手短视频直播电商营销增长宝典
  7. Android merge优化UI
  8. Python版猜数游戏
  9. python class用法理解_通过钢铁侠变身快速理解Python的装饰器用法
  10. java中的递归问题_java 递归问题
  11. 这个世界是怎么了?做商业软件的怎么越来越流氓了?
  12. LeetCode_14_python_最长公共前缀
  13. 2019版PHP自动发卡平台源码
  14. 2018我读过的那些书
  15. 微信小程序登陆流程踩坑
  16. html里的底部c怎么打出来,版权所属符号-网站底部版权符号怎么打出来
  17. Django模板渲染错误
  18. 网络安全:namp扫描工具
  19. 计算机如何恢复桌面,如何恢复计算机桌面图标不见了
  20. 2017 Real-valued (Medical) Time Series Generation with Recurrent Conditional GANs

热门文章

  1. CVPR2020事件相机(Event Camera)研究文章汇总
  2. Mask_YOLO_Caffe:基于Mask-RCNN和YOLO检测的工程实现(附源代码)
  3. java中哈夫曼编码所用的函数_数据结构(java语言描述)哈夫曼编码
  4. 前端安全之CSRF攻击
  5. ICML2020 | 基于贝叶斯元学习在关系图上进行小样本关系抽取
  6. RDKit toolkit实战三:描述符计算及可视化
  7. showdialog 尝试读取或写入受保护的内存_共享内存在不同系统的应用与优劣详解...
  8. UpSetR 高级参数使用教程
  9. Microbiome:植物发育和氮肥共同作用下的小麦根系微生物组
  10. 有了易生信,导师再也不用担心我的单细胞转录组整合分析啦