股票期货

选择股票期货时要检查什么

一份股票期货合约的名义价值可以写成:…

选择股票期货时要检查什么

合约价格 × 合约乘数。

保证金只覆盖其中一部分。以台湾标准股票期货约13.5%的保证金比例计算,账户实际承受的名义敞口约为保证金的7.4倍。价格只需要反向波动几个百分点,账户权益就可能接近维持保证金红线。

所以,选择股票期货不能从“看好哪只股票”开始。应该从合约结构开始。

成交量、未平仓合约量、合约乘数、最小变动单位、保证金、到期日、转仓规则、结算方式、除权息调整机制,任何一个参数缺失,回测结果都可能失真。交易终端里显示的代码只是入口,不是完整的交易对象。

流动性先于观点:成交量和未平仓量不是装饰数据

股票期货最先要检查的是流动性。

这里至少需要观察两个变量:

  • 成交量:某一交易日内实际成交的合约数量。
  • 未平仓合约量:交易结束后仍然存在的多空持仓总量。

成交量回答的是“今天能不能成交”。未平仓量回答的是“这个合约是否存在持续的持仓基础”。

两者不能互相替代。

某个合约当天成交量较高,可能只是单日事件驱动。若未平仓量长期接近零,说明持仓并不稳定。相反,未平仓量较高但当天成交量很低,意味着市场上有持仓,却不一定能在当前价位完成退出。

盘口深度比单日成交量更接近真实成本

很多交易者只看成交量排名。这不够。

量化策略真正需要的是:

1. 下单时是否有连续报价。

2. 买一和卖一之间的价差是否稳定。

3. 一笔正常规模的订单会吃掉几档盘口。

4. 开盘、收盘和财报时段的价差是否异常扩大。

5. 平仓时是否必须跨越多个价位。

6. 夜盘或非主交易时段是否存在报价断层。

股票期货的成交量通常低于对应的股票现货。个别冷门合约可能整天没有成交。此时,模型里的“按收盘价成交”没有执行意义。策略可以产生信号,但无法完成平仓。

滑点也不是固定比例。

如果订单数量为 \(Q\),盘口第 \(i\) 档可成交数量为 \(q_i\),价格为 \(p_i\),实际成交均价应近似表示为:

\[

P_{\text{exec}}=\frac{\sum_i p_i q_i}{\sum_i q_i}

\]

当 \(Q\) 小于第一档数量时,滑点可能接近买卖价差的一半。当 \(Q\) 超过第一档数量,实际成本由多档盘口共同决定。回测若直接使用收盘价,等于默认市场拥有无限深度。这是错误假设。

交易信号解决“是否进入”。流动性决定“是否能退出”。后者通常更贵。

未平仓量用于筛选合约,不用于预测方向

未平仓量不是上涨或下跌信号的替代品。

它能说明合约是否有足够的持仓基础,不能单独说明多方或空方占优。因为每一张未平仓合约同时对应一个多头和一个空头。数据本身没有提供方向归属。

更合理的筛选方式是把成交量和未平仓量放进执行模型:

检查项目可接受状态风险状态
日成交量多数交易日持续存在偶发放量,其余时间接近零
未平仓量连续多个交易日保持一定规模长期极低或快速归零
买卖价差价差稳定,波动可建模价差频繁跳变
盘口深度足以覆盖计划下单量一档数量远低于订单规模
平仓路径正常时段可完成需要等待对手盘
交易成本手续费、税费、滑点可估计滑点取决于单笔偶然成交

没有统一的“冷门合约成交量阈值”。不同标的、交易所和时段的分布差异很大。因此,不应机械地写成“日成交量超过某个固定数字就安全”。

更稳妥的做法是使用策略自身的订单规模计算流动性压力:

\[

L=\frac{\text{计划订单数量}}{\text{过去一段时间的平均可成交数量}}

\]

当 \(L\) 接近或超过1时,订单已经可能显著影响成交价格。这里的分母不能只使用全天成交量,还需要结合实际执行时段、盘口深度和订单类型。

回测里至少加入三种成交假设

