第二十一讲:螺纹钢期现套利实战——从数据到盈亏的全流程拆解
各位同学,今天咱们来点真格的。前面讲了那么多基差交易的原理、模型、风控,今天直接上实战——螺纹钢期现套利。
我最早做这个品种的时候,其实也踩过不少坑。记得2018年那会儿,我拿着螺纹钢的基差数据,觉得机会来了,结果一进场就被库存数据给打了脸。嗯,今天就把这些经验揉碎了讲给你们听。
一、实战前的数据准备:别让数据坑了你
做期现套利,数据是命根子。我个人习惯把数据分成三类:
- 现货数据:螺纹钢HRB400 20mm,上海地区主流成交价
- 期货数据:主力合约(通常是RB2410或RB2501)的收盘价、结算价
- 辅助数据:库存、产量、表观消费、基差历史分位数
这里有个坑——现货价格要取“理计”还是“过磅”? 我当年就因为这个吃过亏。螺纹钢现货市场通常用理计价格,但期货交割是过磅。两者差一个3%-5%的磅差。你想想看,如果没把这个算进去,基差直接偏了100多点。
⚠️ 注意: 现货价格必须与期货交割标准一致。螺纹钢期货交割品是HRB400 16-25mm,理计计价。如果你拿的是过磅价,记得乘以0.97左右的系数。
二、策略执行:基差回归的逻辑
螺纹钢期现套利的逻辑其实很简单——基差会回归。为什么?因为交割制度摆在那里。临近交割月,期货价格必须向现货靠拢。
具体策略分两步:
- 开仓条件:基差(现货-期货)超过历史90%分位数,且库存处于低位
- 平仓条件:基差回归到历史均值附近,或者临近交割月
举个例子。2023年6月,螺纹钢现货报3680元/吨,期货RB2310合约报3520元/吨,基差160元。当时历史90%分位数是150元,库存连续三周下降。嗯,机会来了。
📊 核心逻辑: 买入期货(做多)+ 卖出现货(做空)→ 基差收窄时双向平仓获利。
三、盈亏分析:算清楚每一笔账
咱们来算一笔真实的账。假设你在2023年6月15日开仓:
| 项目 | 数值 | 备注 |
|---|---|---|
| 现货卖出价 | 3680元/吨 | 上海理计 |
| 期货买入价 | 3520元/吨 | RB2310 |
| 基差 | 160元 | 现货-期货 |
| 开仓数量 | 1000吨 | 10手期货 |
一个月后,7月15日平仓:
| 项目 | 数值 | 备注 |
|---|---|---|
| 现货买入价 | 3650元/吨 | 基差收窄 |
| 期货卖出价 | 3580元/吨 | 期货涨幅更大 |
| 基差 | 70元 | 回归均值 |
盈亏计算:
- 现货端:卖出3680 → 买入3650,盈利30元/吨 × 1000吨 = 30,000元
- 期货端:买入3520 → 卖出3580,盈利60元/吨 × 1000吨 = 60,000元
- 总盈利:90,000元
- 扣除成本:仓储费、资金成本、交易手续费约15元/吨 → 15,000元
- 净利润:75,000元
💡 我的经验: 别只看基差绝对值。我曾经遇到基差很大但就是不回归的情况——后来发现是现货市场有逼仓。所以一定要看库存和仓单数据。库存低、仓单少的时候,基差回归才可靠。
四、核心知识体系:一张图看懂
下面这张图是我自己总结的螺纹钢期现套利决策框架,你们可以照着这个流程走:
五、避坑指南:我踩过的那些雷
做螺纹钢期现套利这几年,我总结了几条血泪教训:
- 别忽视交割成本:我曾经算账时忘了算交割手续费和质检费,结果一笔单子利润被吃掉一半。交割成本大约20-30元/吨,一定要算进去。
- 注意现货流动性:螺纹钢现货不是你想卖就能卖。遇到市场下跌,贸易商都不收货,你手里的货可能砸手里。所以开仓前先确认好现货的出货渠道。
- 基差回归不是必然的:2019年我就遇到过基差持续扩大一个月的情况。当时库存暴增,现货跌得比期货快。嗯,那笔单子我扛了45天才解套。
📌 我的建议: 新手先从1手(100吨)做起,跑通全流程再放大。别一上来就干1000吨,万一遇到极端行情,资金压力会让你睡不着觉。
六、量化执行:用代码跑起来
最后,给你们一个简单的策略框架代码。这不是完整的回测代码,但能帮你理解执行逻辑:
# 伪代码示例:螺纹钢期现套利策略
def check_entry_condition():
spot_price = get_spot_price("螺纹钢", "上海")
futures_price = get_futures_price("RB2310")
basis = spot_price - futures_price
basis_90pct = get_historical_percentile(basis, 0.9)
inventory = get_inventory("螺纹钢")
if basis > basis_90pct and inventory < inventory_30pct:
return True, basis
else:
return False, basis
def execute_trade():
# 买入期货
buy_futures("RB2310", 10) # 10手
# 卖出现货(通过贸易商)
sell_spot("螺纹钢", 1000) # 1000吨
print("开仓完成,基差:", basis)
def monitor_position():
while position_open:
current_basis = get_current_basis()
if current_basis <= basis_mean:
close_position()
break
time.sleep(3600) # 每小时检查一次
好了,这一讲的内容就到这里。记住,螺纹钢期现套利的核心是基差回归,但回归的前提是市场结构正常。如果遇到逼仓、政策突变、库存异常,再大的基差也别碰。