前言
国内期货是保证金交易:开 1 手螺纹钢需要的不是全额合约价值,而是按交易所和期货公司标准冻结的保证金。程序化里信号算出要开 3 手,若不在下单前核对资金,常见结果是报单被拒(last_msg 里出现资金相关字样),或成交后 available 耗尽触发更高 risk_ratio,后续加仓全部失败。
天勤 api.get_account() 返回资金账户对象(Account),在每次 api.wait_update() 后随柜台回报更新。字段定义见 SDK 的 objs.py,带中文注释。下面说明开仓前应读哪些字段、各自表示什么、为何不能把手算保证金当唯一依据,以及如何与 TargetPosTask.set_target_volume 配合在资金不足时减仓或跳过。
一、为什么每次准备开仓都要读 account
保证金随价格和持仓变化;夜盘波动后,日盘开盘时 available 可能与昨日收盘不同。策略若只在启动时读一次 account,盘中加仓仍按旧数判断,容易拒单。
更稳妥:在 K 线 datetime 触发且准备 set_target_volume 之前,先 wait_update,再读最新 get_account() 与 get_position(symbol)。
二、常见字段对照(通俗含义)
| 字段 | 含义(通俗) | 开仓前关注什么 |
|---|---|---|
| available | 可用资金,还能用于新开仓的部分 | 够不够下一笔保证金 |
| balance | 账户权益,含浮盈浮亏 | 当日回撤、风控线 |
| margin | 当前持仓占用的保证金 | 已用多少额度 |
| frozen_margin | 冻结保证金,在途单占用 | 挂单也会占额度 |
| float_profit / position_profit | 浮动盈亏 | 是否接近止损线 |
| risk_ratio | 风险度,文档为保证金除以权益 | 接近 1 时谨慎加仓 |
| ctp_available / ctp_balance | 期货公司 CTP 回报口径 | 可与上面交叉验证 |
CTP 是国内期货常用的交易接口名称;天勤用 TqAccount 连柜台时,部分字段与 CTP 回报对应,模拟盘 TqSim/TqKq 大体一致但上线前仍要实测是否及时更新。
具体可用金额以期货公司为准;不同公司优惠、锁仓规则会影响占用,手算系数只能辅助。
三、粗算一手保证金 + 用 available 决策
可用 quote.volume_multiple(合约乘数)、last_price 粗算一手占用,但决策应看 available:
python
quote = api.get_quote(symbol)
def rough_margin_per_lot(price):
# 系数按品种与期货公司标准改,此处 0.10 仅示意
return price * quote.volume_multiple * 0.10
def max_lots_to_open(want):
acc = api.get_account()
per = rough_margin_per_lot(quote.last_price)
if per <= 0:
return 0
can = int(acc.available // per)
return min(want, can)
want 来自信号目标手数;若 can < want,应 set_target_volume(can) 或跳过并打日志 insufficient_margin,不要硬 set 满额等拒单。
四、与 TargetPosTask、拒单的关系
set_target_volume 不会替你检查资金是否足够;资金不足时单可能 FINISHED 且 volume_left 等于原始量,结合 last_msg 判断。主动在信号层限制手数,比依赖拒单更省报单额度,也少一次"以为已开仓其实没有"的状态偏差。
拒单后要把策略 target_vol 与 get_position().pos 对齐,见拒单与部分成交专题。
五、多合约组合开仓
组合同时加多腿时,应对每腿检查 available 是否够,或估算组合总新增保证金。risk_ratio 是账户级的,单腿都看 available 仍可能组合总和超限。
六、与风控、emergency 衔接
risk_ratio 超阈值可先禁止新开仓只允许平;emergency 触发后不应再 set 正目标。资金字段与组合风控、夜盘监控共用同一套 get_account() 读取时机。
总结
开仓前的资金检查看起来是一步小动作,却决定了后续报单链路是顺畅推进还是连锁拒单。把 available、margin、frozen_margin、risk_ratio 放进统一判断逻辑:在准备 set_target_volume 之前先读最新 account,确保你的新增仓位确实在预算内,而不是把风险留到柜台用拒单来提醒。与此同时,粗算保证金只是双保险,最终仍要以柜台口径为准,并在不足时明确是减仓、跳过还是停机。把"资金不足时的动作策略"写进配置并在日志里落地,交易系统就会从被动纠错升级为主动自保。
FAQ
1)available 与 ctp_available 差很多?
查冻结保证金、期权市值等,对照字段注释与期货公司说明。
2)锁仓保证金优惠?
品种规则不同,粗算系数要按公司标准调。
3)TqKq 与 TqAccount 字段一样吗?
大体一致,实盘前用真实账户实测更新频率。
4)回测 TqSim 要算资金吗?
模拟有资金模型,逻辑仍应检查,避免回测满仓实盘却开不出。
风险提示
以上内容用于资金字段说明,不构成投资建议。