期货市场基础:合约要素、交易规则、保证金制度、交割制度、主力合约与换月

各位同学,咱们今天聊点实在的。做CTA策略,说白了就是跟期货合约打交道。你要是连合约长什么样、怎么交易、什么时候该跑都不知道,那策略写得再花哨也没用。我刚开始做量化那会儿,就吃过换月的亏,嗯,后面我会细说。

一、期货合约的核心要素

每一份期货合约,就像一张标准化的“买卖合同”。它规定了买卖双方在未来某个时间、以某个价格、交割一定数量的商品。我个人习惯把合约要素拆成三块来看:

  • 交易标的:比如螺纹钢、豆粕、原油。你得清楚你交易的是啥,别把螺纹钢和热卷搞混了,我见过有人犯过这种低级错误。
  • 合约单位:每手代表多少吨、多少桶、多少克。比如螺纹钢是10吨/手,黄金是1000克/手。这个直接决定了你的名义本金和盈亏。
  • 报价单位与最小变动价位:比如螺纹钢报价是元/吨,最小变动是1元/吨。那每跳一下,你的盈亏就是10元(1元×10吨)。
  • 最后交易日与交割日:这是你的“死线”。个人投资者通常要在最后交易日前平仓,否则会面临交割风险。

避坑指南:我曾经在写策略时,忘了检查合约的“最后交易日”字段,结果策略在交割月前一周还在开仓,差点被逼仓。后来我养成了一个习惯——所有策略在进入交割月前一个月,自动过滤掉该合约。

二、交易规则:你每天都在跟它打交道

交易规则决定了你什么时候能买、能卖,以及能买多少。这里我挑几个重点说:

  • 交易时间:日盘(9:00-15:00)和夜盘(21:00-23:00或次日凌晨)。夜盘波动大,很多CTA策略专门做夜盘行情。我个人习惯把夜盘数据单独处理,因为流动性结构和日盘不一样。
  • 涨跌停板制度:比如螺纹钢的涨跌停是±6%。一旦封板,你的策略可能无法平仓。我建议在策略里加一个“涨跌停检测”,如果价格触及停板,自动降低仓位或暂停交易。
  • 持仓限额:交易所对单个账户的持仓有上限。比如某品种限仓5000手,你策略信号再强,也不能超过这个数。否则会被强平。

小技巧:写策略时,建议把交易规则参数化。比如涨跌停比例、交易时间分段、持仓限额,都放在一个配置文件里。这样换品种时,改参数就行,不用改代码。

三、保证金制度:杠杆是把双刃剑

保证金制度,说白了就是“以小博大”。你只需要付合约价值的一小部分(比如10%),就能控制100%的货。但反过来,亏损也会被放大。

举个例子:螺纹钢4000元/吨,一手10吨,合约价值4万元。如果保证金比例是10%,你只需要4000元就能开一手。如果价格跌了5%(200元/吨),你的亏损是2000元,相当于本金的50%。

我见过不少新手,看到保证金低就拼命加杠杆,结果一波回调直接爆仓。我的建议是:实际杠杆不要超过3倍。也就是说,你账户里至少要有合约价值的30%作为安全垫。

注意:交易所会根据市场波动调整保证金比例。比如临近节假日或出现极端行情,保证金可能从10%提高到15%。你的策略必须能动态获取这个数据,否则可能因为保证金不足而被强平。

四、交割制度:散户的“红线”

交割,就是合约到期后,买卖双方一手交钱一手交货。但99%的CTA策略交易者都不会参与实物交割。为什么?因为你是做投机或套利的,不是开工厂的。

国内商品期货分为两种交割方式:

  • 实物交割:比如螺纹钢、铜、大豆。到期后,买方要付全款拿货,卖方要交货。个人投资者无法参与实物交割,必须在最后交易日前平仓。
  • 现金交割:比如股指期货、国债期货。到期后直接按结算价算盈亏,不用真的去搬钢材。这个对散户友好一些。

我个人习惯在策略里设置一个“交割月前N天强制平仓”的逻辑。比如对于螺纹钢,我通常在进入交割月前10个交易日就全部平仓,绝不拖到最后一天。你想想看,万一流动性枯竭,你平仓都平不掉,那多被动。

五、主力合约与换月:CTA策略的核心难题

主力合约,就是某个品种中成交量最大、持仓量最大的那个合约。比如螺纹钢的主力通常是1月、5月、10月合约。CTA策略一般只交易主力合约,因为流动性好,滑点小。

但问题来了:主力合约会变。比如螺纹钢从10月合约换到1月合约,这个过程叫“换月”。换月期间,价差可能剧烈波动,你的策略如果不处理,很容易被来回打脸。

我画了一张图,帮你理解主力合约的切换逻辑:

时间 旧主力合约 (如:RB2410) 新主力合约 (如:RB2501) 换月 区间 成交量/持仓量逐渐下降 成交量/持仓量逐渐上升

换月期间,旧合约的流动性会逐渐下降,新合约的流动性会上升。你的策略需要在这段时间内,把持仓从旧合约转移到新合约。怎么转移?有两种常见方法:

  • 固定日期换月:比如在交割月前第15个交易日,统一平旧仓、开新仓。简单粗暴,但可能错过价差收益。
  • 动态换月:根据成交量和持仓量的变化,逐步转移。比如旧合约持仓占比降到30%以下时,开始换仓。这个方法更精细,但代码实现复杂一些。

我的经验:我早期做CTA时,用的是固定日期换月。结果有一次换月当天,新旧合约价差突然拉大,我的策略在旧合约上亏了2%,在新合约上又亏了1%,一天亏了3%。后来我改成了动态换月,根据5日均量来决策,效果好了很多。

六、实战中的注意事项

最后,我总结几个实战中容易踩的坑:

  1. 别在交割月附近开新仓:流动性差,滑点大,还可能被逼仓。我一般提前一个月就停止开仓了。
  2. 关注交易所公告:保证金调整、涨跌停板调整、限仓调整,都会影响你的策略。建议写个爬虫,每天自动抓取交易所公告。
  3. 换月期间降低仓位:换月本身就有不确定性,再加上价差波动,仓位太重容易出事。我通常会把仓位降到平时的50%。
  4. 回测时要处理换月:很多新手回测时直接用连续合约,忽略了换月价差。结果实盘一跑,发现收益差了一大截。我建议用“主力合约切换法”来回测,更贴近真实情况。

代码小片段:下面是一个简单的换月逻辑示例,根据成交量判断主力合约:

def get_main_contract(data):
    # data 是包含所有合约的DataFrame
    # 按成交量排序,取最大的那个
    main = data.loc[data.groupby('date')['volume'].idxmax()]
    return main

当然,实际生产中还要考虑持仓量、换月平滑等细节。这里只是给你一个思路。

好了,期货市场的基础知识就聊到这儿。这些东西看似简单,但每一个细节都可能影响你的策略表现。我个人建议你花点时间,把每个品种的合约规则、交割日期、主力切换规律都整理成一张表,放在手边。做策略时随时查阅,能省不少麻烦。

专注资料整理