Skip to main content

FPSL 集成指南(全披露)

机器翻译译自英文(docs.alpaca.markets)本页 62 段已全部译完

通用知识点

  • 利息按日累计(实际/360 基准),并按月支付。
  • 抵押品将代表客户存放在三方银行的托管账户中,并根据出借证券的市场变化每日重新计算。
  • 出借证券对保证金/购买力/权益没有影响。
  • 当客户出借其股票时,他们将丧失投票权。如果客户希望重新获得股东投票权,需要将其账户从 FPSL 中取消注册。
  • 当股票被出借时,借款人有权获得股息。然而,出借人(客户)将收到“替代股息支付”,其税务规则可能与股息不同。
  • 不能保证任何特定股票会被出借,因为这取决于借入需求,且利率随个别证券的供需变化。客户也不能选择出借哪些证券。注册适用于整个符合条件的投资组合。
  • FPSL 仅在特定国家和模式中可用。如有疑问,请联系你的 Alpaca 联系人。
  • 仅仅因为股票在可出借库存中,并不意味着所有股票都会被借出。可出借库存的使用取决于特定证券的市场需求。
  • 通过供应商合作伙伴,Alpaca 向其出借股票的任何参与者都是持牌且受监管的经纪交易商、对冲基金或机构。

先决条件

使用 FPSL API 之前,请确保:

  1. 账户持有人必须满足 FPSL 的国家/地区资格要求。Alpaca 会验证税务居住国,对于法人实体则验证注册成立国。该账户不能是主账户下的关联账户。任何挂在主账户下的账户都会收到错误信息:fpsl enrollment is not supported on customer subaccounts
  2. 必须满足以下任一前提条件:
    1. $2,500 in total account balance
    2. $20,000 in reported income
    3. $20,000 in liquid assets
    4. Stock investment experience reported as anything other than none
  3. 必需协议:账户必须已签署:
    1. master_securities_lending_agreement

第 1 步:获取可用的 FPSL 层级

端点: GET /v1/fpsl/tiers
用途: 确定可用的 FPSL 层级。

关键注意事项:

  • 层级由 Alpaca 在接入期间配置。合作伙伴不通过此 API 创建、更新或删除 FPSL 层级。
  • customer_split 和 partner_split 分别表示各自在支付的利息收入总额中所占的百分比。例如,customer_split 为 0.20 意味着如果某证券产生 10 美元利息收入,客户将获得该金额的 20%,即 2 美元。
  • 合作伙伴可以确定适当的 customer_split。

请求示例:

curl --location 'https://broker-api.sandbox.alpaca.markets/v1/fpsl/tiers' \
--header 'Authorization: Basic <your-credentials>'

查询参数:

  • tier_name(可选):精确的层级名称
  • market(可选):按市场筛选(例如 "US")
  • sort_by(可选):按 tier_name、market、customer_split 或 partner_split 排序
  • direction(可选):asc 或 desc(默认为 desc)

响应示例:

