Python下单前究竟需要获取哪些资产信息才能避免踩坑

企业微信

为什么下单前非得查资产信息不可

很多人用Python写交易脚本,脑子里只想着“价格到了就买”,结果一运行就报错,或者更惨——单子发出去了才发现保证金不够、股票被冻结、期货合约马上要交割。账户里的资产信息不是摆设,它决定了你这笔单子能不能下、下了之后会不会被交易所拒绝、甚至会不会把整个账户拖进强平名单。

股票和期货的资产信息完全是两套逻辑。股票账户看的是钱和券,期货账户看的是保证金和合约。用Python对接交易接口之前,必须把这些信息一个一个抠出来,塞进下单前的检查清单里。

股票账户下单前必须抓取的五个字段

可用资金和冻结资金

股票是全额交易,买股票得先有钱。券商接口里通常有两个字段:可用资金和冻结资金。可用资金是你现在能立刻用来买股票的钱,冻结资金是挂了买单还没成交被锁住的部分。Python脚本里如果只读总资产,拿冻结资金去下单,接口直接给你返回“可用资金不足”。

下单前用get_account_info()这类函数把可用资金拉出来,跟你要买的金额比一下。买多少股乘以当前价,再加上手续费,必须小于等于可用资金。手续费别漏了,印花税和过户费虽然不多,但脚本里算漏了,小资金账户真能因为几毛钱被拒单。

Python下单前究竟需要获取哪些资产信息才能避免踩坑

持仓数量和可卖数量

卖股票的时候,持仓数量不等于可卖数量。A股是T+1,今天买的股票明天才能卖。当天买入的持仓在“当前持仓”里能看到,但“可用数量”是零。Python下单前得单独取可卖数量,否则你看着持仓里有1000股就挂卖单,接口告诉你可卖0股。

还有一种情况是股票被质押或者被司法冻结,持仓数量在,可卖数量也是零。脚本里不查这个字段,卖单发出去就是废单。

股票当前状态是否正常

停牌、退市整理期、风险警示板,这些状态直接决定股票能不能交易。接口里一般有交易状态字段,或者用代码前缀判断。ST股票涨跌停幅度是5%,科创板创业板是20%,主板是10%。Python下单前得把涨跌停价算出来,挂在涨停价以上的买单是废单,挂在跌停价以下的卖单也是废单。

涨跌停价不是简单用昨收乘以1.1,交易所规则是四舍五入到分。脚本里自己算容易出错,直接从接口取涨停价和跌停价字段最稳。

交易单位和最小价格变动

A股买入是100股起步,卖出可以零股。科创板是200股起步,而且可以1股递增。Python下单前得知道这只股票的交易单位,挂个150股买单到主板股票上,接口直接报错。

最小价格变动单位也要查。股票是0.01元,但可转债是0.001元,基金是0.001元。价格字段多写一位小数,交易所照样拒单。

交易费用和过户费

股票交易费用包括佣金、印花税、过户费。佣金各家券商不一样,印花税卖出收千分之一,过户费沪深两市都收。Python脚本里要算清楚这笔单子的总成本,不然买入信号触发时,账户里钱刚好够买股票但不够付手续费,单子照样废掉。

期货账户下单前必须抓取的六个字段

合约乘数和最小变动价位

期货跟股票最大的区别是杠杆。你下的单子不是多少股,是多少手。每手对应多少数量的标的物,就是合约乘数。螺纹钢一手10吨,沪铜一手5吨,股指期货一手300元每点。Python下单前不查合约乘数,算出来的保证金和盈亏全是错的。

最小变动价位决定你报价能不能被交易所接受。螺纹钢最小变动1元每吨,你报个3500.5,接口直接拒绝。脚本里得用合约信息里的最小变动价位把价格对齐。

保证金率和交易所保证金

期货是保证金交易,下单前必须确认账户里的可用资金够不够开仓保证金。保证金率分交易所标准和期货公司加收部分,通常期货公司会在交易所基础上加几个点。Python接口里取到的保证金率是实际生效的那个,别自己拿交易所公告的费率去算,算出来偏小,下单就爆仓。

可用资金减去开仓保证金之后,还得留出足够的手续费。期货手续费有按手收的,有按成交金额比例收的,平今仓手续费有时候还翻倍。脚本里不查手续费标准,频繁交易的小账户能被手续费吃光。

持仓方向和锁仓情况

期货账户里同一个合约可能同时有多头和空头持仓,这叫锁仓。Python下单前得查清楚当前持仓方向、手数、开仓均价。想平仓的时候,得指明是平今仓还是平昨仓,不同交易所规则不一样。上期所的平今仓手续费高,大商所和郑商所很多品种平今仓免费。不查这个字段,平仓指令发出去可能变成开反向仓。

合约到期日和交割规则

期货合约有生命周期,个人客户不能参与实物交割。Python脚本里必须查合约的到期日,临近交割月的合约会被交易所提高保证金比例,限制开仓。不查到期日,脚本在交割月前一个月还在正常开仓,交易所直接限制你只能平仓。

最后交易日和交割日是两个概念。商品期货最后交易日之后还有交割日,股指期货最后交易日就是交割日。脚本里得把这两个日期都取出来,提前几天停止开新仓。

涨跌停板和熔断规则

期货也有涨跌停板,幅度按合约不同。股指期货熔断规则跟商品期货不一样,Python下单前得查合约的涨跌停幅度。报价超出涨跌停范围的单子会被交易所拒绝。有些品种连续三个交易日同方向涨跌停会扩板,脚本里不动态读取这个信息,扩板之后你的挂单价格可能就失效了。

交易时间和夜盘品种

期货有日盘和夜盘,不同品种夜盘时间不一样。Python脚本里如果不查合约的交易时间段,在非交易时间发单,接口直接拒绝。夜盘品种的集合竞价时间和连续交易时间也得区分清楚。脚本下单前读取合约的交易时间表,跟当前系统时间比对,不在交易时段里就跳过。

把这些检查写进Python脚本的骨架逻辑

下单前把资产信息检查做成一个独立函数,股票和期货各一套。股票函数返回可用资金、可卖数量、涨跌停价、交易单位、手续费估算。期货函数返回可用资金、合约乘数、保证金率、持仓方向、到期日、交易时间段。每次下单信号触发,先跑一遍检查函数,所有字段都通过再发单。

这样写的好处是废单率直线下降,脚本跑起来不会因为某个字段没查到就中断。账户里的钱和持仓状态随时在变,每次下单前重新拉一遍数据,别用缓存。行情接口和交易接口的资产信息可能有延迟,以交易接口返回的为准。

Python交易脚本的稳定性不取决于策略多聪明,取决于下单前那些枯燥的资产信息检查有没有做全。股票查钱查券查状态,期货查乘数查保证金查到期日。漏一个字段,轻则废单重则爆仓,账户里的真金白银不会给你第二次机会。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/Python-jiaoyi-1290.html