IBKR 账户准备与 Paper Trading 启用
IBKR 账户体系、期权审批流程、市场数据订阅模型、TWS vs IB Gateway 取舍
日期: 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:选平台时真正该考虑什么
很多人以为选券商是选「佣金便宜」,对个人量化来说选错平台的成本远高于佣金差异。
| 维度 | IBKR | Robinhood | Alpaca | 富途 / 老虎 |
|---|---|---|---|---|
| 覆盖市场 | 全球 150+ 市场 | 美股 only | 美股 only | 美股+港股 |
| 期权权限 | Level 1-4 完整 | 基础 | Level 1-2 | 基础 |
| API 成熟度 | TWS API 20 年生态 | 无官方 API | REST 友好但产品少 | 有 API |
| Margin / 借券 | Portfolio Margin(≥$110k) | 简化 | 简化 | 港股不友好 |
| 期货 / 外汇 | ✓ | ✗ | ✗ | ✗ |
| 数据费 | 需订阅 | 免费但低质 | 免费 | 看协议 |
| 适合人群 | 严肃量化 / 多市场 | 散户 | 美股 API 入门 | 港股 / 中概 |
核心结论:IBKR 不是最便宜的,但对「90 天后还能用、180 天后能扩规模、3 年后能跨市场」的路径,它几乎是个人量化唯一选择。
二、IBKR 账户类型怎么选(<$5k 决策树)
2.1 IBKR Pro vs IBKR Lite
| 维度 | IBKR Pro | IBKR 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 账户。原因:
- Reg-T Margin 在 <$2k 时不开放
- 即便 $2k-$25k 开了 margin,PDT Rule(5 个工作日内最多 4 笔日内)会让任何短线策略失效
- Cash 账户不收 margin 利息(Pro 模式利率不低)
- 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 启用步骤
- 登录 Client Portal
- Settings → Account Settings → Paper Trading Account → Enable
- 等待几分钟,Paper 账户号生成(U 开头的不同 ID)
- 重要:Paper 账户初始资金 $1,000,000(虚拟),可以在 Settings 里调整
- 建议调成你实际打算投入的金额(如 $5,000),否则仓位感全错
- 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) | - |
| 1 | Covered 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 常见错误排查
| 错误 | 原因 | 解决 |
|---|---|---|
ConnectionRefusedError | TWS 没开 / 端口错 / 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.mdWeek 1 / Day 1 标 ✅ - (10) 记录踩坑:本笔记最后加「实际执行记录」段
九、PM 视角:今天学到的迁移性思考
- 平台选择是路径依赖的早期决定:选 IBKR 不是「现在最爽」而是「90 天后扩规模时不需要换」。换平台的成本(重写代码 / 重训模型 / 重过 KYC)巨大。
- 合规摩擦 ≠ 没用:W-8BEN / Options Level / NP 申报 都不是 IBKR 在刁难,是它在帮你抵御你自己的不理性(包括日后被追税被冻结)。
- Read-Only 是产品级 safety pattern:默认 read-only,需要明确开关才能写,这是好的 API 设计——对应到我们自己的系统也该这样(任何「自动 wire transfer」类操作都要有 explicit override)。
- 延迟数据 = 没数据:金融系统里 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 字 今日完成度:理论 ✓ / 实操(你自己执行)/ 笔记 ✓