import talib as tb
import tushare as ts
import pandas as pd
# ~ import matplotlib
import matplotlib.pyplot as plt
import mplfinance as mpf
import numpy as np
from datetime import datetime
ts.set_token('you token')
pro = ts.pro_api()
df = pro.daily(ts_code='000001.SZ', start_date='20200101', \
end_date='20201210')
df['date'] = df['trade_date'].apply\
(lambda x: datetime.strptime(x, '%Y%m%d')) #将字符串型日期转换成时间戳
data = df.loc[:,['date', 'open','close','high','low','vol']] #获取所有行,并获取所需列
data = data.rename(columns={"vol": "volume"}) # 修改列名
data.set_index('date', inplace=True) #将日期设为索引
data.index.name = "Date" #修改索引名
data = data.sort_index() #根据索引值升序排序
kl_index = data.index
dif, dea, bar = tb.MACD(data.close.values,fastperiod=12,\
slowperiod=26,signalperiod=9) # 可设置MACD三个参数
plt.plot(kl_index, dif, label='macd dif')
plt.plot(kl_index, dea, label='signal dea')
# 如果bar大于0则用其原值,小于0将其改为0
bar_red = np.where(bar > 0, bar, 0)
# 如果bar小于0则用其原值,大于0将其改为0
bar_green = np.where(bar < 0, bar, 0)
# 绘制 > 0的柱状图
plt.bar(kl_index, bar_red, facecolor='red', label='hist bar')
# 绘制 < 0的柱状图
plt.bar(kl_index, bar_green, facecolor='green', label='hist bar')
plt.xticks(rotation = 45)
plt.show()
输出结果为: