@shmidtqq: https://x.com/shmidtqq/status/2074177517150224402

X AI KOLs Timeline 工具

摘要

一份关于使用 Claude AI 通过 Interactive Brokers API 自动进行股票交易的指南,每30分钟循环运行一次。内容涵盖设置、安装和用于模拟交易的策略执行。

https://t.co/ZzFohpvgGO
查看原文
查看缓存全文

缓存时间: 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

相似文章

@DamiDefi: https://x.com/DamiDefi/status/2058137074595750242

X AI KOLs Timeline

作者使用Claude构建了一个精简的三代理版本,该版本源自BlackRock论文中描述的50代理AI投资组合系统。该系统生成了令人意外的体制分析和对抗性批评,从而导致了实际的投资组合调整。

@shmidtqq: https://x.com/shmidtqq/status/2072334081128358188

X AI KOLs Timeline

一份详细指南,介绍了三种利用Claude AI赚钱的被低估的方法:在Etsy上出售定制旅行计划、通过Pinterest引流以及建立邮件列表。该系统以旅游领域为例进行说明,并包含了提示词和商业策略。