Python量化交易实战-32生成动量策略交易信号

auto-trade xuhss 793℃ 0评论

生成交易信号

上节课我们计算了动量因子也就是过去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

运行

20210627145416 - Python量化交易实战-32生成动量策略交易信号

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

运行:

20210627150301 - Python量化交易实战-32生成动量策略交易信号

转载请注明:xuhss » Python量化交易实战-32生成动量策略交易信号

喜欢 (21)

您必须 登录 才能发表评论!