n8n工作计划AI 评分 · 待评分AI 辅助编辑·未发现明显提示词注入风险n8n.io

n8n 自动化美股分析机器人:RSI 与 MACD 指标每小时推送 Slack 摘要

输入:股票代码列表;处理:定时触发 → Alpaca 数据获取 → Python 计算技术指标 → OpenAI 生成分析摘要;输出:Slack 频道/用户收到的分类买卖建议

有一点经验步骤流程提示词
给谁
需要自动化美股监控并接收 Slack 摘要的 n8n 用户
你会得到
美股交易时段每小时自动获取数据、计算 RSI/MACD、生成买卖信号并以 Slack 消息推送
你需要
n8n · 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

步骤

  1. 配置定时触发与市场状态检查

    在 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 节点优雅退出。

  2. 设置股票代码列表

    添加 Edit Fields (Set) 节点,在 JSON 输出中定义要监控的股票代码。默认列表为:AAPL, MSFT, NVDA, TSLA, AMZN, GOOGL, META, JPM, XOM, UNH, GME。可根据需要修改此列表。

  3. 配置 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 为当天日期。

  4. 添加 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
        }
    }]
  5. 配置 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
  6. 配置 Slack 消息发送

    添加 Slack 节点,select 选择 user 或 channel,在 text 字段填入 `{{ $json.output }}` 以发送 OpenAI 生成的摘要。需提前配置 Slack API 凭证并确保 bot 有对应频道或用户的发消息权限。

  7. 保存并激活工作流

    确认工作流时区设置为 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

留言与反馈

试过这个方法吗?分享效果、遇到的问题或改进建议。留言审核后公开,请勿填写敏感信息。

正在加载…

    相关用例