Skip to main content

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 方式使用,以确保你没有错过任何事件。

  1. 账户状态更新 - Subscribe to Account Status Events (SSE)
  2. 交易更新 - Subscribe to Trade Events (SSE)
  3. Journal 更新 - Subscribe to Journal Events (SSE)
  4. 任何转账事件 - Subscribe to Transfer Events (SSE)
  5. 任何相关的非交易活动 - 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 及其合作伙伴如何处理交易确认和账户对账单?

  1. 两者都需要通过电子邮件发送给用户,并在 BCC 中放入 auto-archive-bd@mailer.alpaca.markets。
  2. 电子邮件应包含截断的 alpaca 账户号以及在 Statement and Confirms Document 中提及的语言。
  3. 如果共享自定义对账单或确认单,在这种情况下,合作伙伴必须允许用户访问 Alpaca 生成的原始对账单和确认单。

这些文档何时可用?

每日交易确认在 BOD 作业完成后(美国东部时间凌晨 02:15-02:30)的次日提供。

月度对账单在下个月第一个周末之后可用。

我如何检索这些文档?

文档 | Alpaca 文档

使用 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 检索特定运行记录,其中每次运行都会包含一个数组,列出所有已执行的订单以及失败或被跳过的订单。

重要链接与阅读材料

  1. Alpaca 每日流程与对账 - Daily Processes and Reconcilations
  2. 保证金 - Margin and Short Selling
  3. 了解订单与订单有效期 - Orders at Alpaca

证券经纪服务由 Alpaca Securities LLC(“Alpaca Securities”)提供,其为 FINRA/SIPC 成员,是 AlpacaDB, Inc. 的全资子公司。技术和服务由 AlpacaDB, Inc. 提供。
这不是在任何 Alpaca Securities 未注册的司法管辖区(Alpaca Securities 仅在美国注册)购买或出售证券或开设经纪账户的要约、要约邀请或建议。