
股票自动交易里的交割日到底怎么算
很多刚接触股票自动交易的朋友,第一次看到“交割日”这个词就懵了。下单是机器干的,成交也是机器确认的,那交割到底是谁跟谁交?钱和股票什么时候真正到账?
先把股票交割的本质说清楚。股票交易的交割,不是把股票从一个人手里搬到另一个人手里,而是交易双方完成资金和证券的最终划转。A股实行的是T+1交割制度。T就是你成交的那一天,T+1就是成交后的下一个交易日。你在周一买入一只股票,周一当天股票会显示在你的持仓里,但你不能在周一卖出,因为交割还没完成。到了周二,交割完成,股票真正归属你,你才能卖出。卖出后的资金也是T+1到账,周二卖出,周三资金可用可取。

股票自动交易程序不需要你手动计算交割日,券商系统会自动处理。但程序里有一个坑:如果你的策略做的是日内高频回转交易,在A股T+1规则下根本跑不通。机器下单再快,当天买的股票当天卖不掉。很多回测数据漂亮的日内策略,实盘一跑就亏,根本原因就是策略逻辑里没有把T+1交割规则写进去。程序判断“当前持仓可卖数量”时,必须调用券商接口返回的“可用数量”,而不是“总持仓数量”。总持仓是静态的,可用数量才是扣除了T+1冻结之后的真实可卖数字。
期货交割日比股票复杂得多
期货的交割日不是统一固定的,每个品种有自己的交割月份和最后交易日。螺纹钢期货最后交易日是合约交割月份的15号,遇到法定节假日顺延。铁矿石期货最后交易日是合约交割月份前一个月的最后一个交易日。原油期货最后交易日是交割月份前一月的最后一个交易日。这些规则写在交易所的合约细则里,程序化交易必须提前把这些日期做成硬编码的日历表,不能靠自然月去推算。
个人投资者做期货自动交易,最要命的问题是:你根本没有资格参与实物交割。商品期货到了交割月,交易所会强制提高保证金比例。螺纹钢进入交割月前一个月,保证金可能从10%提到20%,进入交割月再提到30%甚至更高。如果你没有在最后交易日前平仓,交易所会直接给你强行平仓,强平的亏损和手续费全部由你承担。更严重的是,如果被判定为恶意持仓进入交割月,交易所可以没收你的保证金。
程序化交易怎么处理这个问题?两种做法。第一种是移仓换月,在主力合约快要进入交割月之前,把仓位从近月合约挪到远月合约。程序里写一个判断逻辑:当近月合约距离最后交易日小于N天,或者近月合约的成交量小于远月合约成交量的某个比例时,触发移仓指令。第二种是直接平仓,不参与移仓,等新主力合约形成之后再重新开仓。这两种做法都需要在策略代码里显式处理,不能指望券商或期货公司帮你自动完成。
自动交易程序里交割日模块怎么写
程序化交易的交割日判断,核心是两张表。一张是交易日历表,里面存着所有品种的最后交易日和交割日。另一张是持仓合约表,记录你当前持有哪个合约、仓位多少、保证金占用多少。
每次策略运行之前,先跑一遍交割检查逻辑。检查内容分三层。第一层,当前持仓合约距离最后交易日还有几天。如果小于安全阈值,比如5个交易日,就发预警信号。第二层,当前合约的保证金比例是否被交易所提高。期货公司会在交易所基础上再加几个点,程序必须用期货公司实际收取的比例来计算可用资金。第三层,当前合约的流动性是否充足。临近交割月的合约,买卖价差会拉大,成交量萎缩,程序化下单容易滑点。流动性指标可以用盘口买卖五档的挂单量来衡量,挂单量低于某个阈值就触发移仓。
有人会问,程序能不能根据交易所公告自动更新交割日?理论上可以,交易所每天盘后发布参数文件,程序可以抓取解析。但绝大多数个人程序化交易者没有这个开发能力,最稳妥的办法是每个季度手动更新一次交易日历,把节假日顺延的情况提前标注好。
股票自动交易和期货自动交易的交割差异对策略的影响
股票T+1交割决定了A股程序化策略不能做真正意义上的日内。那些号称做T+0的股票策略,本质上是底仓T+0,也就是你手里已经有一批股票,程序在盘中做低买高卖,但买卖的数量不能超过底仓数量。没有底仓的日内策略,在A股T+1规则下无法执行。
期货实行T+0,当天开仓当天可以平仓,交割日的影响主要体现在近月合约上。做趋势跟踪的策略通常只用主力合约,主力合约距离交割月还有两三个月,交割日的影响暂时可以忽略。做跨期套利的策略,必须同时持有近月合约和远月合约,近月合约临近交割日时价差波动会剧烈放大,程序需要提前减仓或者移仓。做期现套利的策略,到了交割日附近反而要主动进入交割流程,因为期货和现货的价差要在交割环节收敛。
程序化交易最大的优势是纪律性,但纪律性必须建立在正确的规则认知之上。交割日规则搞错了,再好的策略也会被强平或者罚没保证金。把交易日历做对,把可用数量算准,把保证金比例留足,这三件事做到位,自动交易才能稳定运转。