同一套策略,采用不同成交假设,结果可能完全不同。股票期货回测建议至少测试以下情形:

  • 按买一或卖一成交,模拟立即成交。
  • 按中间价加固定滑点成交,模拟一般执行。
  • 按盘口逐档吃单成交,模拟较大规模订单。

如果策略只有在收盘价成交的情况下盈利,而加入一个很小的价差和滑点后就失去优势,问题不在市场,而在模型。

成交量过滤也不能只看入场。退出风险通常更高。开仓时可以等待,平仓时可能没有等待空间。止损订单尤其如此,因为风险扩大时,盘口往往同时恶化。

合约规格决定实际敞口:乘数和跳动值必须拆开看

股票期货不是一张“按股票价格波动”的纸面合约。它是一个带有固定乘数的标准化合约。

名义价值为:

\[

V=P\times M

\]

其中:

  • \(P\) 是期货价格。
  • \(M\) 是合约乘数。
  • \(V\) 是一手合约对应的名义价值。

台湾期货交易所的标准股票期货,一手通常代表2,000股;小型股票期货一手代表100股。芝商所个股期货的常见合约乘数也是100股。

同样的标的价格,合约乘数不同,资金占用和盈亏变化完全不同。

假设某股票期货价格为100元:

  • 乘数为2,000股时,一手名义价值为200,000元。
  • 乘数为100股时,一手名义价值为10,000元。

价格每变动1元,前者每手盈亏变化2,000元,后者每手盈亏变化100元。

价格看起来相同。风险单位不同。

最小变动价位决定盈亏颗粒度

除了乘数,还要检查最小变动价位。

单跳盈亏为:

\[

\Delta P_{\min}\times M

\]

芝商所个股期货的最小变动价位可为0.01点,对应每张合约1美元盈亏。这个单位看似很小,但在高频策略、短周期套利和大规模组合中会持续累积。

如果策略平均持仓时间很短,目标收益只有几个最小变动单位,那么手续费、买卖价差和跳动误差会占据主要部分。此时,预测模型的准确率不是第一问题,成交成本才是。

交易系统需要把以下参数显式存储,而不是写死在代码里:

contract_multiplier
tick_size
tick_value
initial_margin
maintenance_margin
expiry_date
settlement_type

不同交易所的字段名称可能不同,但逻辑不能省略。合约代码相同或相近,不代表规格相同。小型合约、标准合约、不同到期月份,都可能拥有不同的乘数和保证金参数。

不能用股票数量代替合约数量

股票现货组合通常以股数表达。股票期货组合必须至少同时记录:

  • 合约张数。
  • 合约乘数。
  • 期货价格。
  • 名义价值。
  • 初始保证金。
  • 维持保证金。
  • 单跳盈亏。

若只记录“持有10手”,风险计算没有完成。10手标准合约和10手小型合约,不是同一个仓位。

组合对标的价格的近似敏感度可以写成:

\[

\text{Delta}_{\text{futures}}\approx N\times M

\]

其中 \(N\) 是合约数量,\(M\) 是乘数。

如果同时持有股票现货和股票期货,还需要统一单位。例如:

\[

\text{净敞口}=

\text{现货股数}

+

\text{期货张数}\times\text{合约乘数}

\]

空头期货应使用负号。不能把股票市值和期货保证金直接相加后,误判组合规模。保证金是资金占用,不是名义敞口。

合约乘数变化会破坏历史回测的连续性

合约规格发生调整时,历史数据不能简单拼接。

如果乘数、最小变动单位或结算规则发生变化,连续价格序列仍然可能看起来平滑,但盈亏序列已经不连续。尤其是基于点数计算收益的策略,必须在合约元数据层面处理调整。

推荐将价格数据和合约规则分离:

数据层内容
行情层时间、开高低收、成交量、未平仓量
合约层乘数、最小跳动、到期日、保证金
交易层开仓、平仓、成交价、手续费、税费
结算层每日盯市、现金调整、到期结算

这比在一个表格里塞入所有字段更容易审计。也更适合滚动合约和多市场组合。

保证金不是最大损失:先计算维持线,再决定仓位

股票期货采用保证金交易。保证金比例低于100%,意味着名义价值高于实际占用资金。

