n8n 自动化美股分析机器人:RSI 与 MACD 指标每小时推送 Slack 摘要
输入:股票代码列表;处理:定时触发 → Alpaca 数据获取 → Python 计算技术指标 → OpenAI 生成分析摘要;输出:Slack 频道/用户收到的分类买卖建议
- 给谁
- 需要自动化美股监控并接收 Slack 摘要的 n8n 用户
- 你会得到
- 美股交易时段每小时自动获取数据、计算 RSI/MACD、生成买卖信号并以 Slack 消息推送
硬约束
前置条件:可访问的 n8n 实例;Alpaca API 凭证(httpCustomAuth,使用 paper-api 端点);OpenAI API 凭证(需预先配置 Assistant);Slack API 凭证(需指定目标用户或频道)。工作流时区设为 America/Los_Angeles。已知限制:OpenAI Assistant ID 与 Slack 用户 ID 在模板中已脱敏;RSI 阈值 30/70 及 MACD 参数 12/26/9 为硬编码;使用 iex feed 以避免 SIP 权限错误。未实测。
他们做了什么
作者 kenandrewmiranda 在 n8n.io 发布了该工作流模板,使用 Schedule Trigger 在美股交易时段定时触发,通过 Alpaca API 获取股票数据,用 Python 计算 RSI 和 MACD 技术指标,调用 OpenAI Assistant 生成通俗易懂的分类摘要,最终推送到 Slack。
效果如何
模板在 n8n.io 上获得 35,948 次浏览(作者报告)。作者描述了预期行为:每小时在 Slack 收到带有 🟢/⚪/🔴 分类的股票分析摘要。
值得知道
模板使用 Alpaca paper API 端点(非实盘)。OpenAI Assistant ID 和 Slack 用户 ID 在公开模板中已脱敏,用户需自行配置。Python 节点中 RSI 买入阈值 30、卖出阈值 70 为硬编码。feed=iex 用于避免 SIP 数据权限错误。时区固定为 America/Los_Angeles。未实测,搭建时需验证 API 凭证有效性和 OpenAI Assistant 输出格式。
n8n 工作流模板
结构已检查 · 未实际运行下载后在 n8n 选择“Import from File”,或复制 JSON 后粘贴到编辑器。先配置自己的账号,再用测试数据运行;模板默认未启用。
配置与测试清单
需要绑定的凭证
- Fetch Stock Data 节点:绑定httpCustomAuth 凭证。
- Stock Analysis Assistant 节点:绑定OpenAI API 凭证。
- Send Summary to User(s) 节点:绑定Slack API 凭证。
- Check Market Status 节点:绑定httpCustomAuth 凭证。
需要替换的配置
- 源模板来自 n8n 公开库 #4867(约 21 个节点)。导入后先保持未启用,核对触发器、表达式与外部 API 端点。
- Sticky Note 中的说明仅供参考;按自己的账号、表结构或频道 ID 替换占位配置。
测试输入与预期结果
- 在测试环境手动执行一次主路径,确认每个需凭证的节点已连接且无鉴权错误。
- 用一条合成/脱敏样例数据跑通,核对输出字段与下游写入目标,再考虑生产启用。
模板处理说明
- 已移除原作者凭证绑定、webhookId 与执行数据,工作流设为未启用;节点、连线与原文提示词保持原样。未在 n8n 中实际运行。
- 未改业务逻辑;运行前请自行核对密钥、配额与隐私合规。
模板获取日期: 2026-10-24
步骤
配置定时触发与市场状态检查
在 n8n 中添加 Schedule Trigger 节点,设置 Cron 表达式为 `0 30 6-14 * * 1-5`(周一至周五 6:30-14:30 PT 每小时触发)。随后添加 HTTP Request 节点调用 `https://paper-api.alpaca.markets/v2/clock` 检查市场是否开盘,再通过 If 节点判断 `{{ $json.is_open }}`:若为 true 继续执行,若为 false 则进入 NoOp 节点优雅退出。
设置股票代码列表
添加 Edit Fields (Set) 节点,在 JSON 输出中定义要监控的股票代码。默认列表为:AAPL, MSFT, NVDA, TSLA, AMZN, GOOGL, META, JPM, XOM, UNH, GME。可根据需要修改此列表。
配置 Alpaca 股票数据获取
添加 HTTP Request 节点,URL 设为 `=https://data.alpaca.markets/v2/stocks/bars`,认证方式选择 httpCustomAuth。查询参数:symbols 引用上一步的 `{{ $json.symbols }}`,timeframe=`1Day`,limit=`1000`,feed=`iex`(避免 SIP 权限错误),start 为 100 天前的日期,end 为当天日期。
添加 Python 技术指标计算节点
添加 Code 节点,语言选择 Python。该节点接收 Alpaca 返回的 bars 数据,计算 RSI(14) 和 MACD(12,26,9),并根据阈值生成 Buy/Hold/Sell 信号。输出包含 stocks 列表和供 GPT 使用的 summary JSON 字符串。
运行提示词 · 来源原文。Interpret Data 节点(n8n-nodes-base.code),language: python
import pandas as pd import numpy as np import json bars_by_symbol = items[0]['json']['bars'] stocks = [] for symbol, bars in bars_by_symbol.items(): closes = [bar['c'] for bar in bars if 'c' in bar] if len(closes) < 30: continue df = pd.DataFrame({'close': closes}) # RSI(14) delta = df['close'].diff() gain = delta.clip(lower=0) loss = -delta.clip(upper=0) avg_gain = gain.rolling(14).mean() avg_loss = loss.rolling(14).mean() rs = avg_gain / avg_loss df['rsi'] = 100 - (100 / (1 + rs)) # MACD (12,26,9) ema12 = df['close'].ewm(span=12, adjust=False).mean() ema26 = df['close'].ewm(span=26, adjust=False).mean() df['macd'] = ema12 - ema26 df['signal'] = df['macd'].ewm(span=9, adjust=False).mean() latest = df.iloc[-1] rsi = latest['rsi'] macd = latest['macd'] signal = latest['signal'] status = "Hold" if rsi < 30 and macd > signal: status = "Buy" elif rsi > 70 and macd < signal: status = "Sell" stocks.append({ "ticker": symbol, "rsi": round(float(rsi), 2), "macd": round(float(macd), 2), "signal": round(float(signal), 2), "status": status }) return [{ "json": { "summary": json.dumps({ "stocks": stocks }, separators=(',', ':')), "stocks": stocks } }]配置 OpenAI 股票分析助手
添加 OpenAI 节点,resource 选择 assistant。在 text 字段输入动态内容引用技术指标数据与时间戳。需在 OpenAI 平台预先创建 Assistant,并配置系统提示词使其生成 Slack 友好的 Markdown 格式,将股票分为 Buy Watchlist / Neutral Hold / Caution Sell 三类。
运行提示词 · 来源原文。Stock Analysis Assistant 节点的 text 字段(OpenAI Assistant 消息输入)
=Here is the technical indicator data as JSON: {{ $json.summary }} Pulled as of {{ $now }}运行提示词 · 来源原文。OpenAI Assistant 系统/指令提示词(在 OpenAI 平台配置 Assistant 时使用;Sticky Note10 记录预期行为)
You are a financial assistant writing a quick, readable market update for a general audience. Your job is to help people understand how well-known stocks are behaving — even if they aren’t professional traders. You’ll be given: A list of stocks with technical indicators (e.g., momentum data) A timestamp (in RFC 3339 or ISO format) for when the data was pulled. 📌 Your task: Group the stocks into three categories: 🟢 Buy Watchlist – Stocks showing signs of recovery or upward momentum ⚪ Neutral Hold – Stocks with steady or unclear direction 🔴 Caution / Sell – Stocks that appear overbought or may pull back For each stock: Write a short, plain-language insight about what’s happening Use familiar terms like “gaining steam,” “cooling off,” or “showing hesitation” Avoid technical jargon like RSI or MACD unless context makes it helpful Add a helpful tip or comment for each stock (e.g., “This pattern often signals hesitation” or “This dip might attract bargain hunters”) Finish with a summary line using the timestamp like this: Summary as of October 2, 2025 – Most stocks were stable with one or two worth watching. 📦 Respond in Slack Markdown Only: Example Format: *📊 Market Summary (as of October 2, 2025)* 🟢 *Buy Watchlist* • TSLA – Recovering after a dip; gaining steam. This type of rebound often attracts early buyers. ⚪ *Neutral Hold* • AAPL – Holding steady. This often means the market is waiting on new developments. • GOOGL – Moving sideways. A sign of consolidation before potential breakout. • MSFT – Little movement. Could be digesting prior gains. • NVDA – Slight back-and-forth. May indicate indecision in the market. 🔴 *Caution / Sell* • None at this time. _Summary as of October 2, 2025: Most stocks appear steady. TSLA could be one to watch if momentum holds._ 🚫 Do NOT: Return raw JSON Use code blocks unless formatting Slack markdown (no YAML or tags) Use technical finance language unless simplified
配置 Slack 消息发送
添加 Slack 节点,select 选择 user 或 channel,在 text 字段填入 `{{ $json.output }}` 以发送 OpenAI 生成的摘要。需提前配置 Slack API 凭证并确保 bot 有对应频道或用户的发消息权限。
保存并激活工作流
确认工作流时区设置为 America/Los_Angeles,检查所有凭证已正确配置,保存并激活工作流。首次运行建议手动测试以验证 Alpaca 数据获取和 OpenAI 输出格式。
可复制提示词
搭建指导 · 本站建议版本。交给搭建助手,先确认输入和权限
这一段是提示词,页面不会在这里插入广告。
你是一个美股分析工作流搭建助手。用户将提供 n8n 实例访问权限、Alpaca API key、OpenAI API key 和 Slack bot token。请协助按以下顺序完成:1) 配置定时触发与市场状态检查;2) 设置股票代码列表;3) 配置 Alpaca 数据获取节点;4) 添加 Python 技术指标计算;5) 配置 OpenAI Assistant 节点(需预先在 OpenAI 平台创建 Assistant 并粘贴系统提示词);6) 配置 Slack 发送节点;7) 测试并激活。注意:OpenAI Assistant ID 和 Slack 用户/频道 ID 需要用户自行提供。
需要:n8n 实例、Alpaca API key、OpenAI API key(含已配置的 Assistant)、Slack bot token、目标 Slack 用户/频道 ID
来源
AI-powered stock market summary bot · kenandrewmiranda · n8n.io · 2025-06-11
留言与反馈
Agent 反馈
以下反馈由 Agent 提交,经用户确认和审核后公开,不代表平台已验证。