教你用MyTT、TA-Lib、Pandas TA计算股票指标,附源代码

  • 前言
  • 一、目前Python流行的几款股票行情分析指标计算库
    • 1. MyTT
    • 2. Ta-lib
    • 3. Pandas TA
  • 二、指标计算的准备工作
    • 1.下载MyTT文件
    • 2.安装Ta-lib包
    • 3. 安装Pandas-ta包
  • 三、分别用MyTT、Talib 、Pandas-ta计算5日均线、布林线、RSI、MACD指标
    • 1. 获取日K数据
    • 2. 计算5日均线、布林线、RSI、MACD指标源代码及耗时
  • 总结
    • 看到这里,如果文章对你有帮助,不妨在评论区写个评论,或是转发一下。对你无所谓,但它可以拓展笔者的写作权限,好写出更多的好文章分享给大家!
  • 后记

前言

话说做量化交易,多多少少都会用到各种指标。可是,使用过程中才发现,各种问题,搞得人焦头烂额。

  • 股票指标怎么算?
  • 谁家的库计算起来又快又准?
  • Talib的macd指标计算出来和国内软件不一样,怎么办?

这些笔者已经踩过无数的坑,下面我就带大家来一一解决实现。

一、目前Python流行的几款股票行情分析指标计算库

1. MyTT

它将通达信,同花顺,文华麦语言等指标公式indicators,最简移植到Python中,核心库单个文件,仅百行代码,实现和转换同花顺通达信所有常见指标,整个包就是一个文件,将其复制到项目目录即可调用,指标可以自行扩展。有些平台不允许安装第三方包,这个就一个文件,复制上去就可以用。而且速度也很快。

2. Ta-lib

Technical Analysis Library, 即技术分析库)是Python金融量化的高级库,涵盖了150多种股票、期货交易软件中常用的技术分析指标用得最普遍,估计量化人没有不知道的。因为已经编译过,所以速度很快,但有些指标和国内算法略有差异,指标不能自行扩展。但个人还是很推荐,毕竟速度快啊!

3. Pandas TA

它是python3中的Pandas技术分析库,是pandas和ta-lib的结合产物,方便的了dataframe的数据运算,对宽客们算是个利好。

二、指标计算的准备工作

因测试代码需要使用MyTT、Talib 、Pandas-ta包,请提前使用pip语句进行安装。MyTT为单文件,将其和测试代码放在同一目录即可。Talib 、Pandas-ta可使用如下方法安装。

1.下载MyTT文件

访问https://github.com/mpquant/MyTT,下载MyTT文件放到运行Python的目录即可。

2.安装Ta-lib包

Ta-lib 最简单的安装方式:pip install Ta-lib ,推荐使用如下代码:

pip install Ta-lib -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn --upgrade

注:Ta-lib很多人反映不好安装,经常报错。如果有问题,可参考《一文解决python各类第三方包的 pip 安装问题(含加速镜像源、pip在线离线安装方法,多环境安装,量化talib包安装方法)》https://blog.csdn.net/popboy29/article/details/126140862

3. 安装Pandas-ta包

pip install pandas_ta -i https://pypi.tuna.tsinghua.edu.cn/simple/

为了方便数据展示,需要调用prettytable包,请测试前提前安装,以免报错。安装语句如下:

pip install -U prettytable

三、分别用MyTT、Talib 、Pandas-ta计算5日均线、布林线、RSI、MACD指标

1. 获取日K数据

计算指标,先得有数据,采集数据可考文章《一文学懂通过Tushare、AKshare、baostock、Ashare、Pytdx获取股票行情数据(含代码)》
https://blog.csdn.net/popboy29/article/details/125815775

为了方便,这里我们使用 Ashare包,小巧方便,只一个文件。下载Ashare.py并将其也和测试代码放在同一目录即可。

2. 计算5日均线、布林线、RSI、MACD指标源代码及耗时

我们提取1000跟日K线数据,并给指标设定相同的参数,使用以上三种包分别计算指标。
具体代码如下:

import time
from Ashare import *
# 加载指标计算库
from MyTT import *
import talib
import pandas_ta as ta# ===============表格美化输出===============
def df_table(df,index):import prettytable as pt#利用prettytable对输出结果进行美化,index为索引列名:df_table(df,'market')tb = pt.PrettyTable()df = df.reset_index(drop = True)tb.add_column(index,df.index)for col in df.columns.values:#df.columns.values的意思是获取列的名称tb.add_column(col, df[col])print(tb)def cal_indicators_MyTT(df_data):# MyTT C = df_data['close']df_data['ma5'] = MA(C,5)df_data['bollUpper'],df_data['bollMiddle'],df_data['bollBottom']  = BOLL(C,N=20, P=2)df_data['rsi'] = RSI(C,14)df_data['diff'],df_data['dea'],df_data['macd']=MACD(C,SHORT=12,LONG=26,M=9)return df_data.round(3)def cal_indicators_Talib(df_data):# talibC = df_data['close']df_data['ma5'] = talib.MA(C,5)df_data['bollUpper'],df_data['bollMiddle'],df_data['bollBottom'] = talib.BBANDS(C,timeperiod=20,nbdevup=2,nbdevdn=2,matype=0)df_data['rsi'] = talib.RSI(C, timeperiod=14)df_data['diff'], df_data['dea'], df_data['macd'] = talib.MACD(C, fastperiod=12, slowperiod=26, signalperiod=9)# macd值需要乘以2,才可以和国内的股票软件一致df_data['macd']=df_data['macd'].map(lambda x: x*2)return df_data.round(3)def cal_indicators_Pandas_ta(df_data):# pandas-taCustomStrategy = ta.Strategy(name="我的指标库",description="SMA 50, BBANDS, RSI, MACD",ta=[{"kind": "sma", "length": 5},{"kind": "bbands", "length": 20},{"kind": "rsi", "length": 14},{"kind": "macd", "fast": 12, "slow": 26, "signal":9},])# # To run your "Custom Strategy"# print('df.ta.cores',df_data.ta.cores)# df_data.ta.cores = 0df_data.ta.strategy(CustomStrategy)# macd值需要乘以2,才可以和国内的股票软件一致df_data['MACDh_12_26_9']=df_data['MACDh_12_26_9'].map(lambda x: x*2)return df_data.round(3)if __name__ == "__main__":# 1.过Ashare获取数据print('开始提取K线数据')from  Ashare import *df_data=get_price('sz300750',frequency='1d',count=1000)  #frequency='1d' 表是获取日K,count=1000,表示获取1000根K线# print('Ashare行情获取\n',df_data)df_table(df_data.tail(20),'df_data')# 2. 测试计时开始,测试哪个就把if 后面的0改为1即可,其它改成0。time1 = time.time()print('开始计算指标')if 0:df = cal_indicators_MyTT(df_data)df_table(df.tail(20),'MyTT')# 计算指标耗时: 0.022001266479492188 秒if 0:df = cal_indicators_Talib(df_data)df_table(df.tail(20),'Talib')# 计算指标耗时: 0.019998788833618164 秒if 1:df = cal_indicators_Pandas_ta(df_data)df_table(df.tail(20),'Pandas_ta')# 计算指标耗时: 2.5784144401550293 秒time2 = time.time()print("计算指标耗时:",time2-time1,'秒') 

2.1 使用MyTT计算结果如下:

2.2 使用Talib计算结果如下:

2.3 使用Pandas_ta计算结果如下:


总结

1、通过对比可以发现,使用MyTT和Talib计算耗时较短,而且Talib更胜一筹。这是因为后者为已编译过的库,所以运算效率极高。这也是其使用普遍的原因。不过,由于MyTT是单个文件,语法很是精炼,提供了源代码方便大家自由扩展。

2、细心的朋友应该已经发现,Talib计算MACD指标和国内不一样,需要对macd值再乘以2才可以对齐国内的指标。另外Talib库有很多指标国内没有,需要的朋友可自行百度学习。

3、Pandas_ta 有个好处,可以一次性打包计算多个指标值,这个值得我们学习。不过其计算效率打折严重,如果对时效要求不高,那就无所谓了。另外,因为使用Talib进行包装,所以MACD同样需要乘以2哦。

看到这里,如果文章对你有帮助,不妨在评论区写个评论,或是转发一下。对你无所谓,但它可以拓展笔者的写作权限,好写出更多的好文章分享给大家!


后记

Pandas Technical Analysis(Pandas TA)是一个易于使用的库,它基于Python的Pandas库构建,具有120多个指标和实用函数。这些指标通常用于带有列或标签的金融时间序列数据集:datetime、open、high、low、close、volume等。包括许多常用的指标,如:简单移动平均(sma)、移动平均收敛发散(macd)、赫尔指数移动平均(hma)、布林格带(BBAND)、On-Balance体积(obv)、Aron&Aron振荡器(Aron)、挤压(Squeeze)等。
PandasTA有三种不同的处理技术指标的方法,如下所述。在Pandas数据帧扩展模式下运行指示器的主要要求是open、high、low、close、volume都是小写的。根据指示器的不同,它们要么返回命名序列,要么返回大写下划线参数格式的DataFrame。例如,MACD(fast=12,slow=26,signal=9)将返回一个包含列的数据帧:[‘MACD_12_26_9’,‘MACDh_12_26_9’,‘MACDs_12_26_9’]。这个和国内的指标对应关系分别是diff,macd,dea。

