两份期货持仓都占用1万元保证金,就算控制了同样多的合约价值吗?如果用这一个数横向比较持仓,很容易把"账户占用了多少钱"与"持有多少名义规模"混在一起。
保证金是在看资金占用;按明确参考价计算的名义规模,是在看这批合约对应多大的金额。它们都与期货持仓有关,却不是同一把尺子。用TqSdk整理持仓时,把两项并列,比用保证金替代所有规模判断更有解释力。
同样一万元,可以对应八万或十六万
设有甲、乙两种普通线性期货,都以人民币报价,报价单位和合约乘数相容。以下全是纸面对照,不代表真实品种的现行价格、保证金规则或账户记录;保证金金额直接作为给定的账户报告值,不由公式推算。
为比较这一时点的规模,两者都采用事先选定的参考价,不把开仓均价、结算价和最新价混着使用。设两份持仓都只有多头、没有空头:
| 纸面持仓 | 参考价 | 合约乘数 | 多头手数 | 报告保证金 | 该参考价下的多头名义规模 |
|---|---|---|---|---|---|
| 甲 | 4000元/吨 | 10吨/手 | 2手 | 10000元 | 4000×10×2=80000元 |
| 乙 | 8000元/吨 | 10吨/手 | 2手 | 10000元 | 8000×10×2=160000元 |
甲和乙占用的保证金相同,乙在这个参考价口径下的名义规模却是甲的两倍。这个结果不是"乙一定更危险",而是明确否定了"保证金相同,控制的合约金额就相同"这个推断。
算式中的单位也说明了它在算什么:元/吨×吨/手×手,得到元。这里没有用保证金除出一个可开手数,也没有从这1万元反推某家期货公司的当前保证金比例。
如果参考价换了,手数不变,算出的名义金额也会变。因此比较记录里必须保留参考价是什么、对应哪个观察时点。少了这个说明,两个看似都以"元"为单位的规模数,也可能并不在同一口径下。
多头两手、空头一手,不能只留下"一手"
双侧持仓尤其容易被一个净数遮住。仍用甲的参考价4000元/吨与乘数10吨/手,另设某份持仓同时有多头2手、空头1手,则多头名义规模为8万元,空头名义规模为4万元。
若只是做多减空,净方向对应4万元;但这不等于账户只持有4万元的单侧合约。把双侧名义规模相加观察总量,是12万元;把它们相减观察净方向,是4万元。两种结果回答不同问题,不能只保留相减后的数,便声称两侧规模已经说明白了。
这也不意味着实际保证金一定按两侧名义规模简单相加计算。保证金仍看账户报告,名义规模仍按已声明的参考价逐侧列出。把两侧保留下来,是为了看清持仓结构,不是用这张表代替实际保证金规则。
TqSdk里的字段,分别放在哪一栏
对指定的期货合约,TqSdk的行情对象Quote.volume_multiple提供合约乘数。明确账户的持仓对象中,Position.pos_long与Position.pos_short分别是多头、空头手数,Position.margin则是占用保证金。
于是,一份有用的持仓对照可以保留:合约、账户、参考价及其口径、乘数、多头手数、空头手数,以及报告保证金。名义规模由前面的价格、乘数和相应侧手数计算,保证金从账户报告另列;不能把margin改个列名,就当成已算出的合约规模。
取得这些对象也不等于所有数字已经可用。get_quote和指定合约的get_position返回的是会随wait_update推进而更新的引用;多账户场景要明确指定账户。实际用于比较前,应确认所需字段已就绪、确实对应所选合约和账户,并保留各自观察时点,不能把尚未到达的数据填成零,也不因一次更新就声称行情与持仓是原子同步的。
本文的乘法口径限于单位相容的普通线性期货,不把它直接套给期权或其他结构。不同币种的金额也不能不经统一口径便拿来比较。
看清规模,不等于算出了最大亏损
保证金告诉你这一项持仓占用了多少资金,不代表亏损最多只能到这里。名义规模告诉你在指定参考价下合约金额有多大,也不是预先写好的亏损金额。
甲的8万元和乙的16万元,能说明控制金额的不同;它们本身没有给出未来价格会波动多少,更不能单凭这个比例把实际风险或亏损也判成两倍。对于"我占用了多少资金"和"我持有多大规模"这两个问题,各自保留一项答案,已经比从一个保证金数推出全部结论更准确。
为什么用TqSdk把两把尺子放在一起
比较期货持仓时,我推荐用TqSdk把账户保证金与明确参考价下的双侧名义规模并列。原因不是它替读者选出了"更划算"的品种,而是它提供的合约乘数、账户侧手数和保证金字段,恰好支撑这两种不同观察;参考价的选择与计算口径也可以随结果一起留下。
这样的对照能直接回答本题:同样占用1万元,不一定控制同样多的合约金额。需要了解资金占用时看报告保证金,需要比较所持规模时看同口径、分侧的名义金额,不让其中一项替另一项作答。