Broker API 常见问题
机器翻译译自英文(docs.alpaca.markets)本页 125 段已全部译完
Broker API 与 Trading API 的区别
Trading API 和 Broker API 之间有什么区别?
Broker API 旨在支持经纪交易商、RIA 以及交易/投资应用的不同用例,在此处查看更多。
相反,Trading API 旨在让零售用户和算法交易者与 Alpaca 的经纪服务通信,在此处查看更多。
Trading API 和 Broker API 的认证方式不同吗?
是的,客户端向 Broker API 进行认证的方式与 Trading API 不同。
使用 Broker API 时,你需要对密钥进行编码,并传递如下所示的认证头:
Authorization: Basic <base64 encoded keys>
使用 HTTP 基本认证的同一 Broker API 凭证可用于访问 Market Data API,如此处所述。
账户
账户交易中的值何时更新?
所有不带“last_”前缀的值都会在交易执行和公司行动活动后实时更新。它们也可能在交易时段之外更新,例如交易后结算和 REG/TAF 费用计算。
资产
Assets API 中的 Tradable 和 Status 布尔值有什么区别?
资产
这里有一些需要考虑的场景:
tradable=true 且 status=active
这是大多数上市股票的场景。例如 Apple Inc.。这意味着它可以交易——可以对该股票进行 BUY 和 SELL。
tradable=false 且 status=active
这是少数几种我们不允许新建开仓交易、只允许平仓交易的情况之一。这通常发生在某资产从美国证券交易所退市并在场外交易时。
tradable=false 且 status=inactive
这是一个可以在公司退市期间实现的场景。如果股票退市,则不可交易,这意味着我们既不允许对该特定股票下达 BUY 订单也不允许 SELL 订单。退市股票要么被自动清算,要么通知用户在特定时间内平仓。
OTC 股票代码可以交易吗?
可以,你始终可以平掉任何未平仓头寸。
OTC 代码在市场数据中可用吗?
不能。OTC 市场数据要求合作伙伴直接与 OTC Markets 签订协议。一旦完成,我们就可以为合作伙伴启用该功能。
在 Assets API 中是否有办法区分股票和 ETF?
Alpaca 目前不支持对股票和 ETF 进行分类。合作伙伴需要使用名称和代码自行分类。
Alpaca 多久刷新一次资产主数据?
Alpaca 每天刷新资产主数据 3 次。这 3 次刷新时间都在交易时段之外,最后一次刷新安排在美东时间上午 8:20。如果你在本地存储资产列表,我们建议至少每天从 Alpaca 刷新一次,最好在美东时间上午 8:20 之后、上午 9:30 之前。
事件
可同时保持多少个 SSE 连接存活?
最多允许 25 个连接请求。超过后你将收到*“Too many requests”*错误。
SSE 连接会在多久后关闭?
没有这样的时间。Alpaca 永远不会停止响应,因此我们还会发送“心跳”来让合作伙伴知道连接仍然存活。有时连接会被客户端网络在不知情的情况下关闭,或者发生网络错误。尽管如此,你始终可以在特定事件后使用 since_id 或 since 重新打开并请求数据。
SSE 的用例是什么?
当你想要获取某个交易状态更新而不发出多个 HTTP 请求时,服务器发送事件可能很有用。打开连接时,Events 端点将返回多个响应,也可以以 RESTful 方式使用,以确保你没有错过任何事件。
- 账户状态更新 - Subscribe to Account Status Events (SSE)
- 交易更新 - Subscribe to Trade Events (SSE)
- Journal 更新 - Subscribe to Journal Events (SSE)
- 任何转账事件 - Subscribe to Transfer Events (SSE)
- 任何相关的非交易活动 - Subscribe to Non-Trading Activities Events (SSE)
速率限制
Broker API 速率限制是否以固定数字公布?
不是。Broker API 限制在对应方级别应用,并根据已证明的使用情况设置,因此 Alpaca 不公布固定数字。请参阅速率限制。
我如何知道我的速率限制还剩多少?
每个 Broker API 响应都包含 X-RateLimit-Limit、X-RateLimit-Remaining 和 X-RateLimit-Reset 头——在所有响应中都有,而不仅仅是 429 响应。关注 X-RateLimit-Remaining,并在它接近零之前放慢速度。
当收到 HTTP 429 Too Many Requests 时,我该怎么办?
停下来,等待,并使用指数退避(带抖动)重试,最好在 X-RateLimit-Reset 中的时间之前不要重试。在许多情况下,429 最好在客户端解决(重试策略或批处理),而不是通过提高限额。
沙盒和生产环境的速率限制相同吗?
不是。沙盒限制远低于生产环境。沙盒用于功能测试,因此你在那里看到的速率限制并不代表生产环境的余量。
我可以针对沙盒进行负载测试吗?
不能。Sandbox 用于功能测试,其速率限制远比生产环境严格,因此在那里进行负载测试会触及它在生产环境中不会触及的限制,并给出误导性的结果。相反,让你的集成中的 Alpaca 调用可打桩/可模拟,并针对桩进行负载测试,模拟从真实生产调用中采样的延迟。
如何申请更高的速率限制?
联系 Alpaca 并具体说明原因:用例、预期的每分钟峰值请求数以及流量的时间模式。增加额度将根据已证明的需求进行审核。
市场数据
Market Data API 是否支持公司行动调整?
可以,价格调整在市场数据中可见,你只需确保调整参数设置为 all。K 线的可用查询参数可在此处找到 - Historical bars
Market Data API 是否支持本地货币?
可以。你可以以支持的本地货币检索历史市场数据。
文档
Alpaca 及其合作伙伴如何处理交易确认和账户对账单?
- 两者都需要通过电子邮件发送给用户,并在 BCC 中放入 auto-archive-bd@mailer.alpaca.markets。
- 电子邮件应包含截断的 alpaca 账户号以及在 Statement and Confirms Document 中提及的语言。
- 如果共享自定义对账单或确认单,在这种情况下,合作伙伴必须允许用户访问 Alpaca 生成的原始对账单和确认单。
这些文档何时可用?
每日交易确认在 BOD 作业完成后(美国东部时间凌晨 02:15-02:30)的次日提供。
月度对账单在下个月第一个周末之后可用。
我如何检索这些文档?
使用 type 为 account_statement 或 trade_confirmation 查询上述端点。
我可以找到 W-8 Ben 表格样本吗?需要填写哪些详细信息?
可在此处找到。
上传 W8-Ben 时,我收到 400 错误(request body format is invalid: JSON: cannot unmarshal object into Go value of type entities.BrokerAccountDocumentUploads)。这是预期行为吗?
可以,请求体是一个文档数组,请确保使用方括号,如示例响应所示 Documents | Alpaca Docs。
账户划转
JNLC 或 Journal 通常需要多长时间?
大多数情况下,JNLC 非常快,基本是即时的,执行完成前的平均延迟不到一秒。
超过下面提到的限制时可能会有几个小时的延迟。
较大金额的 JNLC 在次日执行。这是预期行为吗?
可以。我们有一个称为 JNLC 交易限额的限制。这是你可以即时划转的最大金额。任何大于此金额的 journal 都将作为次日 BOD 作业的一部分执行。默认值为 50 美元。
这是一种保护机制,用于防止任何用户进行大额提款,也防止合作伙伴进行此类操作。这是一个“可配置”的值,在 Sandbox 中可以设置为任何值,但在 PROD 中需要讨论。
还有一个 JNLC 每日限额,即一天内所有 JNLC 的总和。如果限额为 1000 美元(默认限额),你可以进行 10 笔各 100 美元的交易,但第 11 笔将无法通过。这是一个“可配置”的值,在 Sandbox 中可以设置为任何值,但在 PROD 中需要讨论。
我能否订阅 journal 状态流,而无需反复检查?
绝对可以。你可以监听 journal 服务器发送事件。- Events | Alpaca Docs
JNLS 的用例有哪些?
JNLS 通常由我们的合作伙伴用于奖励在平台上注册的用户。
JNLS 的方向和流向是什么?
JNLS 只能从 SWEEP ACCOUNT 到 USER ACCOUNT 进行,不能反向进行。一旦完成,就无法退回。
JNLS 交易限额是否可按账户配置?
可以,它们是可配置的。
JNLS 交易限额是按账户以美元计还是以股票计?
它们以美元为基础。
交易
订单
最低订单金额是多少?
所有买入订单的最低市场价值必须为 1 美元,否则请求将以 422 被拒绝。卖出订单没有此验证,因此你可以平掉任何未平仓头寸。
订单请求体中 notional 和 qty 的精度是多少?
发送订单时,notional 最多应使用 2 位小数,qty 最多应使用 9 位小数。
OCO 的订单类型只允许限价单。此规则是否适用于 OTO?
不能。OCO 实现了订单取消,因此取消市价单可能非常困难。而在 OTO 的情况下,这不是问题,因此 market 和 limit 两种订单都允许!
OCO 支持订单替换以更新 limit_price 和 stop_price。
我们是否也可以更新数量?是否可以使用名义金额而不是数量?
可以,你可以使用此 API 在修补订单时更新数量 - Orders | Alpaca Docs。
不能,你不能使用名义金额。原因是 Alpaca 目前不支持对notional 订单使用 LIMIT 订单,而由于 OCO 订单只能是 LIMIT 订单,因此必须使用数量。
哪些订单可以取消?
在尝试取消订单之前,我们会检查订单是否处于“open”状态。我们认为处于 open 状态的状态包括:
- 已接受
- 新建
- 部分成交
- 已计算
- 待新建
- 待取消
- 已接受竞价
如果订单处于这些状态之一,你应该会收到 204(除非发生服务器错误),否则你将收到 422,如文档中所述。要检查订单是否实际已取消,我建议你在 trades SSE 或通过 REST 端点检查其状态。
交易结算
为什么卖出股票后 cash_withdrawable 和 cash_transferable 没有增加?
结算发生在订单执行日之后的一个工作日,即 T+1(交易日加一个工作日)。例如,如果你在周一执行订单,通常会在周二结算。cash 在 SELL 交易成交后更新,但 cash_withdrawable 和 cash_transferable 在 T+1 之后更新。
交易股票时预计会产生哪些费用?
REG 和 TAF 费用
每次执行 SELL 订单时,都会向用户账户收取此费用(REG 和 TAF 分别收取)。这是由 Alpaca 收取的,但它是来自 FINRA 和 SEC 本身的过手费用,这些费用在卖出订单上向 Alpaca 征收。REG 和 TAF 费用会定期调整费率。更多相关信息可以阅读我们联合创始人的博客 - REG/TAF Fee Updates with Alpaca
ADR 费用
大多数 ADR 每年一到两次按每股收取 0.01 至 0.03 美元的费用,以支付运行 ADR 计划相关的行政成本。 根据存托银行运行 ADR 计划的方式,ADR 费用的收取频率可能更低。
在我们被存托机构收取费用后,通常每月向客户收取一次 ADR 费用。收费的记录日期通常是实际收费日期的前一个月。即使客户此后已清算其股票,如果他们在记录日期持有股票,仍将被收取 ADR 费用。
舍入规则
如果计算出的费用低于一美分,我们将不收取 ADR 费用。但是,如果金额超过一美分,我们始终会向上舍入到下一个最高的一美分。例如,如果费用为每股 0.02 美分,而客户拥有 10.1 股,我们将向客户收取 0.21 作为 ADR 费用。
再平衡
在使用 Rebalancing API 时,我可以进行手动交易吗?
如果账户订阅了投资组合,则无法执行手动交易或手动再平衡运行。不过,你可以删除订阅以执行手动交易或再平衡运行。
我如何查看由再平衡事件触发的订单?
你可以使用此端点轻松检索所有运行记录或按 ID 检索特定运行记录,其中每次运行都会包含一个数组,列出所有已执行的订单以及失败或被跳过的订单。
重要链接与阅读材料
- Alpaca 每日流程与对账 - Daily Processes and Reconcilations
- 保证金 - Margin and Short Selling
- 了解订单与订单有效期 - Orders at Alpaca