台湾标准股票期货的保证金比例约为13.5%,对应约7.4倍的名义杠杆。这个倍数不是收益承诺,只是敞口与保证金之间的比例关系。

假设:

  • 名义价值为 \(V\)。
  • 初始保证金比例为 \(m_i\)。
  • 维持保证金比例为 \(m_m\)。
  • 持仓数量为 \(N\)。

初始保证金近似为:

\[

M_i=N\times V\times m_i

\]

维持保证金近似为:

\[

M_m=N\times V\times m_m

\]

账户权益低于维持保证金后,可能触发追缴通知。若在规定期限内不能补足,持仓可能被强制平仓。具体比例、补缴期限和券商执行细节,需要以交易所及开户机构规则为准。

追缴机制具有离散性

很多回测把保证金当作连续变量。真实交易不是这样。

账户权益随着每日结算和价格变动更新。触发追缴后,处理可能发生在特定时点。强平价格也不一定等于模型计算出的阈值价格,因为实际成交还会受到盘口、跳空和流动性的影响。

账户权益可以近似表示为:

\[

E_t=E_0+\sum_{k=1}^{t}\text{PnL}_k-\text{Fees}_t

\]

其中每日盈亏按结算价格或实际成交价格计算。若发生现金调整、股利调整或合约转仓,还需要加入对应现金流。

仓位设计不应只用“可用资金 ÷ 保证金”计算。那只是最大张数,不是合理张数。

更可执行的约束至少包括:

1. 单笔交易亏损不超过账户权益的固定比例。

2. 极端日波动下,账户仍高于维持保证金。

3. 预估滑点扩大数倍时,仍能完成退出。

4. 同一标的及高度相关标的的总敞口受到限制。

5. 留出追缴资金,不把全部现金配置为初始保证金。

用压力测试替代静态杠杆判断

静态杠杆只回答“现在占用多少保证金”。压力测试回答“价格反向变化时,账户还能运行多久”。

可以设置多组价格冲击:

  • 单日反向变动1%。
  • 单日反向变动3%。
  • 连续多个交易日反向变动。
  • 价格跳空,止损无法按理论价格成交。
  • 价差扩大,平仓成本增加。
  • 相关标的同时向不利方向移动。

压力测试的输出不应只有收益率,还应包括:

  • 最低账户权益。
  • 最大保证金占用。
  • 触发追缴的时间。
  • 强平前可承受的价格变化。
  • 强平后的剩余现金。
  • 滑点扩大后的实际损失。

如果模型没有记录这些变量,风险管理仍然停留在描述层面。

7.4倍杠杆意味着误差也被放大。信号误差、滑点误差、保证金误差都会进入同一条损益曲线。

到期日不是日历字段:转仓会改变交易价格和成本

股票期货具有固定到期日,不能像现货股票一样无限期持有。

个股期货常见季度到期月份为3月、6月、9月和12月。不同交易所的到期规则、最后交易日和转仓安排可能不同。交易者需要在合约生命周期内处理持仓,而不是等系统自动完成。

转仓通常包含两个动作:

1. 平掉临近到期合约。

2. 建立更远到期合约。

这两个动作不一定在同一价格完成,也不一定同时成交。转仓成本包括:

  • 两个合约的买卖价差。
  • 临近合约和远期合约之间的价差。
  • 手续费与交易税费。
  • 转仓时的盘口冲击。
  • 到期前流动性变化。
  • 信号在转仓期间的暴露风险。

连续合约价格不等于可交易价格

研究图表里常用连续合约。它适合观察趋势、波动和价差结构,不等于实际可以直接交易的合约。

将不同月份合约拼接时,至少存在三种处理方式:

  • 直接拼接。
  • 价差调整。
  • 比例调整。

每种方法都会改变历史价格序列。直接拼接可能制造跳空;价差调整会改变绝对价格;比例调整会改变价格的尺度。

如果策略使用均线、布林带或价格突破,连续合约的拼接方法会直接改变信号。若策略使用收益率,仍然需要记录真实转仓价格,否则收益序列可能被人为平滑。

一个合格的回测系统应当保存:

时间点旧合约新合约平仓价开仓价价差费用
转仓日近月合约远月合约实际成交实际成交新旧合约价差手续费及税费

