文章目录
显示
生成交易信号
上节课我们计算了动量因子也就是过去N个月的收益率,
这节课生成交易信号,也就是1就是買入,-1就是賣出
一、实战
1.1 生成买入信号
# 动量策略
def momentum(data_concat, shift_N = 1, top_N=2):
#转换时间频率:日转换为月
data_month = data_concat.resample('M').last()
#计算过去N个月的收益率 = 期末值/期初值 -1
shift_return = data_month / data_month.shift(shift_N) -1
#生成交易信号:收益率排前N的赢家组合-买入,收益率排后N的输家组合-卖出
buy_signals = get_top_stocks(shift_return, top_N=top_N)
print(buy_signals)
# print(data_month.head())
# print(shift_return.head(10))
return shift_return
#找到前N位的极大值,并转换为信号返回
def get_top_stocks(data, top_N):
signals = pd.DataFrame(index=data.index, columns=data.columns)
#对data的每一行进行遍历,找到里面的最大值,并利用Bool值去标注0或者1信号
for index, row in data.iterrows():
#print(row.isin(row.nlargest(top_N)).astype(np.int))
signals.loc[index]=row.isin(row.nlargest(top_N)).astype(np.int)
return signals
运行
1.2生成卖出信号并且整合
# 动量策略
def momentum(data_concat, shift_N = 1, top_N=2):
#转换时间频率:日转换为月
data_month = data_concat.resample('M').last()
#计算过去N个月的收益率 = 期末值/期初值 -1
shift_return = data_month / data_month.shift(shift_N) -1
#生成交易信号:收益率排前N的赢家组合-买入,收益率排后N的输家组合-卖出
buy_signals = get_top_stocks(shift_return, top_N=top_N)
sell_signals = get_top_stocks(shift_return*-1, top_N=top_N)
# print(buy_signals)
# print(sell_signals)
signal = buy_signals - sell_signals
print(signal)
# print(data_month.head())
# print(shift_return.head(10))
return shift_return
运行:
转载请注明:xuhss » Python量化交易实战-32生成动量策略交易信号