Python期货多合约套利策略框架_价差与跨期
·
免责声明:本文基于个人使用体验,与任何厂商无商业关系。内容仅供技术交流参考,不构成投资建议。
一、前言
价差套利、跨期套利是期货量化中常见策略。多合约需要同时订阅、计算价差、按条件开平仓。做了多年期货量化,我积累了一些多合约套利策略的代码框架。
今天分享用Python实现期货价差与跨期套利的思路和框架。
二、价差与跨期概念
# 价差:两合约价格之差(如 rb2510 - rb2501)
# 跨期:同一品种不同到期月
# 套利:价差偏离历史区间时开仓,回归时平仓
三、多合约数据获取
from tqsdk import TqApi, TqAuth
api = TqApi(auth=TqAuth("账户", "密码"))
# 跨期:螺纹钢近月、远月
symbol_near = "SHFE.rb2501"
symbol_far = "SHFE.rb2510"
k_near = api.get_kline_serial(symbol_near, 300, 500)
k_far = api.get_kline_serial(symbol_far, 300, 500)
q_near = api.get_quote(symbol_near)
q_far = api.get_quote(symbol_far)
# 价差 = 近月 - 远月(或按合约乘数调整)
# spread = near_price - far_price
api.close()
四、价差套利策略框架
from tqsdk import TqApi, TqAuth, TqAccount
def spread_strategy(api, symbol_a, symbol_b, mean_period=20, std_threshold=2.0):
"""价差均值回归套利框架"""
k_a = api.get_kline_serial(symbol_a, 300, 500)
k_b = api.get_kline_serial(symbol_b, 300, 500)
pos_a = api.get_position(symbol_a)
pos_b = api.get_position(symbol_b)
while True:
api.wait_update()
if not api.is_changing(k_a) or not api.is_changing(k_b):
continue
if len(k_a) < mean_period or len(k_b) < mean_period:
continue
close_a = k_a["close"].iloc[-1]
close_b = k_b["close"].iloc[-1]
spread = close_a - close_b
spread_series = k_a["close"] - k_b["close"]
mean_spread = spread_series.rolling(mean_period).mean().iloc[-1]
std_spread = spread_series.rolling(mean_period).std().iloc[-1]
if std_spread <= 0:
continue
zscore = (spread - mean_spread) / std_spread
# 价差过高:卖A买B
if zscore > std_threshold and pos_a.pos_short == 0:
api.insert_order(symbol_a, "SELL", "OPEN", 1)
api.insert_order(symbol_b, "BUY", "OPEN", 1)
# 价差过低:买A卖B
elif zscore < -std_threshold and pos_a.pos_long == 0:
api.insert_order(symbol_a, "BUY", "OPEN", 1)
api.insert_order(symbol_b, "SELL", "OPEN", 1)
# 回归平仓
elif abs(zscore) < 0.5 and (pos_a.pos_long > 0 or pos_a.pos_short > 0):
if pos_a.pos_long > 0:
api.insert_order(symbol_a, "SELL", "CLOSE", pos_a.pos_long)
api.insert_order(symbol_b, "BUY", "CLOSE", pos_b.pos_short)
else:
api.insert_order(symbol_a, "BUY", "CLOSE", pos_a.pos_short)
api.insert_order(symbol_b, "SELL", "CLOSE", pos_b.pos_long)
五、注意事项
# 1. 合约乘数、保证金可能不同,需按比例手数
# 2. 流动性:优先选主力合约
# 3. 交割月:避免临近交割
# 4. 滑点与手续费:套利空间要覆盖成本
六、总结
多合约套利需要同时订阅多合约、计算价差与统计指标、按区间开平仓。天勤量化多合约API统一,适合做价差与跨期策略框架。实际使用要注意合约比例、流动性和成本。量化交易有风险,套利策略也需严格风控。
声明:本文基于个人学习经验整理,仅供技术交流参考,不构成任何投资建议。
更多推荐



所有评论(0)