交作业
来源: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