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

教你用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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42853.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行业指数的周期以及跑赢指数的分位数是多少?

前言 本篇是量化系列的第一篇文章。《量化十万个为什么》系列旨在讨论一些自己心中的疑问,并且通过尝试解答这些问题来提升自己对于市场的认知水平。 PS:博主水平很辣鸡,请大家轻喷,多多指教! 一、为什么提这个问题&…

如何通过通达信接口获取最近的分钟级别行情数据?

如何通过通达信接口获取最近的分钟级别行情数据?对于做短线策略的交易者来说,得到实盘的量价数据之后,还需要把这些数据转换为各种技术指标,在策略中去使用和分析。 由于本地采样时间和交易所推送数据时间会有微小的差别&#xf…

POSTMAN 启动特别慢解决方案

需要为POSTMAN添加环境变量: 高级系统设置-环境变量 添加一个新的系统变量: 变量名:POSTMAN_DISABLE_GPU 变量值:true 重新启动POSTMAN

GPT套壳还能走多远?第一批AIGC创业公司开始裁员?新初创公司又该如何应对大模型的快速迭代升级?

AIGC创业投融资火爆推进,一则裁员公告却从天而降引爆关注: 公告来自首批AIGC明星独角兽Jasper。 早在ChatGPT爆火之前,AIGC也还不是大家耳熟能详的概念时,这家公司就已经背靠GPT-3,在18个月从白手起家到估值15亿美元。…

【Python】学习笔记

【Python】学习笔记 【Python】1. in和not in操作2.glob3.Pandas.apply()4.df.dropna()5.fine-tune迁移学习——Fine-tune蒸馏 参考文献 【Python】 1. in和not in操作 利用in和not in操作符,可以确定一个值是否在列表中。像其他操作符一样,in和not in…

聚观早报|OpenAI发文介绍保障AI安全的方法;王慧文AI公司正式开张

今日要闻:OpenAI发文介绍保障AI安全的方法;印度或首次参与iPhone15首批供货;胡润全球白手起家U40富豪榜发布;王慧文 AI 公司正式开张;吴以岭卸任以岭药业董事长 OpenAI发文介绍保障AI安全的方法 美国当地时间 4 月 5 …

手写操作系统+shell+文件系统,绝了

去年秋招及年后找工作的小伙伴应该感受到了寒气逼人,机会又少、又卷……加上chatGPT的出现,可以预见未来几年,简单、基础、重复性工作大概率会被机器人取代……我们将何去何从呢?毫无疑问,成为技术大牛! 如…

友盟分享QQ的时候提示应用未正确授权错误码901111

今天打包分享qq的时候突然出现应用未正确授权错误码901111 于是就上友盟和腾讯开放平台上找对应错误码,居然没有发现对应的错误码! 经过一番折腾后发现 这个错误是因为在腾讯开放平台没有提交apk的原因导致的 登录腾讯开放平台选择我们的应用 点击进…

微信授权APP第三方登陆(Android)

前几天负责的程序说是要加入第三方登陆的功能,虽然现在有服务商集成了第三方登陆,但是平时所用的也就微信和QQ,就自己看文档写了,其中也遇到了一些问题,然后我把我做这个的流程贴出来,并附上对应的Demo&…

qq授权登录【网站应用】-java版本

第一步&#xff1a;先去qq互联进行创建网站应用&#xff1a;QQ互联 如下图&#xff1a; 第二步&#xff1a;引入qq的jar包&#xff0c;这里采用maven方式引用 <!--QQ坐标--><dependency><groupId>net.gplatform</groupId><artifactId>Sdk4J<…

微信授权登陆-app

app接入第三方微信登陆功能&#xff1a; 移动应用微信登录是基于OAuth2.0协议标准 构建的微信OAuth2.0授权登录系统&#xff0c;前提你需要到微信开放平台注册开发者帐号&#xff0c;并拥有一个已审核通过的移动应用&#xff0c;并获得相应的AppID和AppSecret&#xff0c;申请…

Polkit授权管理

Polkit的配置&#xff1a; 查看polkit服务&#xff1a; 一个是agent&#xff0c;一个是polkit服务&#xff1b; agent包含监听接口和一个用户界面&#xff08;对话窗口&#xff09;&#xff0c;允许用户输入密码。Authentication Agent API Reference(https://www.freedesktop…

chatgpt赋能python:Python实现人脸识别

Python 实现人脸识别 随着人工智能技术的发展&#xff0c;人脸识别已经成为一个热门话题。Python作为一种流行的编程语言&#xff0c;也可以用来实现人脸识别。在这篇文章中&#xff0c;我们将介绍使用Python实现人脸识别的方法。 人脸识别的原理 人脸识别是通过计算机程序识…

比尔·盖茨到达北京;印度要求中国手机品牌高管应为印籍;Android 14 Beta 3 推出|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

亚马逊高调入局ChatGPT大战,发布Titan大模型、AI编程助手全免费,CEO:改变所有体验...

MLNLP社区是国内外知名的机器学习与自然语言处理社区&#xff0c;受众覆盖国内外NLP硕博生、高校老师以及企业研究人员。 社区的愿景是促进国内外自然语言处理&#xff0c;机器学习学术界、产业界和广大爱好者之间的交流和进步&#xff0c;特别是初学者同学们的进步。 转载自 |…

【图像分割】TransUNet学习笔记

论文名称&#xff1a;TransUNet: Transformers Make Strong Encoders for Medical Image Segmentation 论文地址&#xff1a;https://arxiv.org/pdf/2102.04306.pdf 代码地址&#xff1a;https://github.com/Beckschen/TransUNet 前言&#xff1a; TransUNet将Transformer和U-…

什么是分镜?用UniStory管理分镜,制定拍摄计划和讨论故事板

分镜是什么 一部成功的电影、电视剧、广告、Vlog等视觉体验&#xff0c;都离不开分镜创作 分镜又叫做故事版&#xff0c;用于早期电影内容的策划和制作&#xff0c;在电影拍摄之前根据导演的要求&#xff0c;用图表的方式来说明影像的构成。一般120分钟的电影&#xff0c;需要2…

AI打LeetCode周赛进入前10%!秘诀:自然语言编程

张晓雅 投稿自 凹非寺量子位 | 公众号 QbitAI 还在自己吭哧吭哧打算法平台Leetcode的周赛&#xff1f;为什么不试试神奇的ChatGPT类AI呢&#xff01; 用AI助手Claude参加第103场周赛&#xff0c;共四道题&#xff0c;均完成了AC&#xff0c;能达到参与者前10%的成绩。 事情的起…

怎么做好电商运营?40份电商运营表格模板,你离优秀的运营只差了一个表格

怎么做好电商运营&#xff1f;40份电商运营表格模板&#xff0c;你离优秀的运营只差了一个表格 618又来了&#xff01;每年的这个时候&#xff0c;都是电商促销活动的高潮&#xff0c;各种优惠活动层出不穷&#xff0c;不管是对你是做电商运营的还是一个消费者&#xff0c;都很…

【跨境电商】EDM邮件营销完整指南(一):概念,区别与优势

关键词&#xff1a;EDM营销&#xff0c;邮件营销&#xff0c;跨境电商 2020年&#xff0c;全球每天发送和接收3064亿封电子邮件。世界上几乎每个人都有一个电子邮件地址&#xff0c;并且电子邮件营销继续拥有最高的投资回报率&#xff0c;这使得电子邮件营销策略对于企业营销工…