不能只保留一条“连续价格”。连续价格适合分析,实际成交记录才适合结算。

转仓时间取决于流动性,不只取决于剩余天数

最简单的转仓规则是“到期前若干天转仓”。这个规则便于编码,但不一定适合所有合约。

若近月合约临近到期仍然拥有更高成交量和未平仓量,过早转仓可能增加成本。若近月合约流动性快速下降,则等待到最后几天可能造成平仓困难。

转仓模型可使用以下变量:

  • 近月与远月成交量比。
  • 近月与远月未平仓量比。
  • 买卖价差。
  • 远近月价差。
  • 剩余交易日。
  • 策略当前持仓方向。
  • 到期结算方式。

这里不需要预测价格方向。只需要识别哪个合约的执行条件更稳定。

转仓规则还必须避免未来函数。当天收盘后才能获得的数据,不能用于当天收盘前的成交决策。若使用未平仓量,必须确认数据发布时间和可用时间。

结算方式决定到期风险:现金结算不能按实物交割理解

选择股票期货时,需要单独确认结算方式。

股票期货并不都支持实物交割。许多主流个股期货采用现金结算。以芝商所个股期货为例,到期时根据标的股票的官方收盘价计算最终盈亏,现金直接计入或扣除账户。

现金结算的结果是:

  • 到期不需要交付股票。
  • 账户按照最终结算价计算盈亏。
  • 到期前仍然必须管理保证金。
  • 最终结算价与普通收盘价可能存在规则差异。
  • 临近到期时,成交和报价行为可能变化。

实物交割和现金结算不能混为一谈。两者对账户资金、交割准备、到期处理和回测现金流的影响不同。

如果系统把所有个股期货都写成“到期自动换成股票”,结算结果会系统性错误。

除权息调整:价格变化不等于真实亏损

股票期货的标的股票发生除息时,合约通常会根据交易所规则进行契约调整。

典型处理包括:

  • 除息日当天,开盘参考价扣除股利影响。
  • 未平仓合约价格进行相应调整。
  • 买方账户收到等额现金股利调整额。
  • 调整通常在除息日进行,不需要像普通股利那样等待数周或数月。

这套机制的目的,是避免因为标的股票除息导致期货合约出现不应有的机械性损益。

回测必须同时调整价格和现金流

除权息处理最容易在回测中被漏掉。

如果只把期货价格向下调整,却没有把股利调整额加入账户现金流,模型会把中性调整误判为多头亏损。反过来,如果价格已经使用调整后序列,又额外加入一次未经核对的股利收入,也会重复计算。

一笔除息事件至少需要记录:

  • 标的股票除息日。
  • 每股股利或交易所公布的调整参数。
  • 合约乘数。
  • 持仓方向。
  • 未平仓数量。
  • 调整前价格。
  • 调整后价格。
  • 现金调整方向。
  • 现金调整金额。

买方和卖方的现金流方向不能写反。股票期货不是股票现货。除息调整由合约规则决定,不应直接套用现货分红逻辑。

除权、并股和拆股也需要独立处理

除息只是调整事件的一种。

标的股票发生拆股、并股、配股、换股或其他公司行动时,合约乘数、履约价格或合约代码可能发生变化。调整方法依交易所规则而定,不能用统一公式覆盖所有事件。

因此,合约数据库需要保留公司行动字段。至少包括:

  • 事件类型。
  • 生效日期。
  • 调整前合约规格。
  • 调整后合约规格。
  • 调整因子。
  • 现金补偿或其他结算金额。

策略研究阶段可以使用调整后的连续序列。交易执行阶段必须使用当时真实有效的合约规格。两层数据不能混用。

交易成本不只是一项手续费

股票期货的显性成本通常低于股票现货。台湾股票期货交易税率为十万分之四,即0.004%。但低税费不等于低总成本。

总交易成本可以拆成:

\[

C_{\text{total}}

=

C_{\text{commission}}

+

C_{\text{tax}}

+

C_{\text{spread}}

+

C_{\text{slippage}}

+

C_{\text{roll}}

+

C_{\text{financing}}

\]

