# MACD (Moving Average Convergence Divergence) 指标的 Python 实现
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import yfinance as yf
# 获取股票数据
def get_stock_data(ticker, start_date, end_date):
stock_data = yf.download(ticker, start=start_date, end=end_date)
return stock_data['Adj Close']
# 计算MACD指标
def calculate_macd(data, short_window=12, long_window=26, signal_window=9):
# 计算短期和长期的指数移动平均线
ema_short = data.ewm(span=short_window, adjust=False).mean()
ema_long = data.ewm(span=long_window, adjust=False).mean()
# 计算MACD线
macd_line = ema_short - ema_long
# 计算信号线
signal_line = macd_line.ewm(span=signal_window, adjust=False).mean()
# 计算MACD柱状图
macd_histogram = macd_line - signal_line
return macd_line, signal_line, macd_histogram
# 绘制MACD图表
def plot_macd(data, macd_line, signal_line, macd_histogram):
fig, ax = plt.subplots(2, 1, figsize=(14, 10), sharex=True)
# 绘制股票价格
ax[0].plot(data.index, data, label='Stock Price')
ax[0].set_title('Stock Price')
ax[0].grid(True)
# 绘制MACD线、信号线和柱状图
ax[1].plot(macd_line.index, macd_line, label='MACD Line', color='blue')
ax[1].plot(signal_line.index, signal_line, label='Signal Line', color='orange')
ax[1].bar(macd_histogram.index, macd_histogram, label='MACD Histogram', color='gray', alpha=0.5)
ax[1].set_title('MACD Indicator')
ax[1].legend(loc='best')
ax[1].grid(True)
plt.tight_layout()
plt.show()
# 示例使用
if __name__ == "__main__":
ticker = 'AAPL' # 苹果公司股票代码
start_date = '2022-01-01'
end_date = '2023-01-01'
# 获取股票数据
stock_data = get_stock_data(ticker, start_date, end_date)
# 计算MACD指标
macd_line, signal_line, macd_histogram = calculate_macd(stock_data)
# 绘制MACD图表
plot_macd(stock_data, macd_line, signal_line, macd_histogram)
获取股票数据:
yfinance 库从 Yahoo Finance 获取指定股票的历史价格数据。计算MACD指标:
绘制MACD图表:
matplotlib 库绘制股票价格和 MACD 指标。示例使用:
上一篇:python 读取word
下一篇:python类和对象
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站