[
  {
    "id": "9BAB56CA-CE9A-4C87-A702-3365F92C2EB5",
    "tier_name": "gold",
    "market": "US",
    "customer_split": "0.20",
    "partner_split": "0.47",
    "created_at": "2024-06-11T19:00:00.000000Z",
    "updated_at": "2024-06-11T19:00:00.000000Z"
  },
  {
    "id": "2F4EF316-E076-4389-BDCC-96033C69E707",
    "tier_name": "regular",
    "market": "US",
    "customer_split": "0.10",
    "partner_split": "0.57",
    "created_at": "2024-06-11T19:00:00.000000Z",
    "updated_at": "2024-06-11T19:00:00.000000Z"
  }
[

筛选示例:

# Filter by market and tier name
curl --location 'https://broker-api.sandbox.alpaca.markets/v1/fpsl/tiers?market=US&tier_name=silver'

# Sort by partner split descending

curl --location 'https://broker-api.sandbox.alpaca.markets/v1/fpsl/tiers?sort_by=partner_split&direction=desc'

第 2.1 步:传达客户同意

与你的 Alpaca 联系人合作,确保你遵循传达客户同意的正确要求。

端点: POST v1/accounts/
端点: PATCH /v1/accounts/{account_id}
用途: 确认主证券借贷协议

关键注意事项:

  • revision 是可选的,如果留空,将默认为最新修订号
  • fpsl.status 将在响应体中显示,有关此状态的更多详情请参见下文
  • fpsl* 属性* 必须在注册时设置
  • 合作伙伴可以在同一调用中同意(签署 MSLA)并注册/分配层级,这适用于创建和修补

请求示例:

curl --location --request PATCH 'https://broker-api.sandbox.alpaca.markets/v1/accounts/{account_id}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <your-credentials>' \
--data '{
    "agreements": [
        {
            "agreement": "master_securities_lending_agreement",
            "signed_at": "2024-07-11T18:09:33Z",
            "ip_address": "185.13.21.99",
            "revision": "<insert updated revision number>"
        }
    ]
}'

响应: 返回更新后的账户对象,HTTP 状态为 200 OK:

200 OK 

第 2.2 步:注册账户

端点: PATCH /v1/accounts/{account_id}
用途: 将现有账户注册到 FPSL 计划

请求示例:

curl --location --request PATCH 'https://broker-api.sandbox.alpaca.markets/v1/accounts/{account_id}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <your-credentials>' \
--data '{
    "fpsl": {
        "US": {
            "tier_id": "5cd4d4cf-fda9-4949-99d7-9e4a4613dc2d",
            "status": "ACTIVE"
        }
    }
}'

注册规则

  • 首次注册时需要 tier_id
  • 首次注册时 status 为可选
  • 如果首次注册时省略 status,账户将注册为 ACTIVE

响应示例: 返回包含 FPSL 状态的更新后账户对象

{
    "id": "cd1045f5-c5dc-4204-a906-633ec96df05b",
    "account_number": "533888676",
    "status": "ACTIVE",
    
    "fpsl": {

        "US": {
            "status": "ACTIVE",
            "tier_id": "5cd4d4cf-fda9-4949-99d7-9e4a4613dc2d"
        }
    }
}

第 3 步:检查 FPSL 注册状态

重要:在开始此步骤之前,建议先尝试使用 SSE 请求的步骤 7。此特定方法更像是备用方案,以防你在 SSE 请求选项上遇到问题。

端点: GET /v1/accounts/{account_id} 用途: 获取当前 FPSL 注册状态

请求示例:

curl --location 'https://broker-api.sandbox.alpaca.markets/v1/accounts/{account_id}' \
--header 'Authorization: Basic <your-credentials>'

FPSL 状态值:

状态描述
FPSL key 缺失此账户从未注册过。
INACTIVE此账户已取消注册。
ACTIVE账户已注册且符合条件。

已注册账户片段:

{
  "id": "4db36989-6565-4011-9126-39fe6b3d9bf6",
  "fpsl": {
    "US": {
      "status": "ACTIVE",
      "tier_id": "61e69015-8549-4bfd-b9c3-01e75843f47d"
    }
  }
}

第 4 步:修改 FPSL 注册

在同一调用中更改层级和退出将被拒绝。月中退出不会丧失股票已出借天数已赚取的利息。从下一个工作日起,退出账户的股票将不再提供出借,而任何现有证券借出将在借款人归还股票时关闭。

更改层级示例:

curl --location --request PATCH 'https://broker-api.sandbox.alpaca.markets/v1/accounts/{account_id}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <your-credentials>' \
--data '{
    "fpsl": {
        "US": {
            "tier_id": "aab75b22-6ac7-48cd-883d-7313afd1afcd",
            "status": "ACTIVE"
        }
    }
}'

取消注册账户示例:

curl --location --request PATCH 'https://broker-api.sandbox.alpaca.markets/v1/accounts/{account_id}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <your-credentials>' \
--data '{
    "fpsl": {
        "US": {
            "status": "INACTIVE"
        }
    }
}'

重新注册账户示例:

