返回交易笔记
TR Day 1

IBKR 账户准备与 Paper Trading 启用

IBKR 账户体系、期权审批流程、市场数据订阅模型、TWS vs IB Gateway 取舍

2026-05-10
Phase 1: 基础与工具链
IBKRPaperTradingOptionsLevelib_insyncMarketDataW8BEN

日期: 2026-05-10 方向: 个人量化交易 / IBKR 设置 阶段: Phase 1: 基础与工具链 标签: #IBKR #PaperTrading #OptionsLevel #ib_insync #MarketData #W8BEN


今日目标

类型内容
学习IBKR 账户体系、期权审批流程、市场数据订阅模型、TWS vs IB Gateway 取舍
实操启用 Paper Trading + 提交 Options Level 2-3 申请 + 装 IB Gateway + 第一段连接代码
产出TR-DAY1 笔记 + 可运行的 IBKR Paper 连接脚本 + Day 1 checklist

一、为什么是 IBKR:选平台时真正该考虑什么

很多人以为选券商是选「佣金便宜」,对个人量化来说选错平台的成本远高于佣金差异

维度IBKRRobinhoodAlpaca富途 / 老虎
覆盖市场全球 150+ 市场美股 only美股 only美股+港股
期权权限Level 1-4 完整基础Level 1-2基础
API 成熟度TWS API 20 年生态无官方 APIREST 友好但产品少有 API
Margin / 借券Portfolio Margin(≥$110k)简化简化港股不友好
期货 / 外汇
数据费需订阅免费但低质免费看协议
适合人群严肃量化 / 多市场散户美股 API 入门港股 / 中概

核心结论:IBKR 不是最便宜的,但对「90 天后还能用、180 天后能扩规模、3 年后能跨市场」的路径,它几乎是个人量化唯一选择。


二、IBKR 账户类型怎么选(<$5k 决策树)

2.1 IBKR Pro vs IBKR Lite

维度IBKR ProIBKR Lite
美股佣金$0.0035/share, min $0.35$0
期权佣金$0.65/张$0.65/张(一样)
订单路由SmartRouter(追求最优价)Payment for order flow
借券利息高(接近 SOFR + 1.5%)较低
数据订阅必须自己付费部分免费
量化适用✓ 路由质量更高✗ PFOF 滑点不可控

给量化的建议:选 Pro。即便佣金高一点,SmartRouter 的成交质量差异在统计意义上能 cover 这点佣金。Lite 表面零佣金但 PFOF 滑点会偷偷吃掉边际利润——这是个人量化最常忽略的成本。

2.2 Cash 账户 vs Margin 账户

账户净资产 < $2,000 → 强制 Cash 账户(IBKR 规则)
账户净资产 $2,000-$25,000 → 可选 Margin,但有 PDT 限制
账户净资产 ≥ $25,000 → Margin + 解除 PDT
账户净资产 ≥ $110,000 → 可申请 Portfolio Margin(保证金更宽松)

<$5k 的决策:选 Cash 账户。原因:

  1. Reg-T Margin 在 <$2k 时不开放
  2. 即便 $2k-$25k 开了 margin,PDT Rule(5 个工作日内最多 4 笔日内)会让任何短线策略失效
  3. Cash 账户不收 margin 利息(Pro 模式利率不低)
  4. Cash 账户照样可以做 cash-secured put(CSP)

注意:Cash 账户在 T+2(股票)/ T+1(期权)结算前资金不能再用。Wheel 策略每次轮转要算清这个时间。

2.3 中国大陆居民的特别注意

事项状态
开户可以开通 IBKR Singapore 或 IBKR HK 实体
W-8BEN 表格必填,确认非美国人税务身份
股息预提税30%(W-8BEN 享受不到中美税收协定的 10% 优惠,因为协定不覆盖 IBKR HK/SG)
资本利得税无(美国对非美国人不征)
申报义务国内年度 ≥$50k 海外资产理论上要报,自评
资金通道需要香港中介或合规出入金通道

对策略选择的影响:股息密集型策略(如某些 covered call、SCHD 类)在 W-8BEN 30% 税率下 Sharpe 大打折扣,这条线相当于天然劝退。我们的主路径(动量因子、期权 Theta 收割、事件驱动)股息成分小,影响有限——但回测时必须把 30% 股息税建模进去。


三、Paper Trading 启用流程

3.1 为什么要 Paper Trading

用途Paper Trading 能做Paper Trading 不能做
验证 API 连接-
测试下单逻辑-
跑回测后的 live 模拟-
模拟期权希腊字母变化✓(主要品种)部分 illiquid 期权不准
模拟真实滑点成交过于友好
模拟 partial fill默认全成交
模拟 short borrow 拒单总是允许做空
学习心态控制没钱亏不疼

核心认知:Paper Trading 是「跑通流程」的工具,不是「评估盈利能力」的工具。Paper 表现好 ≠ 实盘能赚。