其中融资成本未必以传统借款利息形式出现,但保证金占用会产生资金机会成本。转仓成本则只在合约切换时出现,却可能成为低频策略的主要损耗。

不同券商的佣金和手续费标准会因政策、账户规模和交易量变化。不能在文章或模型中使用一个对所有账户都成立的固定数值。

成本模型需要和策略频率匹配

高频或日内策略需要把买卖价差按成交方向建模。中低频策略则需要关注:

  • 持仓期间的保证金占用。
  • 到期转仓。
  • 合约流动性变化。
  • 除权息现金调整。
  • 极端行情下的成交偏离。

如果平均每笔交易的预期收益只有几个最小跳动单位,手续费和价差可能直接消除统计优势。即使回测净值曲线平滑,也不能据此判断策略可执行。

建议至少输出以下三组结果:

回测版本成交假设用途
理想成交收盘价或中间价检查信号逻辑
常规成交买卖价差加固定滑点估算普通执行
压力成交价差扩大、逐档成交、转仓成本上升检查策略生存能力

只有第一组盈利,不代表策略有效。第二组接近零,说明成本敏感。第三组大幅亏损,说明策略依赖理想化成交环境。

把检查流程写进系统,而不是写在交易员记忆里

选择股票期货时,最可靠的方法不是人工浏览几个字段,而是建立合约准入规则。

第一步:读取交易所和券商的合约元数据

系统启动时加载:

  • 合约代码。
  • 标的股票。
  • 到期月份。
  • 合约乘数。
  • 最小变动价位。
  • 交易时段。
  • 最后交易日。
  • 初始保证金。
  • 维持保证金。
  • 结算方式。
  • 公司行动调整规则。

缺少任一关键字段,合约进入观察列表,而不是直接进入交易池。

第二步:建立流动性评分

流动性不应压缩成单一成交量排名。可以建立多个维度:

  • 成交量的时间稳定性。
  • 未平仓量的连续性。
  • 平均买卖价差。
  • 盘口深度。
  • 订单规模占平均成交量的比例。
  • 历史平仓失败次数。
  • 临近到期时的流动性变化。

评分的目的不是预测收益,而是排除执行不可行的合约。

第三步:计算名义敞口和保证金占用

对每个候选合约,计算:

\[

V=N\times P\times M

\]

\[

R=\frac{V}{E}

\]

其中:

  • \(N\) 为持仓张数。
  • \(P\) 为期货价格。
  • \(M\) 为合约乘数。
  • \(E\) 为账户权益。
  • \(R\) 为账户名义敞口倍数。

随后加入压力价格,重新计算账户权益和保证金状态。不要把初始保证金当成风险上限。

第四步:锁定到期处理

每个合约都需要一个明确状态:

  • 可开仓。
  • 只允许平仓。
  • 进入转仓观察。
  • 停止新信号。
  • 到期结算。
  • 已完成转仓。

如果系统没有这些状态,临近到期时可能继续开仓,或者在错误合约上发出平仓指令。

第五步:加入公司行动事件

除息和其他公司行动应进入事件日历。事件发生前后,行情、合约规格和账户现金流需要同时更新。

数据库设计上,建议把公司行动作为独立事件表,而不是直接覆盖原始行情。这样可以保留调整前后的完整审计路径。

一个可执行的股票期货筛选框架

可以将候选合约分为五个模块。

流动性模块

检查成交量、未平仓量、价差和盘口深度。筛掉长时间无成交、报价断裂或订单规模明显过大的合约。

规格模块

确认乘数、最小变动价位和单跳盈亏。将每一手的实际名义价值写入交易日志。

保证金模块

计算初始保证金、维持保证金和压力场景下的账户权益。设置最大张数,而不是直接使用券商允许的最大张数。

生命周期模块

记录最后交易日、转仓窗口和远月合约的流动性。策略不得默认连续持有。

结算模块

确认现金结算或其他结算方式。处理除息、除权、拆股、并股和现金调整。所有调整都必须进入损益和现金流。

这五个模块可以形成自动化准入条件:

if liquidity_pass
and contract_spec_pass
and margin_stress_pass
and expiry_rule_pass
and corporate_action_pass:
allow_trade
else:
reject_contract

