Agent Skills
返回列表
⚖️

Alpaca 券商金额精度

行业专业 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/alpaca-broker-money-precision-sh-r1uewy。

技能介绍

问题:金融代码里的精度错误很少在测试环境暴露

当你把 100.50 经 JSON 解析成二进制浮点,显示可能还是 100.5,但累加、分拆、换算后就开始漂移。Alpaca 的交易与资金路径对这种偏差没有耐心:一次 float 参与的资金流转,可能导致多转出几美分、审计对不上、或下单时被 API 拒绝。真正麻烦的是,有些字段看起来像数字,却承担着不同职责。

这个技能如何工作

它没有抽象的“金额规范”,而是给出几条可执行的约束:

  • Money 字段保持字符串进出,解析为 decimal。无论 Python、TypeScript、Go 还是 Java,进入资金路径的值必须是十进制类型;序列化回去时再转成字符串,别让 IEEE-754 浮点参与。
  • 发送前显式舍入或截断,并选好舍入方向。现金金额通常保留两位小数,小数股份额与名义金额最多九位。转出或收费金额应向下截断(round down),避免多移动一分。
  • 中间计算也要重新取整。当你用 amount * percentage 分拆资金时,每步都可能导致精度回归;只在最终输出时修正是不够的。
  • 小数股不要自己反算。给 Alpaca 传 notional,让它算成交数量;如果你从自己取回的价格反推 qty,漂移就会进入订单。

存储与边界

数据库里应该用定点小数,例如 DECIMAL(20, 8),留出比 Alpaca 现金精度更多的余量。同时把 Alpaca 返回的原始字符串按原样存一份,这样你向 API 发送时截断了精度,审计时仍能对照原始值。

注意点:并非所有 Alpaca 端点都一致,行情数据的 OHLC 等字段可能是 JSON 数字,用于展示或分析时用浮点通常可以接受;但任何你实际移动、存储或用于决策的钱,都不允许走二进制浮点路径。涉及多币种的 funding wallet 尤其如此,它会携带汇率费用,不能假设所有金额都是 USD。

最后,这个技能不是全栈金融库,而是一张精度红线图。它假设你已经理解 Broker 的交易、转账与对账边界,并在这些流程里保持字符串、十进制、显式舍入和币种跟踪。

使用场景

  • 在把 Alpaca 返回的 notional 和 qty 存入数据库时,需要用定点小数保存原始字符串,并保留 DECIMAL(20,8) 精度余量。
  • 在向 Alpaca 发送转出金额前,需要显式向下截断到两位小数,避免发送浮点格式化后的多余精度。
  • 在分拆资金(如 amount × percentage)时,需要每次中间计算后重新取整,而不是只在最终结果修一次。
  • 在对接 Alpaca funding wallet 多币种到账时,需要读入并存储币种字段,且全程用 decimal 处理 FX 金额。

适合人员

  • 正在集成 Alpaca Broker API 的后端工程师,需要确定金额字段用 string、decimal 还是 float,并写出可审计的存储层。
  • 负责券商对账与审计数据的后端开发者,需要把 Alpaca 返回的原始字符串存下来,同时生成截断后的发送版本。
  • 管理订单与资金流一致性的技术负责人,需要在 fractional share 订单里决定传 qty 还是 notional,并避免从价格反推数量。
  • 对接 USD/EUR/JPY 等多币种 funding wallet 的开发者,需要处理汇率费用和十进制金额,不能假设所有金额都是美元。