3.2 启用步骤

  1. 登录 Client Portal
  2. Settings → Account Settings → Paper Trading Account → Enable
  3. 等待几分钟,Paper 账户号生成(U 开头的不同 ID)
  4. 重要:Paper 账户初始资金 $1,000,000(虚拟),可以在 Settings 里调整
    • 建议调成你实际打算投入的金额(如 $5,000),否则仓位感全错
  5. Paper 账户支持的市场数据继承自实盘(如果实盘未订阅,Paper 也是延迟数据)

3.3 API 端口约定(务必背下来)

TWS:
  Live    → 7496
  Paper   → 7497

IB Gateway:
  Live    → 4001  (新版改为 4002)
  Paper   → 4002

clientId:
  1-32 任选,但必须每个连接不重复

血泪经验:连错端口直接连实盘下单是新手最常见的事故。我的做法:实盘脚本第一行加 assert ib.client.port == 4002, "WRONG PORT — PAPER ONLY" 类的护栏。


四、Options Level 申请:决定你能做什么策略

4.1 Level 体系

Level允许的策略我们计划用到
0仅持有期权(极少券商有此 level)-
1Covered Call + Protective Put✓ Wheel 后半段 CC
2+ Long Call/Put + Cash-Secured Put✓✓ 核心目标
3+ Spreads(debit/credit)+ Iron Condor + Butterfly✓✓ Day 49+ 财报策略
4+ Naked Call/Put + Strangle/Straddle 卖方✗ 小资金不批且风险大

4.2 申请表里 IBKR 会问什么

IBKR 用「适当性测试」决定批哪个 level,不是看你愿意填什么。

问题如何作答(诚实+策略化)
年收入真实填写
净资产真实填写(含其他账户、房产可以全计入)
投资目标Growth + Speculation(保守目标会被压 level)
期权交易经验不要写 "None"。"Limited"(≥1年/<5笔)通常够 Level 2
期权知识选 "Good"(不要谦虚选 "Limited")
风险承受High

关键认知:这不是道德题,是合规题。IBKR 想看到「你不会因为不懂期权而把家底亏光」的合理证据。诚实但展现自信即可。

4.3 申请节奏

  • 提交后 1-3 个工作日审批
  • 通常先批 Level 2,过一段时间用过几笔有记录,可以申请升 Level 3
  • 今天就提交,否则 Day 15 期权基础学完想 paper trade CSP 会卡住

五、市场数据订阅:不订阅 = 不能做任何严肃事情

5.1 数据等级

不订阅
  → 15 分钟延迟
  → 期权链根本不显示
  → API 报价是延迟的 → 任何信号都是过期的

订阅 US Securities Snapshot Bundle (NP, L1)
  → 实时 Level 1(最优 bid/ask)
  → 月费约 $14.50(Non-Professional 个人)
  → Pro 用户首次开户当月免费

订阅 US Options OPRA (NP)
  → 实时期权链
  → 月费约 $1.50(NP)
  → 没这个连期权链都看不到

5.2 Non-Professional 资格

申报 NP 要同时满足:

  • 不在金融业全职工作(注意:是「全职」,PM/BA 在金融机构在某些定义下可能算 Professional,需要仔细看 IBKR 的判定标准)
  • 不为他人管理资产
  • 不是 SEC 注册投资顾问
  • 用于个人账户

注意:如果你目前在持牌金融机构(银行 / 券商 / 资管),可能要按 Professional 申报,月费会贵 5-10 倍(OPRA Pro 约 $250/月)。这一条值得花 30 分钟查清楚再申报,免得后面被追溯补差价。

我们的目标资格:Non-Professional Individual

5.3 订阅流程

Client Portal → Settings → User Settings → Market Data Subscriptions → 勾选两个 → 同意 NP 声明 → 提交。当日生效


六、TWS vs IB Gateway 怎么选

维度TWS (Trader Workstation)IB Gateway
占用资源内存 ~2GB内存 ~200MB
GUI完整图表/期权链/Order Book仅登录窗口
启动速度慢(10-30 秒)快(5 秒)
适合开发/观察/手动操作生产 cron / 长跑服务
API 功能完整完整(相同)
强制重启每周二自动每天自动

我们的策略

  • Phase 1(学习):TWS。能看图能下单能调试,对学习友好。
  • Phase 2-3(自动化):IB Gateway 跑 cron,TWS 偶尔打开做人工检查。

6.1 强制重启的坑

IBKR 每天都会强制断开 IB Gateway(通常凌晨美东时间),TWS 每周二重启。如果你的策略是定时跑(如月度再平衡),不会受影响。但如果你跑高频检查(每分钟轮询),必须在脚本里加自动重连逻辑:

from ib_insync import IB
ib = IB()
while True:
    try:
        if not ib.isConnected():
            ib.connect('127.0.0.1', 4002, clientId=1)
        # ... do work ...
    except Exception as e:
        print(f"reconnect after {e}")
        time.sleep(30)

