python 实现股票的MACD计算 代码
时间: 2023-02-20 17:19:46 浏览: 97
以下是一个简单的 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底背离代码
当计算MACD底背离时,我们需要使用股票的收盘价数据。下面是一个Python示例代码,用于计算MACD底背离:
```python
import pandas as pd
import numpy as np
# 准备数据
data = pd.read_csv('stock_data.csv') # 替换为你的数据文件路径
close_prices = data['Close'].values
# 计算MACD指标
ema_12 = pd.Series(close_prices).ewm(span=12).mean()
ema_26 = pd.Series(close_prices).ewm(span=26).mean()
macd = ema_12 - ema_26
signal_line = pd.Series(macd).ewm(span=9).mean()
# 寻找底背离
bottom_divergence = []
for i in range(2, len(macd)-2):
if macd[i-2] > macd[i] and macd[i-1] > macd[i] and macd[i+1] > macd[i] and macd[i+2] > macd[i]:
if close_prices[i-2] > close_prices[i] and close_prices[i-1] > close_prices[i] and close_prices[i+1] < close_prices[i] and close_prices[i+2] < close_prices[i]:
bottom_divergence.append(i)
# 打印底背离位置
for i in bottom_divergence:
print(f"MACD底背离位置:{i}, 价格:{close_prices[i]}")
```
请注意,你需要将`stock_data.csv`替换为你自己的股票数据文件路径。这段代码首先计算MACD指标,并且在MACD值底部寻找底背离。底背离的判断条件是前两个和后两个MACD值都大于当前MACD值,并且前两个收盘价大于当前收盘价,后两个收盘价小于当前收盘价。
这是一个简单的例子,可能会有一些特殊情况未考虑到。你可以根据具体需求对代码进行修改和优化。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)