这里的逻辑不用于预测市场。只用于拒绝结构不完整的交易对象。

股票期货与股票现货:风险结构不同

股票期货通常拥有更低的资金占用和更低的交易税费。它也拥有更复杂的生命周期和更高的保证金敏感度。

参数股票现货股票期货
资金占用通常接近持仓市值主要占用保证金
持有期限没有固定到期日存在最后交易日
杠杆来源融资融券或现金合约保证金
除息处理按现货分红流程按合约规则进行现金调整
结算方式持有股票资产依规则现金结算或交割
平仓风险通常可按市场价格卖出受到合约流动性和保证金影响
合约规格以股数为核心乘数、跳动值、到期日共同决定
转仓需求需要在到期前处理

两者不能只比较手续费。股票期货的成本结构和风险来源不同。低税费可能被滑点、转仓和保证金压力抵消。

常见的五个模型错误

1. 把收盘价当作成交价

这会忽略买卖价差和盘口深度。对低流动性合约尤其危险。

2. 把保证金当作最大损失

保证金只是开仓所需资金的一部分。实际损益按照名义价值和价格变化计算。

3. 把连续合约当作真实合约

连续合约是研究工具。转仓时必须使用两个真实月份合约的实际成交价格。

4. 忽略除息现金调整

只调整价格、不调整现金流,会系统性扭曲收益。

5. 用一个固定成本覆盖所有券商和所有时段

手续费、税费、价差和滑点并不恒定。成本模型至少需要按券商、合约和交易时段拆分。

如果需要进一步理解合约元数据、订单执行与回测引擎之间的关系,可以参考这篇关于量化交易系统架构与回测数据管理的延伸内容。这里不讨论具体策略,只讨论数据如何进入系统。

最终判断:先验证合约,再验证策略

选择股票期货时要检查什么,答案不是一张简单的产品名单。

需要确认的是:这个合约能否成交,成交规模是否可控,单跳盈亏是否匹配账户,保证金压力是否可承受,到期是否有明确转仓路径,除权息是否能正确结算,回测是否使用了真实成本。

顺序不能反过来。

先挑选一只股票,再寻找对应期货合约,容易把方向判断放在结构检查之前。更稳定的流程是先建立合约数据库,再执行流动性筛选、规格校验、保证金压力测试和生命周期管理,最后才把通过筛选的合约交给策略模块。

参数优化也应当保持克制。不要只优化入场周期和止损倍数。应同时测试:

  • 滑点扩大后的净收益。
  • 转仓窗口变化后的结果。
  • 保证金比例变化后的最大回撤。
  • 除息事件缺失时的误差。
  • 不同连续合约拼接方法下的稳定性。
  • 订单规模增加后的成交偏离。
  • 流动性下降后的平仓成功率。

一个不依赖理想成交、不依赖无限持仓、不依赖固定保证金的模型,才有继续研究的价值。

股票期货没有预测上的特殊通道。它只是将价格波动、合约乘数、保证金和到期规则组合在一起。交易系统能否长期运行,首先取决于这些规则是否被准确编码。行情方向排在后面。

常见问题

为什么股票期货回测不能直接使用收盘价?
收盘价回测默认市场拥有无限深度且无买卖价差,这忽略了实际交易中存在的滑点和流动性限制,会导致回测结果严重失真。
未平仓量在股票期货交易中有什么作用?
未平仓量用于评估合约的持仓基础和稳定性,不能作为预测价格涨跌的信号,但可辅助筛选流动性较好的合约。
股票期货的保证金比例低,是否意味着风险较小?
恰恰相反,保证金比例低意味着名义杠杆较高,价格的小幅反向波动就可能导致账户权益触及维持保证金红线,从而引发强制平仓风险。
股票期货到期时会自动转换为股票吗?
不一定。许多主流个股期货采用现金结算,到期时根据标的股票的官方收盘价计算盈亏,直接计入或扣除账户现金,无需交付实物股票。
如何处理股票期货的除息调整?
除息时合约会根据交易所规则进行契约调整,回测时必须同时调整价格序列并记录相应的现金流变动,否则会系统性扭曲收益计算。