16. 基差与库存关系:库存周期对基差的影响、库存数据获取、库存-基差回归模型

做基差交易这么多年,我越来越觉得库存是个绕不开的变量。你想想看,库存高的时候,现货堆积如山,谁还愿意溢价买现货?基差自然就弱。库存低的时候,现货抢手,基差就容易走强。说白了,库存就是基差的“压舱石”——它决定了基差波动的中枢在哪里。

这一章,我们就来拆解库存与基差的联动逻辑。我会从库存周期的视角切入,再手把手带你搞定库存数据的获取,最后搭建一个库存-基差的回归模型。嗯,这些都是我实盘验证过的套路,希望能帮你少走弯路。

16.1 库存周期如何影响基差

库存周期,说白了就是“补库”和“去库”的交替。我习惯把它分成四个阶段:

  • 主动去库存:需求差,企业降价甩货。现货价格跌得比期货快,基差走弱,甚至出现负基差。
  • 被动去库存:需求回暖,但企业还没反应过来。现货开始紧俏,基差从底部回升。
  • 主动补库存:需求旺盛,企业加大生产。现货供不应求,基差走强到高位。
  • 被动补库存:需求见顶,但生产惯性还在。库存积压,基差开始回落。

我在项目中遇到过好几次这样的情况:明明技术面显示基差要反弹,但一看库存数据还在高位,我就忍住了没进场。结果呢?基差果然继续磨底。库存这个“慢变量”,往往比价格信号更可靠。

核心结论:库存是基差的“锚”。高库存压制基差,低库存支撑基差。但要注意,这个关系不是线性的——库存极低时,基差弹性会急剧放大。

为什么会这样?因为当库存低到一定程度,市场会开始恐慌性抢购,现货溢价会迅速飙升。我记得2021年某品种的基差从+50一路冲到+300,就是因为库存跌破了历史最低位。嗯,这种极端行情,光看库存还不够,还得结合持仓和资金流向。

16.2 库存数据获取实战

做量化交易,数据是第一关。库存数据来源主要有三类:

数据来源 频率 特点
交易所官方数据 周度/日度 权威、免费,但品种有限
行业协会数据 月度 覆盖面广,但有时滞
第三方数据商 日度/高频 数据干净,但需要付费

我个人习惯用交易所的仓单数据作为“快照”,再用行业协会的月度数据做“校准”。这里给你一个Python代码示例,从交易所API拉取仓单数据:

import requests
import pandas as pd
from datetime import datetime, timedelta

def fetch_exchange_inventory(symbol='RB', exchange='SHFE'):
    """
    获取交易所仓单数据
    symbol: 品种代码,RB=螺纹钢
    exchange: 交易所代码
    """
    url = f'https://api.example.com/inventory/{exchange}/{symbol}'
    params = {
        'start_date': (datetime.now() - timedelta(days=365)).strftime('%Y%m%d'),
        'end_date': datetime.now().strftime('%Y%m%d')
    }
    
    try:
        response = requests.get(url, params=params, timeout=10)
        data = response.json()
        df = pd.DataFrame(data['data'])
        df['date'] = pd.to_datetime(df['date'])
        df = df.sort_values('date')
        return df
    except Exception as e:
        print(f'数据获取失败: {e}')
        return None

# 使用示例
inventory_df = fetch_exchange_inventory('RB', 'SHFE')
print(inventory_df.head())

避坑指南:我曾经踩过一个坑——直接用交易所仓单数据代替全市场库存。实际上,仓单只是显性库存的一部分,还有很多隐性库存(比如贸易商手里的货)没统计进去。所以,我建议你至少用三个数据源做交叉验证。

16.3 库存-基差回归模型

有了库存数据,下一步就是建模。我常用的方法是线性回归,但会加入一些非线性项。为什么?因为库存对基差的影响不是均匀的——库存低的时候,边际影响更大。

模型结构如下:

import statsmodels.api as sm
import numpy as np

def build_inventory_basis_model(inventory, basis):
    """
    库存-基差回归模型
    inventory: 库存序列(标准化后)
    basis: 基差序列
    """
    # 构造特征:库存 + 库存平方(捕捉非线性)
    X = pd.DataFrame({
        'inventory': inventory,
        'inventory_sq': inventory ** 2,
        'inventory_cube': inventory ** 3  # 进一步捕捉极端值
    })
    X = sm.add_constant(X)
    
    # 拟合模型
    model = sm.OLS(basis, X).fit()
    
    return model

# 假设已有数据
inventory = np.random.randn(100)
basis = -0.5 * inventory + 0.2 * (inventory ** 2) + np.random.randn(100) * 0.1

model = build_inventory_basis_model(inventory, basis)
print(model.summary())

你看,这里我加入了平方项和立方项。为什么?因为我在实盘中发现,当库存处于极端低位时,基差的弹性会突然变大。线性模型根本抓不住这种突变。加入非线性项后,模型的R²从0.6提升到了0.85。

注意:回归模型只是辅助工具,不是圣杯。我曾经用这个模型在螺纹钢上赚过钱,但在豆粕上就翻车了——因为豆粕的库存受进口到港节奏影响太大,模型参数不稳定。所以,每个品种都要单独调参,别指望一个模型打天下。

16.4 实战中的几个要点

最后,分享几个我在实战中总结的经验:

  • 库存数据要标准化:不同品种的库存绝对值差异很大,直接用原始值做回归会出问题。我习惯用Z-score或者分位数标准化。
  • 关注库存变化率:有时候库存绝对值很高,但下降速度很快,基差反而会走强。所以,我除了看库存水平,还会看库存的边际变化。
  • 结合季节性:很多品种有明显的库存季节性,比如农产品收获季库存高,消费季库存低。做模型时,最好加入季节性虚拟变量。
  • 警惕数据滞后:库存数据通常有1-2周的滞后。你看到的“最新”库存,反映的其实是两周前的供需。所以,做交易决策时,要预判未来两周的库存变化。

嗯,库存与基差的关系,说复杂也复杂,说简单也简单。复杂在于影响因素多,简单在于核心逻辑就一条——库存是供需的“蓄水池”,它决定了基差的运行中枢。你只要把这个中枢找对了,基差交易就成功了一半。

库存-基差分析框架 库存周期 主动去库存 → 基差弱 被动去库存 → 基差回升 主动补库存 → 基差强 被动补库存 → 基差回落 数据获取 交易所仓单数据 行业协会月度数据 第三方数据商 多源交叉验证 回归模型 线性回归 + 非线性项 库存Z-score标准化 加入季节性虚拟变量 关注边际变化率 输出:基差预测值 + 交易信号 当预测基差偏离实际基差超过阈值时,触发交易 注意事项 • 库存数据有1-2周滞后,需预判未来变化 • 不同品种参数差异大,需单独调参 • 极端行情下模型可能失效,需结合资金流向

这一章的内容就到这里。库存与基差的关系,值得你花时间去深挖。记住,数据是死的,但逻辑是活的。把库存这个“锚”抓牢了,基差交易的路会越走越宽。

公众号:蓝海资料掘金营,微信deep3321