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

 

学习 3-8 

115阅读4点赞0评论

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

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

dif/dea/macd计算公式

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

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

代码如下:

#导入相关模块
from __future__ import print_function, absolute_import
from gm.api import *
import pandas as pd
import numpy as np
import tushare as ts
from datetime import date,timedelta,datetime
import time

#单只股票计算函数
def MACD(ts_code,start_time, end_time):

    # 取历史数据,取到上市首日
    ts.set_token('###########################')
    pro=ts.pro_api()
    data=pro.daily(ts_code=ts_code)
    data.sort_values(by='trade_date',inplace=True)

    # 将数据转化为dataframe格式
    #data['bob'] = data['bob'].apply(lambda x: x.strftime('%Y-%m-%d')).tolist()

    # 计算EMA(12)和EMA(16)
    data['EMA12'] = data['close'].ewm(alpha=2 / 13, adjust=False).mean()
    data['EMA26'] = data['close'].ewm(alpha=2 / 27, adjust=False).mean()

    # 计算DIFF、DEA、MACD
    data['DIFF'] = data['EMA12'] - data['EMA26']
    data['DEA'] = data['DIFF'].ewm(alpha=2 / 10, adjust=False).mean()
    data['MACD'] = 2 * (data['DIFF'] - data['DEA'])

    # 上市首日,DIFF、DEA、MACD均为0
    data['DIFF'].iloc[0] = 0
    data['DEA'].iloc[0] = 0
    data['MACD'].iloc[0] = 0

    # 按照起止时间筛选
    MACD = data[(data['trade_date'] >= start_time)]

    return MACD

# 测试一下
ts.set_token('############################')
pro=ts.pro_api()
#获取主板上市股票
stocks = pro.stock_basic(exchange='', list_status='L', market='',fields='ts_code,symbol,name,industry,list_date')
df=pd.DataFrame()
x=0
n=len(stocks['ts_code'])
for i in list(stocks['ts_code']):
    try:
        a= MACD(ts_code = i,start_time = '2021-01-01',end_time = '20210308')
        df=pd.concat([df,a],axis=0)
        print(i)
        time.sleep(0.301)
    except:
        pass


df= MACD(ts_code='',start_time = '2021-01-01',end_time = '20210308')
df.to_excel('cast.xlsx')

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

 

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值