@shmidtqq: https://x.com/shmidtqq/status/2074177517150224402
摘要
一份关于使用 Claude AI 通过 Interactive Brokers API 自动进行股票交易的指南,每30分钟循环运行一次。内容涵盖设置、安装和用于模拟交易的策略执行。
查看缓存全文
缓存时间: 2026/07/07 01:22
Claude AI 现在自主交易股票。零点击,每30分钟一次。
这是一个安静的早晨。没有打开任何图表,甚至咖啡都还没倒,但屏幕上已经等待着一份精心挑选的股票清单。开盘铃声响起。订单自动执行。止损随价格上移。部分利润落袋为安。而在收盘前很久,所有头寸都已平仓。没有点击任何一个按钮。
这不是幻想,也不是魔法。这就是当 Claude 直接接入盈透证券(Interactive Brokers)API,并被精确教导策略如何交易时所发生的事情。下文将展示从空白屏幕到这样一个机器人的完整路径:它每30分钟扫描、决策、买入、卖出并报告,所有操作都在一台电脑上安静运行。
在乐趣开始之前,先讲一个直白的事实:AI 是放大器,不是印钞机。它可以构建扫描器、处理筛选条件、比任何人更快地执行交易,但它无法凭空创造优势。给它一个亏损策略,它只会亏得更快、更稳定。给它一个真正的优势,事情才开始变得有趣。
本文为教育材料,非个人投资建议。自动交易可能亏损资金,因此下文所有操作首先在模拟账户(虚拟资金)上进行。
本指南中的代码展示了 Claude 在底层构建的内容。你无需手动编写任何代码,但了解正在发生的事情并能检查结果会有所帮助。示例使用 ib_async 库,它是较旧的 ib_insync 的维护版继任者。
第一部分:工作原理及快速术语表
整个系统是一个自我重复的循环。它扫描市场寻找符合策略的股票,筛选出候选列表,然后等待。当设置触发时,它买入。然后管理交易:移动止损、部分止盈、跟踪利润、在收盘前平仓。三十分钟后,它重做整个过程。
大多数设置从未解决的关键部分是触发条件。很多工具可以规划交易,甚至能漂亮地回测,但它们在关键时刻止步,把点击操作留给人类。将 Claude 连接到经纪商 API 消除了这最后一个瓶颈,使得计划和执行终于存在于同一位置。
快速术语表,方便理解后续内容:
-
跳空(Gap): 开盘价大幅高于前一日收盘价。
-
跳空股(Gapper): 开盘出现大幅跳空(通常向上)的股票。
-
R: 单笔交易的资金风险;0.75R 即该风险的 0.75 倍。
-
波段低点(Swing low): 图表上的局部低点,作为止损参考点。
-
盈利因子(Profit factor): 总利润除以总亏损,大于 1 为良好。
-
SMA 200(200日简单移动平均线): 200 天内的平均价格,作为长期趋势参考。
-
限价单(Limit order): 以不低于设定价格买入或卖出。
-
止损(Stop): 平仓以限制亏损的价位。
-
追踪止损(Trailing stop): 随价格上升而移动的止损,以锁定利润。
第二部分:需要安装什么
在安装三款软件并开通一个账户之前,一切都不会发生。逐步操作:
-
打开盈透证券网站,创建一个免费的模拟(演示)账户。即使没有市场数据订阅也能使用。
-
下载并安装 Trader Workstation(TWS),盈透证券的交易平台。
-
从 python.org 下载 Python 3.12 或更新版本。在 Windows 上,安装时勾选“Add Python to PATH”。
-
从 Claude 官方网站安装 Claude Code,并使用你的付费计划登录(每月约 20 美元起)。
黄金法则: 先模拟。在机器人连续运行数周表现正常之前,不要投入真实资金。无需编程背景,Claude 会处理技术连接。
第三部分:在 TWS 中打开 API 接口
一个复选框错误就会让机器人只能看但不能交易。逐步操作:
-
在 TWS 中登录模拟账户。
-
从“文件”或“编辑”菜单(取决于版本)打开“全局配置”,然后进入“API”和“设置”。
-
启用“Enable ActiveX and Socket Clients”。
-
将套接字端口设置为 7497(模拟账户使用;实盘账户稍后改为 7496)。
-
将 127.0.0.1 添加到“Trusted IPs”列表。
-
取消勾选“Read-Only API”,否则机器人只能读取数据,无法下单。
-
点击“应用”,然后“确定”,并最小化 TWS。此后它将在后台安静运行。
第四部分:将 Claude 连接到经纪商
-
为这个机器人创建一个新的 Claude 项目。
-
输入如下提示:“我正在将盈透证券、Python 和 Claude 连接在一起。我已经在全局配置中设置好了盈透证券模拟交易账户。请逐步引导我完成连接过程。”
-
Claude 会一步步指导你,安装用于经纪商连接的
ib_async库,并询问是允许下单还是保持只读模式。在模拟账户上选择完整交易。
自动模式可以让 Claude 继续工作,而无需在每一步都停下来等待批准。如果希望更严格的控制,保留权限,但预计大约每十秒钟会收到一次询问。牢记现实:连接是容易的部分,优势在于策略本身,而非管道。
第五部分:烟雾测试与第一个机器人交易
在信任机器人之前,先证明管道确实已打通。第一个测试是账户快照。底层代码如下:
from ib_async import IB
ib = IB()
ib.connect("127.0.0.1", 7497, clientId=1) # 7497 = 模拟账户
print("持仓:", ib.positions()) # 新账户为空
for row in ib.accountSummary():
if row.tag == "BuyingPower":
print("购买力:", row.value)
ib.disconnect()
提示:全新的模拟账户可能以荒谬的余额(如一百万)开始。将其重置为更实际的金额,例如 10,000,以便数字有意义。
第二个测试是真实测试订单。设置一个远低于市场价的限价,使其无法成交,但发送订单的行为仍能证明连接:
from ib_async import IB, Stock, LimitOrder
ib = IB()
ib.connect("127.0.0.1", 7497, clientId=1)
contract = Stock("NVDA", "SMART", "USD")
ib.qualifyContracts(contract)
order = LimitOrder("BUY", 1, 50) # 限价50,故意低于市场
trade = ib.placeOrder(contract, order)
ib.sleep(2)
print("状态:", trade.orderStatus.status) # 已提交,但从未成交
ib.cancelOrder(order)
ib.disconnect()
在第一个订单时,TWS 会弹出关于 API 订单的模拟交易警告,你需要确认。由于价格不现实,订单会保持未成交状态,但连接已得到验证。取消订单并继续。
第六部分:策略配置为 rules.json
机器人的智能程度取决于给定的规则。示例设置是一个仅做多的动量策略:在 5 分钟图表上买入,条件是价格高于前一日高点,且前一日收盘价高于 200 日均线。出场:初始止损设在当日最低点下方 1%,部分止盈在 0.75R,保本在 1R,然后根据 5 分钟波段低点进行追踪。每笔交易风险为账户的 1%,单只股票最大仓位为账户的 10%。
回测显示,该示例盈利比率为 64%,盈利因子为 2.48,最大回撤为 7%,总盈亏为 12%。请将这些数字视为示例,而非保证。
Claude 将规则转换为 rules.json 文件:
{
"strategy_name": "trend_join_long",
"direction": "long_only",
"timeframe": "5min",
"daily_filters": {
"price_above_prev_day_high": true,
"prev_close_above_sma": 200
},
"entry": { "min_gap_up_percent": 3 },
"exits": {
"initial_stop": "1_percent_below_low_of_day",
"partial_take_profit_R": 0.75,
"move_to_break_even_R": 1.0,
"trail": "under_5min_swing_lows"
},
"risk": { "risk_per_trade_percent": 1, "max_position_size_percent": 10 },
"universe": "SP500"
}
对初学者来说,最重要的是理解规则如何转化为头寸规模。下面是相同逻辑的代码,其中 1R 变得显而易见:
import json
rules = json.load(open("rules.json"))
account_value = 10_000
risk_dollars = account_value * rules["risk"]["risk_per_trade_percent"] / 100 # 100美元 = 1R
entry = 20.00
stop = 19.80 # 大约低于当日最低点1%
per_share_risk = entry - stop # 每股风险0.20美元
shares = int(risk_dollars / per_share_risk) # 500股
# 0.75R部分止盈在 entry + 0.75 * per_share_risk = 20.15
在演示中,股票池简化为标普500指数。更完整的版本会筛选所有股价高于3美元、市值超过10亿美元的股票。更改股票池这一行,整个范围就会改变。
第七部分:设置文件与令牌安全
设置文件存储端口、客户端ID、账户号码、限制以及Telegram令牌:
{
"ib_host": "127.0.0.1",
"ib_port": 7497,
"ib_client_id": 1,
"account": "DU1234567",
"max_open_positions": 5,
"telegram_bot_token": "粘贴你的令牌在这里",
"telegram_chat_id": "粘贴你的聊天ID在这里"
}
安全规则: 此文件包含机器人及频道的访问权限,因此绝不要在任何地方发布它,不要发送到聊天中,也不要推送到公共仓库。如果Telegram令牌泄露,请在BotFather中撤销并生成新的。
第八部分:股票池扫描器与跳空筛选器
首先机器人需要一个股票池,然后是一个筛选器,只保留每次通过时的候选股。跳空逻辑和前20名选择如下:
from ib_async import IB, Stock
ib = IB()
ib.connect("127.0.0.1", 7497, clientId=1)
def gap_percent(ticker):
c = Stock(ticker, "SMART", "USD")
ib.qualifyContracts(c)
bars = ib.reqHistoricalData(
c, endDateTime="", durationStr="2 D",
barSizeSetting="1 day", whatToShow="TRADES", useRTH=True)
prev_close, today_open = bars[-2].close, bars[-1].open
return (today_open - prev_close) / prev_close * 100
scored = [(t, gap_percent(t)) for t in sp500_tickers]
top20 = sorted([s for s in scored if s[1] > 3], key=lambda s: s[1], reverse=True)[:20]
测试中,这样的扫描器大约在14秒内遍历整个标普500,并返回跳空幅度超过3%的前20只股票。同样的列表稍后每30分钟会推送到你的手机上,让你在机器人行动之前就看到这些选择。
第九部分:大脑循环——每30分钟自动化
循环是将工具箱变成机器人的关键。它在交易时段内每30分钟运行扫描器、检查规则并执行入场。骨架代码如下:
import time
from datetime import datetime
from zoneinfo import ZoneInfo
def market_open_now():
now = datetime.now(ZoneInfo("America/New_York"))
minutes = now.hour * 60 + now.minute
return now.weekday() < 5 and 9 * 60 + 30 <= minutes < 16 * 60
while True:
if market_open_now():
run_cycle() # 扫描、筛选、决策、执行、警报
time.sleep(30 * 60) # 等待30分钟;可设为5分钟
同时,机器人维护一个每周期刷新的监视文件:
{
"updated": "2026-07-05T13:30:00-04:00",
"candidates": [
{ "ticker": "NVDA", "gap_percent": 4.2 },
{ "ticker": "AVGO", "gap_percent": 3.6 }
]
}
人们常常忘记一个实际问题。机器人运行在你的电脑上,而不是经纪商云端,因此只有电脑开机且TWS登录时才会运行。每天一次,TWS会自行注销并重启,因此请开启TWS自动重启,并在交易时段保持电脑开机,否则循环将停止。
第十部分:Telegram警报
首先创建一个机器人并获取凭证:
-
在Telegram中打开与 @BotFather 的聊天,创建一个机器人,获取一个令牌。令牌是一串包含冒号的字符串;请像保管密码一样保管它。
-
找到你的 chat_id:向你的新机器人发送一次消息,然后通过辅助机器人(如 @userinfobot)或通过Telegram Bot API的 getUpdates 方法读取chat_id。
-
将令牌和chat_id粘贴到第七部分的设置文件中。
发送消息是一个简单的Telegram Bot API调用:
import requests
def send_telegram(token, chat_id, text):
url = f"https://api.telegram.org/bot{token}/sendMessage"
requests.post(url, data={"chat_id": chat_id, "text": text})
send_telegram(TOKEN, CHAT_ID, "扫描 13:30: 12只跳空股,首选 NVDA +4.2%")
机器人每30分钟发送扫描列表、入场和出场信号、部分止盈、追踪止损以及收盘总结。在消息流中大致如下:
09:30 盘前扫描:前20跳空股就绪
10:00 买入 NVDA 500股 @ 20.05 止损 19.80 风险 1R
11:30 NVDA 部分 +0.75R 已锁定,止损移至保本
15:55 强制平仓:NVDA +1.8R | 当日:+2.3R,3笔交易
第十一部分:仪表板与诚实记分板
让Claude构建一个跟踪每笔交易R值的仪表板,即以风险单位而非原始美元来衡量结果。这样,盈亏都是根据所承担的风险来衡量的。
诚实地说:回测中表现优异的策略在实际交易中可能表现平平。造成差距的主要原因有两个:
-
回测范围狭窄,仅在有限的股票和时间窗口内运行。
-
人工判断难以完全编码,因为并非所有手动决策都能干净地映射到指标和固定参数上。
结论并非令人沮丧,而是现实。回测数据很少能一对一迁移,同一策略的手动交易仍可能优于自动化版本。请将此次构建视为一个可供迭代的坚实基础,而非成品赚钱机器。
第十二部分:常见问题及解决方法
几乎所有早期问题都集中在以下几点。
-
无法连接,Connection refused:TWS未运行、端口错误、IP不受信任或API未开启。检查TWS是否打开,模拟账户端口为7497,127.0.0.1是否在受信任IP列表中,ActiveX和Socket Clients是否已启用。
-
订单被拒绝,只读:Read-Only API已被勾选。取消勾选并点击应用。
-
扫描器为空,无价格:没有市场数据订阅。启用延迟数据或订阅市场数据。
-
机器人夜间静默:TWS每天注销并重启一次。开启TWS自动重启,并在交易时段保持电脑开机。
-
订单无法成交:限价远低于市场价格,测试时属于正常情况。交易时使用实际价格。
-
账户混淆:模拟账户和实盘账户端口混淆。7497为模拟,7496为实盘。
-
无Telegram消息:令牌或chat_id错误,或者从未先向机器人发送过消息。验证令牌和chat_id,并手动向机器人发送一条消息。
第十三部分:速查表
-
安装: TWS、Python 3.12或更新版本、付费Claude Code、开通模拟账户。
-
配置API: 启用ActiveX和Socket Clients,端口7497或7496,IP 127.0.0.1,关闭Read-Only。
-
连接与测试: 提示连接,检查购买力和一单测试订单。
-
编写规则: 创建rules.json以及包含令牌的设置文件。
-
构建扫描器: 股票池加上跳空筛选器。
-
自动化: 启动30分钟大脑循环,开启TWS自动重启。
-
配置警报: 在BotFather创建机器人,获取令牌和chat_id,测试消息。
-
监控: R值仪表板和诚实统计。
免责声明
-
AI放大优势,无法创造优势。
-
在投入一分钱之前,先用模拟账户交易数周。
-
设置现实的模拟余额,使结果反映真实情况。
-
漂亮的回测是假设,而非实盘盈利的保证。
-
本文为教育材料,非个人投资建议;交易存在资本损失风险。
最后一点
自动化机器人不是终点线,而是起跑线。有趣的工作刚刚开始:调整筛选条件,阅读诚实的R统计,测试不同的时间框架和股票池,直到实盘结果开始追赶回测结果。
别忘了订阅我的TG频道,更多设置、提示和分解在那里:https://t.me/shmidtai
构建机器人,在模拟账户上运行。
如果你喜欢这篇文章,别忘了收藏并关注我。
@shmidtqq
相似文章
@leopardracer: https://x.com/leopardracer/status/2058949350315667829
本指南解释了金融专业人士如何设置 Claude Code(一款 AI 编程助手)来执行投资研究任务。
@DamiDefi: https://x.com/DamiDefi/status/2058137074595750242
作者使用Claude构建了一个精简的三代理版本,该版本源自BlackRock论文中描述的50代理AI投资组合系统。该系统生成了令人意外的体制分析和对抗性批评,从而导致了实际的投资组合调整。
@RohOnChain: https://x.com/RohOnChain/status/2069056530960490835
作者解释了如何使用AI循环工程构建一个自我改进的量化交易系统,其中AI运行循环以自主提示、验证和行动,与手动提示形成对比。
@tom_doerr: 使用Claude生成并严格验证算法交易策略 https://github.com/zostaff/ai-quant-rese…
ai-quant-lab是一个开源的Python框架,它利用Claude生成算法交易策略,并通过统计测试严格验证以避免过拟合。
@shmidtqq: https://x.com/shmidtqq/status/2072334081128358188
一份详细指南,介绍了三种利用Claude AI赚钱的被低估的方法:在Etsy上出售定制旅行计划、通过Pinterest引流以及建立邮件列表。该系统以旅游领域为例进行说明,并包含了提示词和商业策略。