python:talib 计算 MACD 画曲线图

MACD指标解释:baike.baidu.com/item/MACD指标/6271283?fr=aladdin 

MACD指标[1]基于快速、慢速两个长度不同的移动均线
(FastMA是短期均线,SlowMA是长期均线),即:
MACD = FastMA - SlowMA
第二条线,称为信号线,为移动MACD的平均值,即:
SignalLine = MovAvg (MACD)
第三条线,称为MACD直方图,为MACD和信号线之间的差异,即:
MACD Histogram = MACD - SignalLine

talib_macd.py

# -*- coding: utf-8 -*-
import os, sys
from datetime import datetime
import tushare as ts
import pylab as pl
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import talib

if len(sys.argv) ==2:
    code = sys.argv[1]
else:
    print('usage: python talib_macd.py stockcode ')
    sys.exit(1)

if len(code) !=6:
    print('stock code length: 6')
    sys.exit(2)

df = ts.get_k_data(code)
if df.empty ==True:
    print(" df is empty ")
    sys.exit(2)

df = df[ df['date'] > '2024-01-01']
if len(df) <30:
    print(" len(df) <30 ")
    sys.exit(2)

# DataFrame 重建索引
df = df.reset_index(drop=True)
df['ma10'] = df['close'].rolling(window=10).mean()
#print(df.head())

dw = pd.DataFrame()
#close = np.array(df['close'])

# 调用talib计算指数移动平均线的值
#df['EMA12'] = talib.EMA(close, timeperiod=6)  
#df['EMA26'] = talib.EMA(close, timeperiod=12)   

# 调用talib 计算 MACD指标
dw['MACD'],dw['MACDsignal'],dw['MACDhist'] = talib.MACD(df.close, fastperiod=12, slowperiod=26, signalperiod=9)
dw.index = range(len(dw))
print('df.len=',len(df),'dw.len=',len(dw))
df = df.reset_index(drop=True)
# 取后半段
m = len(df) //2
df = df[ df.index > m ]
dw = dw[ dw.index > m ]
print(df.head())
print(dw.head())
df.index = pd.to_datetime(df.date)
dw.index = pd.to_datetime(df.date)

# 设置画布,纵向排列的三个子图
fig, ax = plt.subplots(3, 1)
# 设置标签显示中文
#plt.rcParams['font.sans-serif'] = ['SimHei']  
#plt.rcParams['axes.unicode_minus'] = False

# 调整子图的间距,hspace表示高(height)方向的间距
plt.subplots_adjust(hspace=.3)
# 画股票收盘价图
df[['close', 'ma10']].plot(ax=ax[0], grid=True, title=code)
# 应用同步缩放
#ax[1] = plt.subplot(312, sharex=ax[0])
# 画 MACD 曲线图
dw[['MACD','MACDsignal', 'MACDhist']].plot(ax=ax[1], grid=True)
# 应用同步缩放
#ax[2] = plt.subplot(313, sharex=ax[0])
dw['MACDhist'].plot(ax=ax[2], color='gray', kind='bar', grid=True, use_index=False)

# 设置间隔,以便图形横坐标可以正常显示(否则数据多了x轴会重叠)
scale = len(dw['MACDhist'].values)
interval = 10 # scale // 20
#print(scale, interval)
# 设置x轴参数,应用间隔设置
# 时间序列转换,(否则日期默认会显示时分秒数据00:00:00)
# x轴标签旋转便于显示
pl.xticks([i for i in range(1, scale + 1, interval)], [i for i in range(1, scale + 1, interval)],
         #[datetime.strftime(i, format='%m-%d') for i in pd.date_range(df.index[0], df.index[-1], freq='B')], 
         rotation=45)

plt.legend(loc='best', shadow=True)
plt.show()

运行 python talib_macd.py 601318

### 使用Talib库在Python计算MACD指标 为了利用 `TA-Lib` 库来计算MACD(异同移动平均线),可以按照如下方式操作。首先,确保已经安装了 `ta-lib` 和 `pandas` 这两个必要的包。 #### 安装依赖项 如果尚未安装这些库,则可以通过pip命令来进行安装: ```bash pip install TA-Lib pandas tushare ``` #### 获取历史行情数据 通常情况下,会先从第三方API服务提供商那里获取股票的历史交易记录。这里以 Tushare 为例展示如何取得所需的数据集[^4]。 ```python import tushare as ts pro = ts.pro_api('your_token_here') # 替换为自己的token df = pro.daily(ts_code='000001.SZ', start_date='20230101', end_date='20231231') data = df.sort_values(by="trade_date").reset_index(drop=True) close_prices = data['close'].values[::-1] ``` #### 计算MACD值 接下来就是调用 `TA-Lib` 的函数来完成实际的MACD计算过程。注意,在某些应用场合下可能还需要对最终得到的结果乘以系数2以便匹配特定平台上的显示效果[^1]。 ```python import talib as ta def calculate_macd(close, fastperiod=12, slowperiod=26, signalperiod=9): macd, signal, hist = ta.MACD( close, fastperiod=fastperiod, slowperiod=slowperiod, signalperiod=signalperiod ) # 根据需求调整macd输出 adjusted_macd = (macd - signal) * 2 return { 'macd': macd, 'signal': signal, 'histogram': adjusted_macd } result = calculate_macd(close_prices) print(result['macd'][-5:]) # 最近五个交易日的MACD值 print(result['signal'][-5:]) # 对应的日信号线数值 print(result['histogram'][-5:])# 差离值(Histogram),即(DIF-DEA)*2后的结果 ``` 上述代码片段展示了完整的流程——从准备环境、加载数据直到执行具体的MACD运算并打印最后几天的相关统计量。值得注意的是,这里的参数设置遵循了标准定义;然而不同市场或个人偏好可能会有所不同,因此可以根据实际情况灵活修改相应参数[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值