【转】python获取计算股票技术指标DIF/DEA/MACD

http://t.csdn.cn/8hd5jicon-default.png?t=M7J4http://t.csdn.cn/8hd5jpython有几个股票数据获取接口,如tushare,但其只能获取到一般指标,且是积分制,即如果要获取更多的指标和接口,则需要做任务提高积分;pytdx可以获取到基本指标,且速度较快,性能比较稳定;talib可以获取到股票高级技术量化指标,但经过测试,其获取到的数据与各大第三方股票软件数据不一致,如通达信、同花顺、东方财富.

先了解一下DIF、DEA、MACD指标的计算方式:

【转】python获取计算股票技术指标DIF/DEA/MACD_第1张图片

dif/dea/macd计算公式

经过调查,之所以有差距,是因为talib的DIF/DEA/MACD指标计算中用到的初始EMA指标,是将我们调用时间段的起始日EMA赋值为0,而各大交易软件商则将其股票上市日的EMA赋值为0.

那是不是我们将调用数据的起始时间定为股票上市时间就可以了呢,当然可以,利用tushare接口可以获取到股票的上市时间,但这样不能一次性获取所有,比较麻烦,需要单个调用。故知道了计算公式的我们可以自己计算。

代码如下:

  1. #导入相关模块
  2. from __future__ import print_function, absolute_import
  3. from gm.api import *
  4. import pandas as pd
  5. import numpy as np
  6. import tushare as ts
  7. from datetime import date,timedelta,datetime
  8. import time
  9. #单只股票计算函数
  10. def MACD(ts_code,start_time, end_time):
  11. # 取历史数据,取到上市首日
  12. ts.set_token('###########################')
  13. pro=ts.pro_api()
  14. data=pro.daily(ts_code=ts_code)
  15. data.sort_values(by='trade_date',inplace=True)
  16. # 将数据转化为dataframe格式
  17. #data['bob'] = data['bob'].apply(lambda x: x.strftime('%Y-%m-%d')).tolist()
  18. # 计算EMA(12)和EMA(16)
  19. data['EMA12'] = data['close'].ewm(alpha=2 / 13, adjust=False).mean()
  20. data['EMA26'] = data['close'].ewm(alpha=2 / 27, adjust=False).mean()
  21. # 计算DIFF、DEA、MACD
  22. data['DIFF'] = data['EMA12'] - data['EMA26']
  23. data['DEA'] = data['DIFF'].ewm(alpha=2 / 10, adjust=False).mean()
  24. data['MACD'] = 2 * (data['DIFF'] - data['DEA'])
  25. # 上市首日,DIFF、DEA、MACD均为0
  26. data['DIFF'].iloc[0] = 0
  27. data['DEA'].iloc[0] = 0
  28. data['MACD'].iloc[0] = 0
  29. # 按照起止时间筛选
  30. MACD = data[(data['trade_date'] >= start_time)]
  31. return MACD
  32. # 测试一下
  33. ts.set_token('############################')
  34. pro=ts.pro_api()
  35. #获取主板上市股票
  36. stocks = pro.stock_basic(exchange='', list_status='L', market='',fields='ts_code,symbol,name,industry,list_date')
  37. df=pd.DataFrame()
  38. x=0
  39. n=len(stocks['ts_code'])
  40. for i in list(stocks['ts_code']):
  41. try:
  42. a= MACD(ts_code = i,start_time = '2021-01-01',end_time = '20210308')
  43. df=pd.concat([df,a],axis=0)
  44. print(i)
  45. time.sleep(0.301)
  46. except:
  47. pass
  48. df= MACD(ts_code='',start_time = '2021-01-01',end_time = '20210308')
  49. df.to_excel('cast.xlsx')

这里用了tushare获取股票的基本数据,然后进行计算。下面是UP主获取到的数据,经与交易软件对比,四舍五入后完全一致,感兴趣的小伙伴可以自己尝试一下。

【转】python获取计算股票技术指标DIF/DEA/MACD_第2张图片

http://t.csdn.cn/8hd5jicon-default.png?t=M7J4http://t.csdn.cn/8hd5j

你可能感兴趣的:(python,开发语言)