python 实现股票的MACD计算 代码
时间: 2023-02-20 09:19:46 浏览: 409
以下是一个简单的 Python 代码,用于计算股票的 MACD 指标:
```python
import numpy as np
import pandas as pd
def calc_macd(prices, fast_window=12, slow_window=26, signal_window=9):
fast_ewma = prices.ewm(span=fast_window).mean()
slow_ewma = prices.ewm(span=slow_window).mean()
macd = fast_ewma - slow_ewma
signal = macd.ewm(span=signal_window).mean()
histogram = macd - signal
return macd, signal, histogram
# 示例:计算收盘价的 MACD
df = pd.read_csv('stock_prices.csv')
prices = df['Close']
macd, signal, histogram = calc_macd(prices)
```
在代码中,首先使用 `ewm` 函数计算快速指数加权移动平均(EWMA)和慢速 EWMA,再计算 MACD 值(快速 EWMA 减慢速 EWMA),最后使用信号线的 EWMA 作为 MACD 的信号线。返回的结果是三个数组:MACD 值、信号线、和柱状图(MACD 值减信号线)。
相关问题
macd策略python实现代码
以下是MACD策略的Python实现代码:
```python
import pandas as pd
import numpy as np
# 数据准备
data = pd.read_csv('data.csv') # 读取数据文件,需包含股票价格信息
data['Date'] = pd.to_datetime(data['Date']) # 将日期列转换为日期时间格式
data.set_index('Date', inplace=True) # 将日期列设为索引
close_prices = data['Close'] # 获取收盘价数据列
# 计算MACD指标
ma_fast = close_prices.ewm(span=12, adjust=False).mean() # 计算12天EMA(短期均线)
ma_slow = close_prices.ewm(span=26, adjust=False).mean() # 计算26天EMA(长期均线)
macd_line = ma_fast - ma_slow # 计算MACD线
signal_line = macd_line.ewm(span=9, adjust=False).mean() # 计算信号线
histogram = macd_line - signal_line # 计算柱状图
# 生成交易信号
data['MACD Line'] = macd_line
data['Signal Line'] = signal_line
data['Histogram'] = histogram
data['Signal'] = np.where(histogram > 0, 1, 0) # 当柱状图大于0时买入,小于0时卖出
# 回测交易策略
data['Returns'] = np.log(data['Close'].shift(1) / data['Close']) # 计算每日收益率
data['Strategy Returns'] = data['Returns'] * data['Signal'].shift(1) # 计算策略收益率
data['Cumulative Returns'] = np.cumsum(data['Strategy Returns']) # 计算累计收益率
# 结果展示
print(data[['Close', 'MACD Line', 'Signal Line', 'Histogram', 'Signal', 'Strategy Returns', 'Cumulative Returns']])
```
以上代码会根据给定的股票价格数据,计算MACD指标,并根据MACD的柱状图生成交易信号。代码还包括了回测交易策略,并计算累计收益率。策略规则是当柱状图大于0时买入,小于0时卖出。最后,代码会打印出收盘价、MACD线、信号线、柱状图、交易信号、策略收益率和累计收益率等信息。
请注意,以上代码仅为示例,实际使用时需根据具体需求进行适当修改和优化。
python实现macd指标
在Python中,可以使用第三方库如`pandas`和`numpy`来处理数据,使用`matplotlib`来绘制图形,而MACD指标的计算可以通过编写函数来实现。MACD(Moving Average Convergence Divergence)是移动平均线的收敛和发散指标,它由快速(短期)和慢速(长期)的指数移动平均线(EMA)的差组成,并通过一条信号线(通常为MACD线的9日EMA)来绘制。
以下是一个简单的Python示例,用于计算和绘制MACD指标:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas_datareader import data as pdr
# 设置股票代码和时间段
stock_code = 'AAPL'
start_date = '2022-01-01'
end_date = '2022-12-31'
# 获取股票数据
df = pdr.get_data_yahoo(stock_code, start=start_date, end=end_date)
# 计算EMA
def calculate_ema(data, window):
return data.ewm(span=window, adjust=False).mean()
# 计算MACD
fast_ema = calculate_ema(df['Close'], 12)
slow_ema = calculate_ema(df['Close'], 26)
macd = fast_ema - slow_ema
signal = macd.ewm(span=9, adjust=False).mean()
# 绘制MACD指标图
plt.figure(figsize=(14, 7))
plt.subplot(2, 1, 1)
plt.plot(df['Close'], label='Close Price')
plt.title('Stock Price and MACD')
plt.legend()
plt.subplot(2, 1, 2)
plt.plot(macd, label='MACD Line', color='red')
plt.plot(signal, label='Signal Line', color='blue')
plt.bar(df.index, macd - signal, label='MACD Histogram', color='grey')
plt.legend()
plt.show()
```
在上述代码中,我们首先获取了股票的收盘价数据,然后使用`ewm`函数计算了12日和26日的指数移动平均线(EMA),接着计算了这两个EMA的差值得到MACD线,最后计算了MACD线的9日EMA作为信号线。最后,我们使用`matplotlib`绘制了股票的收盘价和MACD指标图。
阅读全文