curl --location --request PATCH 'https://broker-api.sandbox.alpaca.markets/v1/accounts/{account_id}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <your-credentials>' \
--data '{
    "fpsl": {
        "US": {
            "status": "ACTIVE"
        }
    }
}'

注意 - 如果重新注册时未指定tier_id,则重用先前分配的层级。

第 5 步:检索 FPSL 证券借出活动

端点: GET /v1/fpsl/loans
用途: 获取每日股票借贷活动和利息信息

请求示例:

curl --location 'https://broker-api.sandbox.alpaca.markets/v1/fpsl/loans?account_id={account_id}' \
--header 'Authorization: Basic <your-credentials>'
  • 如果尚未计算证券借出的利息,interest* 可以省略
  • 当证券借出金额(包括利息)已调整时,updated_at* 可能存在

查询参数:

  • page_token(可选):分页令牌
  • start*(可选):包含起始日期,格式为 YYYY-MM-DD
  • end*(可选):排除结束日期,格式为 YYYY-MM-DD
  • limit*(可选):页面大小
  • account_id(可选):按账户筛选
  • 建议:用于对账时始终传递 account_id。如果省略,结果可能包括你的 API 凭证可见的所有账户

默认日期行为:

  • start 默认为当前月份的第一天
  • end 默认为当前日期之后的一天
  • defaults 使用纽约时区逻辑

响应结构:

{
  "loans": [
    {
      "date": "2024-07-11",
      "account_id": "cd1045f5-c5dc-4204-a906-633ec96df05b",
      "account_number": "533888676",
      "correspondent": "YOUR_CORRESPONDENT",
      "symbol": "AAPL",
      "quantity": 100,
      "market_value": 15000.00,
      "collateral": 15300.00,
      "updated_at": "2024-07-12T05:00:00.000000Z",
      "interest": {
        "customer": 2.50,
        "partner": 5.85
      }
    }
  ],
  "next_page_token": "{value_to_send_to_continue_paging}"
}

第 6 步:获取每月 FPSL 利息活动

端点: GET /v1/accounts/activities/INT
用途: 获取 FPSL 的月末利息活动

请求示例:

curl --location 'https://broker-api.sandbox.alpaca.markets/v1/accounts/activities/INT?account_id={account_id}' \
--header 'Authorization: Basic <your-credentials>'

响应示例:

{
  "id": "5ca8b9e6-cd56-48fa-99a7-ce1f5290f312",
  "qty": null,
  "price": null,
  "status": "executed",
  "symbol": "",
  "entry_type": "INT",
  "net_amount": 0.58,
  "description": "June 2024 Fully-Paid Securities Lending",
  "settle_date": "2024-06-28",
  "system_date": "2024-06-28",
  "entry_sub_type": "FPSL",
  "per_share_amount": null
}

第 7 步:FPSL SSE 事件(可选)

端点: GET /v1/events/accounts/status
用途: 检索账户的计划状态历史

请求示例:

curl --location 'https://broker-api.sandbox.alpaca.markets/v1/events/accounts/status?id={account_id}&since_ulid={since_ulid}' \
--header 'Authorization: Basic <your-credentials>' \
--header 'Accept: text/event-stream'

响应示例:

{
  "fpsl": {
    "US": {
      "status_from": "ACTIVE",
      "status_to": "INACTIVE"
    }
  },
  "account_id": "382dd20d-d627-4d9f-9c93-7e24cd340546",
  "account_number": "533888676",
  "at": "2024-06-11T19:00:00.000000Z",
  "event_ulid": "01J2VQMVJRMXQRPNS3831XFE1Y"
}

其他信息

  • 在沙盒中,不会发出 FPSL 账户状态事件。在沙盒测试期间,通过轮询 GET /v1/accounts/{account_id} 验证状态变化。

在决定是否参与出借全款证券或同意与 Alpaca Securities LLC 签订主证券借贷协议之前,请仔细阅读关于参与全款证券借贷交易的重要风险披露。

这些披露描述了参与证券借贷交易的重要特征及相关风险。