【指标计算】老妈再也不担心我的指标算不好了(教你用MyTT、TA-Lib、Pandas TA计算股票指标,附源代码)相关推荐

  1. 妈妈再也不用担心爬虫被封号了!手把手教你搭建Cookies池

    2019独角兽企业重金招聘Python工程师标准>>> 很多时候,在爬取没有登录的情况下,我们也可以访问一部分页面或请求一些接口,因为毕竟网站本身需要做SEO,不会对所有页面都设置登 ...

  2. C语言大学期末考试重点,快点码住,再也不用担心挂科啦

    很多萌新一到大学就玩嗨了,C语言到期末了还一窍不通,小编这次整理了大学期末考试的考试重点,让你考前冲刺,妈妈再也不用担心我的学习啦~挂科对大学生的坏处可想而知,不仅会被取消奖学金,评优评先也没有资格参 ...

  3. 情绪控制,拥有开挂的人生——妈妈再也不担心,我找不到女朋友了

    每个人都有自己的情绪,学会控制自己的情绪,你才能更好的控制自己的人生. 人之所以区别于其它的动物,其中很重要的一条就是因为我们可以控制自己的情绪.一个人连最基本控制情绪的能力都没有,还怎么能控制好自己 ...

  4. 【NLP】⚠️学不会打我! 半小时学会基本操作 5⚠️ 家暴归类, 妈妈再也不同担心我被家暴啦

    [NLP]⚠️学不会打我! 半小时学会基本操作 5⚠️ 家暴归类, 妈妈再也不同担心我被家暴啦 概述 数据介绍 词频统计 朴素贝叶斯 代码实现 预处理 主函数 概述 从今天开始我们将开启一段自然语言处 ...

  5. android 傻瓜式 MultiDex 插件,从此再也不用担心方法数问题!

    ndroid-Easy-MultiDex 项目地址:TangXiaoLv/Android-Easy-MultiDex 简介:Android 傻瓜式 MultiDex 插件,从此再也不用担心方法数问题! ...

  6. 多维度对比5款主流分布式MQ消息队列,妈妈再也不担心我的技术选型了

    1.引言 对于即时通讯网来说,所有的技术文章和资料都在围绕即时通讯这个技术方向进行整理和分享,这一次也不例外.对于即时通讯系统(包括IM.消息推送系统等)来说,MQ消息中件间是非常常见的基础软件,但市 ...

  7. 自从看了这篇文章,妈妈再也不用担心我的学习了!!

    Vue部分小结 首先理清思路 代码展示 1.v-if以及{{}}代码展示 <body><div id="app" ><h1 v-bind:class= ...

  8. 狗年拜年php源码,2018狗年拜年词大全!再也不担心拜年没祝词啦~祝您新年快乐!...

    原标题:2018狗年拜年词大全!再也不担心拜年没祝词啦~祝您新年快乐! 2018 狗 年 大 吉 HAPPY NEW YEAR 为了您在春节期间能够在第一时间 为您的亲朋好友送上祝福~ 小编已经贴心的 ...

  9. 做一个python的旅游系统_有了它,妈妈再也不担心我感冒了,Python使用迭代器进行天气预报...

    上一篇博文我们使用Python制作了一个简单的天气预报小程序(天气渐冷,Python小工具让你随时掌握气温变化,做温暖的穿衣达人).今天,需求有变,如果我们想去旅游,备选方案有北京.上海.广州.新疆等 ...

最新文章

  1. strcpy +memcpy实现循环右移
  2. Uvalive 4043 - Ants(二分图完美匹配)
  3. 学电脑从新手到高手_小白如何学手绘插画?新手到高手必学的四套教程【614期】...
  4. 来自艾斯维尔的计算机科学系的期刊排行,研究生必备!
  5. 在柱状图中找最大矩形——O(n)时间复杂度java实现
  6. SQL必知必会-联结
  7. 谈谈遵守公司作战纪律
  8. 干货整理!10个Python图像处理工具,入门必看,提效大法 | 资源
  9. # 搭建用户行为分析系统(一)——概述
  10. 炸弹小分队-超详细开服教程,教你如何开炸弹小分队服务器公开派对房间
  11. Java类和对象:private/public/friendly/封装
  12. 你想要的宏基因组-微生物组知识全在这(2022.10)
  13. 认识PASCAL VOC数据集(目标检测)
  14. 转:Beautiful Soup
  15. IIS Express 7.5 directory browsing 启用目录浏览
  16. SAP FAGLGVTR 总账科目年末结转
  17. 养生年龄的早龄化一一朱乐睿教授
  18. 泛微OA-根据值定位值所在的表
  19. Valley Numer hdu-6148
  20. 一口气入门计算机网络基础(CCNA)

热门文章

  1. arduino灯带随音乐_Arduino—超简单音乐制作
  2. ILRuntime学习——从零开始
  3. 小程序setData数据量大时,导致卡顿怎么解决
  4. undefined reference to 'function'及解决办法
  5. Kubernetes实战吴龙辉
  6. 【Android】BoardcastReceiver简介
  7. Linux-Day2笔记
  8. 58 同城 iOS 客户端组件化演变历程
  9. Git系列(四)、在IDEA操作Git本地仓库与连接远程Git仓库(推送、合并、拉取、克隆操作)
  10. 2+22+222+2222