【代码报错】代码问题——for循环
由asdgj创建,最终由small_q 被浏览 32 用户
老师,您好。 我把代码改了下,发现新出了一个问题,for循环算出来的【jieguo】,与不用循环,直接让i,j等于一组具体的数算出来的【jieguo】不一样,比如i=120,j取91这一组,试了试只有第一组[5,60]是正常的,这是那块还有问题么?烦请老师指点
data = DataSource("bar1d_index_CN_STOCK_A").read('SW270000.HIX',start_date="2004-02-11", end_date="2023-09-14")[['date','close','volume']]
data['涨跌幅'] = data['close'].pct_change()
result = pd.DataFrame(columns=['date', 'future_return', 'win_rate'])
jieguo = pd.DataFrame(columns=['参数','平均绝对收益', '平均胜率','信号次数','总交易天数'])
# 计算未来收益和胜率
for i in [3,5,10,20,40,60,120]:
for j in [60,65,70,75,80,85,90,91,93,95,97,99]:
data['{}d成交量'.format(i)] = data['volume'].rolling(i).mean()
data['{}d_{}阈值'.format(i,j)] = data['volume'].rolling(252*5).apply(lambda x: np.percentile(x, j))
data['signal_{}d_{}'.format(i, j)] = np.where(data['{}d成交量'.format(i)] > data['{}d_{}阈值'.format(i,j)], 1, 0)
signal_dates = data[data['signal_{}d_{}'.format(i, j)] == 1]['date'].tolist()
for m in range(len(signal_dates)):
signal_date = signal_dates[m]
signal_index= data[data['date']==signal_date].index[0]
#计算未来一个月的指数收益率
future_return = (data.loc[signal_index+1:signal_index+20,'涨跌幅']+1).prod()-1
##计算当月跌幅为负的天数!
diefu_count = data.loc[signal_index+1:signal_index+20,'涨跌幅'].apply(lambda x :1 if x<0 else 0).sum()
win_rate = diefu_count / 20
result = result.append({'date': signal_date, 'future_return': future_return, 'win_rate': win_rate}, ignore_index=True)
# 显示结果
##print(result)
a1 = '%dd成交量_%d阈值'%(i,j)
b1 = result['future_return'].mean()
c1 = result['win_rate'].mean()
d1 = len(signal_dates)
e1 = data['date'].count()
jieguo= jieguo.append({'参数':a1, '平均绝对收益':b1, '平均胜率':c1,'信号次数':d1,'总交易天数':e1},ignore_index = True)
print(result)
print(jieguo)
s