开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情
前言
上节课我们讲了利用周期交易得出利润,今天我们来实现macd策略交易
macd如何计算?
这里我们使用talib,Talib(Technical Analysis Library)是一个用于金融市场技术分析的开源软件库,提供了超过150个技术指标函数。该库使用C语言编写,但是也有其他语言的绑定,如Python、R等。
Talib的功能非常广泛,包括趋势分析、价格波动指标、动量指标、交易量指标等等。用户可以使用这些指标函数来分析金融市场数据,例如股票价格、汇率等等。
由于Talib是一个开源库,因此用户可以在其基础上构建自己的金融市场分析工具或者交易策略。同时,由于其广泛的应用,Talib也成为了金融科技领域中不可或缺的一部分。
所以我们使用这个库,可以方便的计算一个股票macd的值
计算方法如下
data['diff'], data['dea'], data['macd'] = talib.MACD(data['close'], fastperiod=12, slowperiod=26, signalperiod=9);
data['macd'] *= 2;
生成买卖点
生成信号:金叉买入、死叉卖出
data['buy_signal'] = np.where(data['diff'] > data['dea'], 1, 0)
data['sell_signal'] = np.where(data['diff'] < data['dea'], -1, 0)
计算总收益
# 过滤信号:st.compose_signal
data = bs.compose_signal(data)
# 计算收益率
data = bs.calculate_profit_pct(data);
# 计算累计收益率
data = bs.calculate_cum_prof(data);
data['cum_profit'] = data['cum_profit'] * 100;
print(data);
bs.show_chart(data, code);
此时看一下打印的值
也就是说只卖出了两次,所以也只买入了两次,我们看一下卖出点是否是macd死叉的时候,验证一下
完全正确,确实是死叉的时候
总收益图标
因为只卖出两次,所以只显示了两个点,左下角和右上角,收益率一般,只有16%点多
显示买卖点
def show_buy_sell_chart(data, code):
fig, ax = plt.subplots()
ax.plot(data.index, data['close'])
plt.title(code);
buy = data.loc[data['buy_signal'] == 1];
sell = data.loc[data['sell_signal'] == -1];
for index, row in buy.iterrows():
ax.annotate('B', xy=(index, row['close']),
arrowprops=dict(facecolor='red', shrink=0.05))
for index, row in sell.iterrows():
ax.annotate('S', xy=(index, row['close']),
arrowprops=dict(facecolor='green', shrink=0.05))
plt.show();
此时我们根据日期和卖出价格显示一个折线图,在折线图上标上我们的买卖点,B为买入点,S为卖出点,看一下图形,看是否符合预期
买入点和卖出点还是比较好的,符合预期,good,继续加油⛽️