|
阅读:67回复:1
跨期套利策略(低风险)
跨期套利策略(低风险)
核心逻辑:利用同一品种不同合约的价差偏离均值进行交易,胜率高(70%+),收益稳定但绝对值低。 import pandas as pd import numpy as np def spread_arbitrage_strategy(near_df, far_df, zscore_threshold=2): # 对齐时间索引 df = pd.DataFrame({ 'near_close': near_df['close'], 'far_close': far_df['close'] }).dropna() # 计算价差和Z-score df['spread'] = df['far_close'] - df['near_close'] # 远月-近月 df['spread_mean'] = df['spread'].rolling(window=60).mean() df['spread_std'] = df['spread'].rolling(window=60).std() df['zscore'] = (df['spread'] - df['spread_mean']) / df['spread_std'] # 初始化信号和仓位 df['signal'] = 0 # 0:无仓位, 1:买近卖远, -1:卖近买远 df['position'] = 0 df['pnl'] = 0 # 遍历计算信号 for i in range(60, len(df)): current_zscore = df.iloc['zscore'] prev_position = df.iloc[i-1]['position'] # Z-score过高:价差偏大,卖近买远 if current_zscore > zscore_threshold and prev_position == 0: df.iloc[i, df.columns.get_loc('signal')] = -1 df.iloc[i, df.columns.get_loc('position')] = -1 # Z-score过低:价差偏小,买近卖远 elif current_zscore < -zscore_threshold and prev_position == 0: df.iloc[i, df.columns.get_loc('signal')] = 1 df.iloc[i, df.columns.get_loc('position')] = 1 # Z-score回归0:平仓 elif abs(current_zscore) < 0.5 and prev_position != 0: df.iloc[i, df.columns.get_loc('signal')] = 0 df.iloc[i, df.columns.get_loc('position')] = 0 else: df.iloc[i, df.columns.get_loc('position')] = prev_position # 计算套利盈亏 if prev_position != 0: spread_change = df.iloc['spread'] - df.iloc[i-1]['spread'] # 买近卖远:价差缩小盈利(prev_position=1) # 卖近买远:价差扩大盈利(prev_position=-1) df.iloc[i, df.columns.get_loc('pnl')] = -prev_position * spread_change * 10 df['cum_pnl'] = df['pnl'].cumsum() return df # 回测示例 if __name__ == "__main__": # 加载同一品种不同合约的数据(如螺纹钢2405和2410) near_df = load_futures_data('rb2405.csv') far_df = load_futures_data('rb2410.csv') result = spread_arbitrage_strategy(near_df, far_df) total_trades = len(result[result['signal'] != 0]) // 2 win_trades = len(result[result['pnl'] > 0]) win_rate = win_trades / total_trades if total_trades > 0 else 0 total_pnl = result['cum_pnl'].iloc[-1] print(f"跨期套利策略 - 总交易次数:{total_trades}") print(f"跨期套利策略 - 胜率:{win_rate:.2%}") print(f"跨期套利策略 - 累计盈亏:{total_pnl:.2f}元") |
|
|
|
沙发#
发布于:2026-03-17 22:24
策略运行前置条件
数据准备: 需要期货合约的 K 线数据(至少包含 datetime, open, high, low, close, volume) 推荐数据源:Tushare(需付费)、Wind、同花顺 iFinD,或交易所公开数据 依赖安装:bash运行pip install pandas numpy talib matplotlib TA-Lib 安装提示:Windows 用户可下载预编译包(https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib) 风险控制: 仓位管理:单品种仓位不超过总资金的 10%-20% 最大回撤:设置总资金最大回撤阈值(如 20%),触发后暂停交易 品种选择:优先选择流动性好的品种(如螺纹钢、原油、沪深 300 股指期货) |
|
|