如何在Python中基于Z-score生成持仓型交易信号变量
基于Z-score生成持仓至均值的买卖信号实现
我有一个包含价格序列及其Z-score的DataFrame,想要生成名为signal的买卖信号变量,规则如下:
- 买入信号(=1):当标准化价格下穿均值下方1.96倍标准差时触发,上穿均值时平仓;
- 卖出信号(=-1):当标准化价格上穿均值上方1.96倍标准差时触发,下穿均值时平仓。
我可以用np.where生成穿越上下边界的信号,但需要实现持仓至穿越均值的逻辑,以下是我的实现代码及对应的信号时序图表:
# 创建包含信号和头寸规模的DataFrame trades = pd.concat([zscore(df_kalman), df_kalman], axis=1) trades.columns = ["signal", "position"] trades['mean'] = trades['signal'].mean() trades['upper'] = trades['mean'] + 1.96*trades['signal'].std() trades['lower'] = trades['mean'] - 1.96*trades['signal'].std() trades["side"] = 0.0 trades['side'] = np.where((trades['signal'] > trades['upper']), -1, 0) trades['side'] = np.where(((trades['signal'] > trades['mean']) & (trades['side'].shift(1) == -1)), -1, trades['side']) trades['side'] = np.where((trades['signal'] < trades['lower']), 1, trades['side']) trades['side'] = np.where(((trades['signal'] < trades['mean']) & (trades['side'].shift(1) == 1)), 1, trades['side'])
信号时序图表说明
图表中展示了标准化价格的波动曲线、均值线、上下边界线(均值±1.96倍标准差),以及生成的side信号的时序变化,清晰呈现了信号触发时机与持仓状态的对应关系。
内容的提问来源于stack exchange,提问作者Stefano Grillini
相关产品推荐
相关产品推荐

