跳转到内容

金额

MonetaryAmount 表示按金额分配。它关注每个子账户承担的名义金额,而不是直接指定股份数或合约数。

场景是否适合
多个账户希望投入接近固定金额适合。
股票价格较高,数量需要自动换算适合,但要接受舍入。
必须精确控制每个账户股数不适合,考虑按股份或合约数。
期权、期货等有乘数产品需要额外校验合约乘数。
def estimate_quantity(target_amount, limit_price, multiplier=1):
# 这是下单前估算,最终分配以 TWS 为准。
if limit_price <= 0 or multiplier <= 0:
raise ValueError("价格和乘数必须大于 0")
return target_amount / (limit_price * multiplier)

股票通常可以把 multiplier 理解为 1。期权、期货、指数衍生品不能这样简化,必须从合约详情里读取乘数。

账户 A 目标金额: 1000 USD
账户 B 目标金额: 2000 USD
限价: 50 USD
估算数量: A 约 20 股,B 约 40 股

实际结果还会受最小交易单位、价格变化、保证金和账户购买力影响。

order.faGroup = "Group_Amount"
order.faMethod = ""
order.faPercentage = ""

faGroup 必须匹配 TWS 中已有的 FA 组。金额分配的具体账户金额通常来自 FA XML 配置,订单代码不要脱离 XML 单独假设账户顺序。

错误后果
用最新价估算,实际限价不同分配金额偏离目标。
忽略合约乘数期权或期货数量严重错误。
订单数量太小舍入后部分账户可能没有分配。
未检查购买力某个账户可能被拒绝。