持仓量的基础概念与数据获取
各位同学,今天我们来聊聊持仓量。很多人做交易只看价格和成交量,却忽略了持仓量这个关键指标。我做了十几年交易,可以负责任地告诉你——不看持仓量,就像开车不看仪表盘,迟早要出事。
持仓量的定义与计算方式
持仓量,英文叫Open Interest,简称OI。说白了,就是市场上还没有平仓的合约总数。注意,是单边计算的。
举个例子:张三买开1手螺纹钢,李四卖开1手螺纹钢。这笔交易完成后,持仓量增加1手,而不是2手。为什么?因为一张合约对应一个买方和一个卖方,交易所只统计一次。
核心公式:
持仓量 = 所有未平仓多头合约总数 = 所有未平仓空头合约总数
理论上,多头持仓和空头持仓永远相等。
持仓量的变化有三种情况:
- 开仓交易:新多头 + 新空头 → 持仓量增加
- 平仓交易:老多头平仓 + 老空头平仓 → 持仓量减少
- 换手交易:新多头 + 老空头平仓(或老多头平仓 + 新空头)→ 持仓量不变
嗯,这里要注意。很多新手搞不清换手的情况。我见过有人把换手当成增仓,结果判断方向完全反了。你想想看,如果持仓量没变,说明资金没有新进场,只是老玩家在换座位而已。
多头与空头持仓的构成
持仓量背后是谁在交易?这很重要。我个人习惯把市场参与者分成三类:
| 参与者类型 | 特点 | 对持仓量的影响 |
|---|---|---|
| 商业机构(套保盘) | 产业客户,如钢厂、贸易商 | 持仓量大且稳定,方向明确 |
| 非商业机构(投机盘) | 基金、CTA、散户 | 持仓变化快,驱动趋势 |
| 做市商/套利盘 | 提供流动性,赚价差 | 双边持仓,对方向影响小 |
我在项目中遇到过一件事。2018年做螺纹钢分析,发现持仓量持续增加但价格不涨。当时很多人看多,觉得增仓就是资金看好。结果呢?后来查了CFTC报告才发现,增仓的全是钢厂在套保做空。价格横盘一个月后暴跌了600点。所以,光看持仓量总量不够,还得看谁在买、谁在卖。
如何从交易所获取持仓量数据
数据源是交易员的弹药库。我常用的几个渠道:
1. CFTC(美国商品期货交易委员会)
CFTC每周五发布COT报告,包含持仓量、商业/非商业持仓分类。这是全球最权威的持仓数据源。
# Python示例:获取CFTC数据
import pandas as pd
import requests
# CFTC官网CSV下载链接
url = "https://www.cftc.gov/dea/futures/deacmxsf.htm"
# 实际项目中我会用requests解析HTML表格
# 或者直接用pandas读取本地下载的CSV
df = pd.read_csv("cftc_data.csv")
print(df.head())
小技巧:CFTC数据有滞后性(周五发布周二的数据)。做短线交易的朋友要注意这个时间差。我一般用它做周线级别的趋势判断。
2. 上期所、大商所、郑商所
国内三大商品交易所每天收盘后发布持仓排名。前20名会员的持仓数据是公开的。
# 上期所数据获取示例
# 上期所官网 -> 数据 -> 每日持仓排名
# 或者用爬虫抓取
import requests
from bs4 import BeautifulSoup
url = "http://www.shfe.com.cn/statements/dataview.html?paramid=rank"
# 实际代码需要处理反爬和动态加载
# 我建议直接用交易所提供的API或数据商服务
避坑指南:我曾经用爬虫抓取国内交易所数据,结果发现不同交易所的数据格式差异很大。上期所用表格,大商所用JSON,郑商所又是另一种格式。后来我改用万得或聚宽的数据接口,省心很多。如果你是自己做研究,建议直接买数据服务,别在爬虫上浪费时间。
3. 其他数据源
- ICE(洲际交易所):原油、棉花等品种
- CME Group:股指期货、外汇期货
- 国内数据商:万得、聚宽、Tushare
数据清洗与预处理基础
拿到原始数据后,千万别直接扔进模型。我见过太多人因为数据没洗干净,得出完全错误的结论。
数据清洗的常规步骤:
- 处理缺失值:交易所节假日不发布数据,需要前向填充或插值
- 去除异常值:比如某天持仓量突然翻倍,可能是数据录入错误
- 统一时间格式:不同交易所的日期格式可能不同
- 计算衍生指标:持仓量变化率、多空比等
# 数据清洗示例
import pandas as pd
import numpy as np
# 加载原始数据
df = pd.read_csv("open_interest.csv")
# 1. 处理缺失值
df['oi'] = df['oi'].fillna(method='ffill')
# 2. 去除异常值(3倍标准差)
mean = df['oi'].mean()
std = df['oi'].std()
df = df[(df['oi'] > mean - 3*std) & (df['oi'] < mean + 3*std)]
# 3. 计算持仓量变化
df['oi_change'] = df['oi'].diff()
# 4. 计算多空比(如果有分类数据)
# df['long_short_ratio'] = df['long_oi'] / df['short_oi']
print(df.describe())
我的习惯:数据清洗后,我会先画一张持仓量走势图,肉眼扫一遍。如果发现某个时间点有突兀的尖峰或断崖,大概率是数据问题。别急着分析,先回去查原始数据。
知识体系总览
下面这张图是我自己整理的持仓量分析框架,你可以把它当成地图用:
这张图把持仓量分析分成了四个层次。从数据获取开始,到清洗、计算指标,最后才是分析应用。很多人一上来就想学背离信号、资金流向,结果数据源都没搞清楚,分析出来的东西自然不靠谱。
好了,这一章的内容就到这里。记住,持仓量是市场的温度计,不是方向盘。它能告诉你市场有多热,但不能告诉你该往哪开。下一章我们会深入讲持仓量与价格的关系,到时候结合实战案例,你会理解得更透彻。
公众号:蓝海资料掘金营,微信deep3321