交作业
来源:4-12 【实战作业】:尝试创建基于布林道的择时策略
慕粉17780521093
2021-08-08
def bull_strategy(code, start_date, end_date, window):
# 获取股票代码在指定时间段的价格数据
data = st.get_cvs_data(code, 'price', start_date, end_date)
# 计算上(upper)、中(mid)、下(lower)轨线值
data['std'] = data['close'].rolling(window).std()
data['mid'] = data['close'].rolling(window).mean()
data['upper'] = data['mid'] + 2 * data['std']
data['lower'] = data['mid'] - 2 * data['std']
# 生成交易信号:买入open>lower>close;卖出open<upper<close
data['buy_signal'] = np.where((data['open'] > data['lower']) & (data['lower'] > data['close']), 1, 0)
data['sell_signal'] = np.where((data['open'] < data['upper']) & (data['upper'] < data['close']), -1, 0)
# 整理信号,计算收益率
data_adj = data[
(data['buy_signal'] != 0) |
(data['sell_signal'] != 0)].copy() # 去除无买卖日期的信号(compose_signl处理连续买卖信号时,要求连续的买卖信号中间不能有间隔)
data_adj = base.compose_signal(data_adj) # 整理信号
data_adj = base.calculate_profit_pct(data_adj) # 计算单次收益率
data_adj = base.calculate_cum_profit_pct(data_adj) # 计算累计收益率
# 存储收益率数据,可视化bull线
data_adj.to_csv('/Users/zhongbo/Desktop/data_adj.csv')
data['upper'].plot(label='upper')
data['mid'].plot(label='mid')
data['lower'].plot(label='loser')
data['close'].plot(label='close')
plt.legend()
plt.show()
if __name__ == '__main__':
code = '000001.XSHE'
bull_strategy(code, '2017-01-01', '2021-08-08', 20)
写回答
2回答
-
逆天而行Gavin
2022-01-10
牛逼,学到了
00 -
DeltaF
2021-08-09
优秀,祝学习愉快
00