ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

期货套利策略实战:跨期成本测算与统计套利框架拆解

期货套利策略实战:跨期成本测算与统计套利框架拆解 写这个系列第二篇的时候我想先从上一篇文章埋的一个问题切入为什么有人做套利能稳定赚钱有人一上手就被来回打脸如果只是“买便宜的、卖贵的”这六个字就能解决市场里就不会有这么多人亏钱了。上一篇我们把套利的基本概念、数据获取方式和品种选择讲清楚了这一篇我会把真正决定收益的几块硬东西拿出来聊包括跨期价差的成本测算、蝶式套利的多腿设计、跨品种统计套利的入场离场标准以及实盘里最容易翻车的几个细节。套利策略真正难的地方不在于“发现机会”而在于“把机会做成可执行的规则”。很多人看历史行情会觉得价差回归是理所应当的可一放到实盘里要么不知道该什么时候进要么进场之后扛不住波动要么好不容易扛到回归又赚不到该赚的钱。为了不让这篇文章又变成理论复读我会用具体的品种、具体的数值、具体的图表逻辑来拆解你照着这个框架去复盘自己的品种是可以直接落地的。1. 内容整体设计与思路拆解1.1 先想清楚套利到底在赚谁的钱整个套利策略的本质赚的是市场定价错乱后回归的钱。可以打一个日常生活的比方同一款牛奶在A超市卖12块在B超市卖15块你从A买出来倒手卖给B赚的既不是牛奶的价格涨跌也不是超市服务费而是两个超市之间存在的“定价差”。期货市场里的跨期、跨品种套利逻辑也是这个简化版只是多了杠杆、保证金、持仓成本和交割规则。但这个比方的终点恰恰是多数人走偏的地方。很多新手以为套利就是“价差大了就做回归”完全不在乎价差为什么大。真正的套利框架必须搞清楚两个问题一是价差的“合理中枢”在哪里二是价差偏离中枢的力量会不会在预期时间内消失。前者决定你该不该进后者决定你进了能不能拿得住。我在设计策略时先给自己定了一条原则每一笔套利的背后都得能找到一条实实在在的修复路径。跨期套利靠的是持有成本和仓单逻辑修复跨品种套利靠的是产业链或消费端的替代关系修复跨市场套利靠的是物流和关税成本修复。找不到修复路径的价差交易本质上就是在赌随机性那不是套利是披着套利外衣的单边。1.2 三类可复制的策略逻辑和它们的边界从操作频率和逻辑来源两个维度看市场上被反复验证过的套利策略大体可以分成三类。第一类是跨期套利逻辑最扎实适合新手建立信心。它赚的是同一品种不同月份合约之间的价差回归钱。近月合约和远月合约之间天然存在持仓成本包括仓储费、资金利息、检验费、交割手续费等。当价差明显高于这些成本时可以考虑买近卖远当价差被压到成本线以下甚至出现倒挂时可以考虑卖近买远。这类策略的确定性最高因为它有实物交割作为最终兜底。第二类是跨品种套利逻辑稍弱但空间更大。它赚的是两个相关品种之间比价关系的回归钱。比如豆粕和菜粕同属饲料蛋白豆油和棕榈油同属植物油螺纹钢和热卷同属钢材。它们的价格受相似的供需因素驱动所以长期来看价差会维持在一个相对稳定的区间。当价差冲出区间就会产生交易机会。第三类是跨市场套利逻辑涉及物流和区域价差。比如同一品种在不同交易所上市或者国内外盘面之间存在价差当价差覆盖运输、汇兑等成本后还有利润理论上可以做买入低市场、卖出高市场的操作。这类策略对资金进出渠道和交易时间要求高普通个人投资者参与难度较大我一般不建议作为主策略。每一类策略都有自己的边界。跨期套利最怕逼仓和移仓期流动性塌陷跨品种套利最怕产业逻辑被永久性改变比如饲料配方调整、环保限产、新增产能投放这些会让原本稳定的比价中枢整体上移或下移跨市场套利则怕资金流动受限和成本测算失真。边界不是用来吓退你的而是用来提醒你必须在建仓之前就设好“逻辑失效”的退出线。1.3 这一篇的路线图从跨期入手再升级到统计套利既然上一篇已经解决了“数据从哪来、品种怎么选”的问题这一篇就直接进入策略构建的核心环节。我打算用一条递进路线来展开先从跨期套利的成本测算讲起因为这是所有套利品种都能用的底层工具然后扩展到蝶式套利解决两腿套利在某些行情下风险收益比不够好的问题最后落到跨品种统计套利用豆粕和菜粕这对经典组合作为案例讲清楚从数据计算、信号生成到仓位管理的完整闭环。这样设计的好处是每一层策略都建立在前一层的基础上。你把成本测算学会了蝶式和跨品种里很多看似复杂的加减法就自然通了你把统计套利的信号系统掌握了反过来会更理解跨期价差为什么会在某些位置反复受阻。这篇文章不是给你一套万能圣杯而是给你一套可以组合使用的方法论。2. 核心细节解析与实操要点2.1 跨期价差的成本测算从“拍脑袋”到“算得清”跨期套利的核心不是判断涨跌而是判断近月合约和远月合约之间的价差是否“过分”。这里“过分”的判断依据就是持有成本。举例来说某农产品期货近月合约价格在3120元/吨远月合约价格在3180元/吨近远月价差是60元。假设你在近月买入、远月卖出相当于你做了一件事买入现货并持有到远月交割同时提前锁定卖出价格。那么你的持有成本由哪些部分组成一是仓储费。不同品种、不同交割库的仓储费差异很大以我举的这个农产品为例如果按每吨每天0.8元计算持有45天就是36元/吨。二是资金成本。期货交易有保证金杠杆通常按合约价值的10%到12%收取假设保证金比例12%年化资金利率4.5%那么3120元/吨的合约占用资金约为374元45天的利息成本大约2.1元/吨。三是交割费用和检验费往返加在一起按10元/吨估算。四是交易手续费开平仓合计按0.5元/吨估算。把这些成本加总48.6元/吨就是这笔跨期套利需要跨越的成本线。当前价差60元高于持有成本线11.4元。这11.4元就是理论上的正套利润空间。有人可能会问是不是价差大于持有成本就一定赚钱不是。持有成本是一个理论框架实际执行时还要考虑你能否在交割月前完成仓单注册、仓库距离你的交割库远近、仓储费是否按你所在仓库标准执行、价差是否会在你等待回归的过程中继续拉大。所以我的做法是把理论利润空间除以持有成本算出一个“安全边际倍数”。只有安全边际倍数大于1.5的时候我才会考虑进场。这里面还有一个容易踩的坑不同月份之间的仓储费计算天数不是你想当然的“从现在到交割的自然日”有些品种按自然日算有些按工作日算有些则在特定时间段上调仓储费。动手之前先向期货公司客服或交割库确认清楚不要拿网上搜来的统一费率直接套用到所有品种。2.2 蝶式套利两腿不够用时的多腿解决方案两腿跨期套利有一个天然缺陷它只表达了你对两端价差的判断但对中间合约的相对强弱无能为力。比如你发现1月合约和5月合约价差偏高但市场可能不是通过5月下跌来修复而是通过3月合约大幅上涨来让近远月价差收敛。这时候你的两腿套利就会被3月合约的异常波动干扰持仓体验很差。蝶式套利就是为了解决这个问题而生的。它通常由三腿构成买入1手近月合约卖出2手中月合约买入1手远月合约。这种结构下你的净持仓为零对单边方向的敏感度极低赚的是中间月合约相对于两端合约的被错估价值。举个具体例子。假设当前某品种1月、3月、5月合约价格分别为3200、3260、3340。那么近中价差是60中远价差是80近远价差是140。如果你判断中远价差80明显高于正常水平认为3月合约被高估可以做空蝶式卖出1手3月合约买入1手1月合约买入1手5月合约。这样无论价格整体涨跌你的盈亏只取决于3月合约相对1月和5月合约的价差变化。蝶式套利的优势在回撤控制上体现得很明显。两腿跨期套利遇到单边行情时价差可能停滞不动但保证金波动很大心理压力不小蝶式的三腿结构天然对冲了大部分方向性风险持仓过程更平稳也更适合资金规模不大的个人账户。操作蝶式套利的痛点在于流动性匹配。近月合约可能已经很清淡中月和远月又可能还没成为主力三腿同时以合理价格成交并不容易。我一般建议选择流动性都还可以的近月、次近月、远月组合并且把三腿拆开分批建仓不要追求一次性全部成交。2.3 跨品种统计套利从相关性到价差标准化跨品种套利比跨期套利更需要量化思维的支撑因为你无法像跨期那样找到明确的仓储成本线只能通过统计规律来判断价差是否“过分偏离”。以豆粕和菜粕这对经典组合为例。豆粕和菜粕都是饲料蛋白的重要来源下游消费存在明显替代关系。当豆粕价格上涨导致豆菜粕价差过大时饲料企业会调整配方增加菜粕用量从而拉动菜粕需求、压制豆粕需求最后让价差回归。这个逻辑链条就是跨品种套利的修复路径。但直接看价差绝对值有一个问题不同价格平台下同样的价差含义完全不同。比如豆粕3000、菜粕2500时价差500和豆粕4500、菜粕4000时价差500两者的统计含义差别很大。为了统一标准我在实际中使用的是价差标准化也就是Z-score。计算方法不复杂配对价差 豆粕主力价格 - β × 菜粕主力价格Z-score (当前价差 - 最近120日平均价差) / 最近120日价差标准差β可以通过线性回归或者协方差除以方差求出。如果你不想处理β也可以直接用价格比做比值的标准化。两种方法各有利弊价差法适合两个品种价格水平接近的情况比值法适合价格差异较大的情况。豆粕和菜粕价格水平比较接近用价差法更直观。使用Z-score的优势在于它把不同品种、不同价格水平的偏离程度统一到同一个尺度上方便你制定开仓、加仓、止盈、止损规则。我习惯用1.5作为初始开仓阈值2.5作为加仓阈值回到0.5以下分批离场。这个参数不是固定的不同品种的波动特性不一样需要先做历史回测来校准。3. 实操过程与核心环节实现3.1 数据准备与历史价差分位计算做统计套利数据质量直接决定策略命根子。我这里建议用主力连续合约的价格而不是某个固定合约因为主力连续更贴近实际可成交价格。数据源可以从期货公司自带的行情接口拿也可以自己用历史数据拼接关键是拼接规则要一致一般以持仓量最大的合约为当日主力。拿到数据之后第一步不是急着算信号而是先画一张历史价差走势图看看这个品种的价差中枢是不是稳定。有些品种的价差中枢会随着产业格局变化发生漂移比如某个年份新增了交割库或者现货贸易习惯改变这种数据直接用来算均值很容易被污染。下面是一段基础计算代码用Python就能跑。我平时会用本地数据文件这里用一个简化版演示思路import pandas as pd import numpy as np # 假设批量数据中已有 m_price豆粕主力收盘价和 rm_price菜粕主力收盘价 df pd.read_csv(futures_data.csv, parse_dates[date], index_coldate) df df.sort_index() # 计算配对价差这里先按 1:1 处理 df[spread] df[m_price] - df[rm_price] # 用过去120个交易日计算均值、标准差、Z-score df[avg] df[spread].rolling(120).mean() df[std] df[spread].rolling(120).std() df[zscore] (df[spread] - df[avg]) / df[std] # 查看最新信号 print(df[[spread, avg, std, zscore]].tail())计算过程中有两点值得强调。第一滚动窗口的选择很重要。120日大约相当于半年交易数据如果品种刚经历一轮大趋势均值会被拉偏Z-score会显得偏低。我更常用分位数来代替纯均值比如把近250个交易日的价差从低到高排序看当前价差落在哪个百分位。第二主力合约换月时会出现跳变如果不去掉跳变点计算出的标准差会虚高掩盖真实的价差波动。建议在数据预处理时把换月日的跳变值修正或者直接用交易所发布的品种指数代替。3.2 信号生成与手数匹配不能照搬公式计算完Z-score之后下一步就是把它翻译成交易规则。以豆粕和菜粕这对组合为例我的信号框架大致是这样的当Z-score小于等于负1.5时说明当前价差低于历史正常范围做多价差也就是买入豆粕、卖出菜粕。当Z-score大于等于正1.5时做空价差也就是卖出豆粕、买入菜粕。离场条件我设在Z-score回到负0.3到正0.3的区间分批平仓。但这里有一个必须解决的问题手数怎么匹配。豆粕和菜粕都是每手10吨如果按1比1手数下单相当于价差直接使用豆粕价格减去菜粕价格。如果两个品种的β不是1比如回归结果显示β是1.15那么严格来说应该用1.15手豆粕对应1手菜粕但期货交易手数不能拆成小数我实际中会退而求其次要么取1比1手数要么取10手对9手这样的近似配比。用近似配比有一个需要接受的代价组合不是完全中性会暴露少量单边风险。比如你买10手豆粕、卖9手菜粕如果豆粕菜粕同时下跌你的亏损会大于完全中性组合。这个风险可以通过控制总仓位来消化不必追求理论上的绝对精确。我还会在信号里加两个过滤器。第一个是价格趋势过滤器比如豆粕和菜粕同时处于明显的单边上行趋势时价差回归的节奏会被趋势力量压制这时我会把开仓阈值从1.5提高到2减少逆势操作。第二个是日历过滤器避开节假日和临近交割月的低流动性窗口那些时间段的价差波动可能被资金人为扰动不适合作为建仓时点。3.3 把交易规则变成一个不会乱改的执行清单有了信号还远远不够真正的执行才是套利策略里最枯燥也最关键的部分。很多人亏钱不是因为信号错而是因为进场之后管不住手该加仓的时候不敢加该止损的时候又幻想价差能回来。我给自己定的规则是开仓之前就把整笔交易的触发条件写清楚盘中只执行不临场决策。下面是我常用的一张执行清单模板环节触发条件操作方式仓位比例首次建仓Z-score小于等于负1.5买入豆粕卖出菜粕40%加仓Z-score继续扩大至负2.5同方向加仓30%减仓止盈Z-score回到负0.3附近先平一半剩余看情况50%止损价差突破近一年极值且基本面逻辑被证伪全部平仓100%以50万元账户为例豆粕当前价格按3200元/吨算一手豆粕合约价值32000元保证金比例按12%计算约3840元菜粕价格按2900元/吨算一手合约价值29000元保证金约3480元。做一组豆粕菜粕套利的总保证金约7300元。首次建仓用40%仓位大概可以开25组左右占用保证金约18.5万元。后续加仓到70%保证金敞口约32万元仍在账户可承受范围内。这里要特别提醒套利组合的风险不是看保证金占用而是看价差反向波动的幅度。假设价差每扩大20元/吨一组组合的亏损就是200元25组就是5000元账户资金回撤1%。所以止损线一定要按价差偏离幅度来设定而不是按总资金百分比硬切。实际操作中我会同时盯两个止损触发条件Z-score跌破历史极限值或者价差偏离超过我预设的物理上限只要满足其一就无条件执行。3.4 移仓与持仓周期管理跨品种统计套利持仓周期通常是几天到几周往往要跨越主力合约换月。如果持仓过程中主力合约切换你没有及时处理新合约的价差水平和老合约可能完全不同会导致你的持仓逻辑被打乱。我处理移仓的方式很朴素提前跟踪主力合约的换月节奏。国内大部分品种的持仓量会在交割月前一个月开始向下一主力迁移我会在换月周分批平掉旧主力合约的腿同时在新主力合约上建立对应的仓位。坚持分批移动不追求一次完成因为主力换月期间流动性波动大一次性移动容易吃滑点。有些短期套利策略的持仓周期只有两三天这种策略可以完全避开换月问题因为你会选择在主力换月之前了结全部仓位。但收益空间也会相应受限因为价差回归往往需要时间酝酿。我个人更倾向于把大部分仓位放在持有周期两周以上的策略上让统计回归有充足的时间展开。4. 常见问题与排查技巧实录4.1 价差为什么不回归三种最典型的情况很多人在套利里亏钱核心原因就是遇到了“价差不回归”。我在实盘中把这种情况归成三类每一类的应对方式不同。第一类是行情常态的转移。比如豆油菜油价差长期维持在某个平台但由于今年某油脂品种的进口结构发生变化下游配方大幅调整价差中枢整体抬升了。你用旧数据算出的均值已经失效Z-score永远显示“过高”可市场就是不回头。这种情形下最有效的办法是缩短统计窗口改用最近一年甚至半年的数据重新计算中枢而不是死守历史全区间。第二类是交割逻辑失稳。近月合约临近交割时如果出现仓单紧张或者逼仓苗头价差可能被资金推到完全不合理的水平。这种情况下做反向套利风险极大因为逼仓行情的终结时间很难预测价差不回归不是“早晚的事”而可能是“不会发生的事”。我的原则是临近交割月前十天跨期正向套利可以做跨期反向套利直接放弃。第三类是统计窗口被污染。比如你取样周期内正好有一次极端行情把标准差拉得很大导致当前价差看起来偏离不多。这种情况通过分位数计算可以部分避免更彻底的办法是对价差数据做截尾处理把超过3倍标准差的数据点排除在均值计算之外。4.2 回测盈利、实盘亏损差在哪几步有一类问题咨询特别多代码回测跑出来年化收益很漂亮但一上实盘就开始亏。我复盘过不少这样的案例问题几乎都集中在执行摩擦上。最大的摩擦源是成交价和回测价不一致。回测里经常用收盘价或者模型信号发出时的即时价成交但实盘里你需要同时下两条腿的订单豆粕和菜粕的盘口深度、下单速度都不一样第一腿吃到价格了第二腿可能已经滑了几个点。解决方法是把回测成交价改成次日开盘同时给每次交易预设固定的摩擦成本比如每组组合扣掉20元手续费加滑点再回测一遍如果收益还能接受再考虑实盘。第二个常见问题是没有处理主力合约拼接带来的假信号。主力连续数据在换月时会人为制造价差跳变如果你没有修正这个跳变Z-score会出现大量虚假偏离触发无效交易。我在数据预处理阶段会把换月当日的价差差值与前后交易日对齐或者直接剔除换月前后的数据点这个动作看起来不起眼但对回测结果的影响非常大。第三个问题是实盘中心态变形导致执行走样。回测里止损是无情的实盘里人总会想“再扛一天就回来了”。我的应对方法是把策略参数固化到交易计划里并提前告诉自己这次止损最多亏多少钱这笔钱我用多少利润来覆盖。只要这个账算清楚了执行就不会太变形。4.3 一个典型亏损案例复盘我在某农产品品种上做过一次空豆粕多菜粕的价差交易入场时Z-score在2.2附近按照历史数据判断属于高位回归区逻辑上没有问题。结果入场之后产区天气出问题豆粕单边上涨价差不跌反涨浮亏持续扩大。复盘时我发现最大的问题不是方向判断错而是没有在策略里设置“基本面反转退出线”。当时我只盯着统计信号忽略了产业端已经出现新的驱动力量也就是说修复路径已经不成立了。后来我把止损规则从“Z-score达到某个阈值”改成“价差突破近一年极值时必须重新评估产业端是否出现与开仓逻辑相反的新驱动”。统计工具负责开仓基本面过滤负责确认离场两者缺一不可。这个案例教给我一个很实在的道理套利策略里的止损不是一个数字而是一个判断流程。你要先回答“我赚的是什么钱”再回答“这笔钱还在不在”如果答案是不在了无论价差位置多诱人都应该离场。4.4 常见误区速查表误区典型表现正确处理进场即重手看到价差偏离就满仓干首次开仓不超过40%留足加仓空间扛单等于套利价差不回归就一直加仓设定逻辑止损线突破就撤混用策略参数把豆粕菜粕的策略直接套到其他品种每个品种都单独回测校准参数忽略换月跳变信号触发频繁但实际成交很差换月期降低交易频率修正数据只看价差不看结构价差在回归但持仓量萎缩检查成交量与持仓量避免被少数资金主导4.5 一个坚持了五年的小习惯最后分享一个小技巧。我从开始做套利策略到现在一直保持着每天收盘后记录价差曲线的习惯再把当天的产业新闻关键词和持仓异动记在交易日志里。刚开始我觉得这是在浪费时间但坚持一段时间后我发现自己对“价差处在什么位置、为什么处在这个位置、什么力量可能让它回归”形成了非常直观的体感。这种体感是任何指标都给不了的。比如同样一个Z-score 2.0的信号在某个品种上我会毫不犹豫地执行但在另一个品种上我会多等两个交易日因为我知道那个品种的价差偏离经常会在高位盘整更久。这种经验层面的判断力只能靠长期复盘沉淀出来。套利不是一条没有风险的路但它是一条比单边更容易通过纪律来管理的路。把策略想清楚把参数算明白把流程固定下来剩下的就交给时间。
返回列表