七、第一段 ib_insync 代码

7.1 环境准备

# 推荐 Python 3.10 或 3.11(3.12+ ib_insync 还有些兼容问题)
python --version

# 装核心库
pip install ib_insync==0.9.86 pandas numpy

# 期权和回测先不装,Day 5-15 再用

7.2 启用 API(TWS / IB Gateway 内)

打开 TWS → Configure → Settings → API → Settings:

  • ✓ Enable ActiveX and Socket Clients
  • ✓ Read-Only API(先勾上,确保 Day 1 不会误下单)
  • Socket port: 7497 (Paper TWS)
  • ✓ Allow connections from localhost only

7.3 第一段连接代码

# tr_day1_connect.py
from ib_insync import IB, Stock, util

util.startLoop()  # only needed in Jupyter; remove in standalone

ib = IB()
ib.connect('127.0.0.1', 7497, clientId=1)

# Sanity check the connection
print(f"Connected: {ib.isConnected()}")
print(f"Server version: {ib.client.serverVersion()}")
print(f"Account: {ib.managedAccounts()}")

# Pull SPY snapshot (snapshot mode = no streaming subscription needed)
contract = Stock('SPY', 'SMART', 'USD')
ib.qualifyContracts(contract)
ticker = ib.reqMktData(contract, '', snapshot=True, regulatorySnapshot=False)
ib.sleep(2)  # let snapshot arrive
print(f"SPY bid: {ticker.bid}, ask: {ticker.ask}, last: {ticker.last}")

ib.disconnect()

7.4 常见错误排查

错误原因解决
ConnectionRefusedErrorTWS 没开 / 端口错 / API 未启用检查 TWS Configure → API
TimeoutError on qualifyContracts没订阅市场数据订阅 Snapshot Bundle
ticker.bid = -1.0市场关闭 + 没历史数据等开盘 or 用历史 bar
clientId in use已有连接占用换 clientId 或重启 IBG
serverVersion = None连接握手失败重启 TWS/IBG

八、Day 1 实际执行 Checklist

按这个顺序做:

  • (0) 看了一眼这篇笔记
  • (1) IBKR 账户:如果还没开通,先开 IBKR HK 或 IBKR SG 个人账户(开户审批 1-3 工作日,先启动)
  • (2) Paper Trading 启用:Client Portal → Settings → Paper Trading → Enable,账户金额改成 $5,000
  • (3) Options Level 申请:提交 Level 2-3 申请(按上面攻略填写)
  • (4) 市场数据订阅:Snapshot Bundle (NP, L1) + OPRA (NP)(约 $16/月)
  • (5) 装 TWS:下载 Trader Workstation Latest,登录 Paper 账户
  • (6) 启用 API:Configure → API → Enable + 勾上 Read-Only
  • (7) Python 环境pip install ib_insync pandas numpy
  • (8) 跑第一段代码:连接 Paper,拿 SPY 报价,能打印出 bid/ask 即成功
  • (9) 更新进度docs/daily/TR_PROGRESS.md Week 1 / Day 1 标 ✅
  • (10) 记录踩坑:本笔记最后加「实际执行记录」段

九、PM 视角:今天学到的迁移性思考

  1. 平台选择是路径依赖的早期决定:选 IBKR 不是「现在最爽」而是「90 天后扩规模时不需要换」。换平台的成本(重写代码 / 重训模型 / 重过 KYC)巨大。
  2. 合规摩擦 ≠ 没用:W-8BEN / Options Level / NP 申报 都不是 IBKR 在刁难,是它在帮你抵御你自己的不理性(包括日后被追税被冻结)。
  3. Read-Only 是产品级 safety pattern:默认 read-only,需要明确开关才能写,这是好的 API 设计——对应到我们自己的系统也该这样(任何「自动 wire transfer」类操作都要有 explicit override)。
  4. 延迟数据 = 没数据:金融系统里 latency 不是性能问题,是 正确性问题——延迟报价做出的决策可以被前置交易者吃掉,等同错误。

十、明日预告

Day 2: ib_insync 进阶 — 连接、下单、查询的完整 API 表面

  • 同步 vs 异步 API
  • Contract 对象与合约限定
  • 订单类型(Market / Limit / Stop / Bracket / Trail)
  • 持仓与账户摘要查询
  • Event handlers(成交 / 错误 / 状态变化)
  • 写第一个安全的「下单 → 取消」往返脚本

实际执行记录

启动一项填一项,时间戳 + 卡点。

  • [hh:mm] Paper Trading 启用 — ...
  • [hh:mm] Options Level 提交 — ...
  • [hh:mm] 市场数据订阅 — ...
  • [hh:mm] TWS 安装 + API 启用 — ...
  • [hh:mm] 第一段代码运行成功 — ...
  • 卡点 / 学到的:

总字数:约 7,500 字 今日完成度:理论 ✓ / 实操(你自己执行)/ 笔记 ✓