2026-09-11 · 原文发布日
n8n模板:每个工作日早晨自动生成市场行情简报
这个免费模板在每个工作日早上定时运行,分别从Twelve Data、CoinGecko、FRED、QuantGist、Marketaux拉取行情、加密币价、美债十年期收益率、宏观日历和市场新闻,统一清洗并记录数据源健康状况后交给OpenAI生成严格JSON格式的简报,校验字段后排成HTML发到Telegram,同时把全文与原始数据存入Postgres便于追溯。需要自备多家API密钥和Telegram机器人。
原文要点
这是n8n.io上的免费模板(作者Dragan)。工作流每个工作日07:45(Europe/Berlin)运行,分别从Twelve Data取ETF/外汇行情、CoinGecko取加密币价、FRED取美债十年期收益率、QuantGist取宏观日历、Marketaux取市场新闻;各源响应统一归一化并记录数据源健康状况(不臆测缺失数据),合并后交OpenAI生成严格JSON格式、带单一market_regime标签的简报,校验字段(含regime枚举与数组字段)后排成HTML发Telegram,同时把全文与原始数据插入Postgres的public.briefings表。
这次做成什么
照着该免费模板搭一条“五源抓取→归一化→AI出严格JSON简报→校验→Telegram+Postgres双落点”的每日链路,并用本站合成数据先跑通校验与入库逻辑。
准备什么
- n8n实例及该免费模板
- Twelve Data、CoinGecko、FRED、QuantGist、Marketaux五家的API key(部分有免费档,以各官网为准)
- OpenAI API凭据;模板配置模型写作gpt-5.6-luna,你的账号若无此模型需在节点里改成可用模型
- 一个Telegram bot及其chat ID,一个可用的Postgres库
具体怎么做
导入模板并核对五源节点
导入免费模板后,逐个检查五个HTTP请求节点的鉴权方式(header或query)、追踪的交易品种/国家/语言过滤和调度时区;本文未核验其内部字段,导入后以模板实际参数为准,先保留默认范围跑通再收窄。
建Postgres表
在目标库执行本文给的建表SQL,列名与类型对齐模板INSERT语句所需的jsonb字段(assets/events/news/drivers/opportunities/watch_next/raw_sources);若模板实际列名不同,以模板为准调整SQL。
配凭据并手动试跑一次
填入五家API key、OpenAI凭据、Telegram bot与chat ID、Postgres凭据,手动触发一次工作流,观察每个数据源节点的健康状态输出,确认失败源被记录而不是被静默吞掉。
验证JSON校验与两个输出
检查AI输出节点后的校验逻辑:market_regime必须落在允许枚举内、数组字段必须为数组。确认Telegram收到排版后的HTML简报,且Postgres的public.briefings新增一行、raw_sources里能找回本次原始数据。
可直接复制的材料
briefings建表SQL(独立示例)
本站按模板描述独立编写的示例表结构;导入模板后请与其INSERT语句逐列核对,不一致时以模板为准。
CREATE TABLE IF NOT EXISTS public.briefings (
id BIGSERIAL PRIMARY KEY,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
headline TEXT,
summary TEXT,
market_regime TEXT,
assets JSONB,
events JSONB,
news JSONB,
drivers JSONB,
opportunities JSONB,
watch_next JSONB,
raw_sources JSONB
);严格JSON简报生成提示词(独立改写版)
本站独立编写的替代提示词,复刻模板“严格JSON+单一regime标签”的要求;模板原提示词与regime枚举值以导入后节点为准。
你是宏观市场简报编辑。下面是今日五个数据源的归一化JSON与各源健康状态。只基于给定数据写作,某源缺失或报错时明确标注,不得编造行情数字。
输出必须是单个JSON对象,不要任何额外文字,字段如下:
{
"headline": 字符串, 不超过40字,
"summary": 字符串, 120字以内,
"market_regime": 只允许 ["risk-on","risk-off","mixed","low-volatility"] 之一,
"assets": 数组, 每项含 name/change_pct/direction,
"events": 数组, 今日宏观事件,
"news": 数组, 最多5条要闻标题,
"drivers": 数组, 主要驱动因素,
"opportunities": 数组,
"watch_next": 数组
}
数据:{{ $json.normalized }}
源健康状态:{{ $json.sourceHealth }}归一化后的合成输入数据
本站虚构练习数据,可用于在缺key时手工喂给AI节点后的校验环节做联调。
{
"normalized": {
"markets": [{ "symbol": "SPY", "change_pct": 0.6 }, { "symbol": "EURUSD", "change_pct": -0.2 }],
"crypto": [{ "symbol": "BTC", "change_pct": 1.8 }],
"us10y_yield": 4.21,
"macro_events": [{ "time": "14:30", "event": "德国CPI初值" }],
"news": [{ "title": "欧洲央行官员暗示暂缓降息" }]
},
"sourceHealth": { "twelve_data": "ok", "coingecko": "ok", "fred": "ok", "quantgist": "ok", "marketaux": "error_timeout" }
}输入与输出示例
本站虚构演示输出,字段与示例输入一一对应,非OpenAI实际返回。
输入
以上合成数据:SPY +0.6%、EURUSD -0.2%、BTC +1.8%、美债10Y 4.21%、一条德国CPI事件,marketaux新闻源超时对应输出
{"headline":"风险偏好温和回升,美股走高美元小跌","summary":"ETF与加密资产同步走强,美债10Y收益率4.21%,午后关注德国CPI;新闻源今日超时未取。","market_regime":"risk-on","assets":[{"name":"SPY","change_pct":0.6,"direction":"up"},{"name":"BTC","change_pct":1.8,"direction":"up"}],"events":[{"time":"14:30","event":"德国CPI初值"}],"news":["欧洲央行官员暗示暂缓降息"],"drivers":["加密资产走强","收益率持稳"],"opportunities":["CPI公布前波动率机会"],"watch_next":["德国CPI初值"]}做完检查这些
- 五个数据源各自的健康状态在合并数据中可见,超时源被标注为error而非被当作正常空数据
- AI输出未通过regime枚举或数组校验时工作流会拦截,不会把坏JSON直接发Telegram
- 手动触发后Telegram收到含标题与正文的HTML消息,且不超过Telegram单条消息长度限制
- public.briefings新增一行,raw_sources字段里能找回本次五个源的原始返回
容易卡住的地方
- 五家API都要单独申请key,免费档有调用频率限制,每日跑也要注意配额
- 模板所写模型gpt-5.6-luna在你的OpenAI账号可能不可用,需在节点改选实际可用模型,费用以你的账号为准
- 调度固定在07:45 Europe/Berlin,国内使用时需自行改时区与时刻
- Telegram单条消息约4096字符上限,简报过长时需拆分或截断
- 本文SQL与提示词为本站独立示例,与模板内部真实字段可能存在出入,导入后必须核对
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Send daily AI market briefings to Telegram, Discord and Postgres with OpenAI, Twelve Data, CoinGecko, FRED, QuantGist and Marketaux
- 原作者
- Dragan
- 原始发布日期
- 2026-09-10T20:09:15.352Z
- 来源
- https://n8n.io/workflows/19457