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

  • Post author:
  • Post category:python





http://t.csdn.cn/8hd5j


icon-default.png?t=M7J4
http://t.csdn.cn/8hd5j



python有几个股票数据获取接口,如

tushare

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

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

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主获取到的数据,经与交易软件对比,四舍五入后完全一致,感兴趣的小伙伴可以自己尝试一下。




http://t.csdn.cn/8hd5j


icon-default.png?t=M7J4
http://t.csdn.cn/8hd5j