OpenClaw金融实战:从零搭建每日行情分析报告自动生成系统,效率提升10倍
通过OpenClaw,我们成功搭建了一套完全自动化的每日行情分析报告生成系统。这套系统不仅大大提高了我们的工作效率,还让我们能够从繁琐的数据处理工作中解放出来,专注于更有价值的投资决策。舆情分析:接入新闻和社交媒体数据,分析市场情绪对股价的影响量化策略回测:添加量化策略回测功能,自动评估策略的历史表现实时监控:实现盘中实时监控,当股票达到预设条件时自动发送提醒多市场支持:扩展支持港股、美股和期货市

一、引言
在金融投资领域,信息就是金钱。但每天收盘后,面对海量的行情数据、财经新闻、公司公告和研报,即使是经验丰富的分析师,也需要花费1-2小时才能整理出一份像样的每日行情分析报告。这个过程不仅枯燥重复,还容易因为人为疲劳导致数据错误或分析遗漏,更重要的是,当你完成报告时,市场可能已经发生了新的变化。
我曾经也是这样,每天下班后还要花大量时间处理数据、制作图表、撰写分析。直到我接触到了OpenClaw这个面向本地优先、模型无关的AI Agent操作系统。经过一个月的实战打磨,我成功搭建了一套完全自动化的每日行情分析报告生成系统。现在,每天收盘后15分钟,我就能在飞书上收到一份包含大盘走势、行业轮动、自选股分析、风险提示和明日操作建议的完整报告,彻底解放了双手,让我有更多时间专注于投资决策本身。
本文将详细分享这套系统的完整搭建过程,从OpenClaw环境配置到金融数据源接入,从多维度分析逻辑设计到智能报告生成,再到定时任务与自动推送,所有步骤均经过2026年最新版本实测,代码可直接复制使用。
二、为什么选择OpenClaw做金融数据分析
市面上有很多AI工具可以做数据分析,但OpenClaw在金融场景下有着不可替代的优势:
2.1 本地优先,数据安全有保障
金融数据属于高度敏感信息,使用云端AI工具存在数据泄露风险。OpenClaw采用"本地优先"的设计哲学,所有数据处理和模型推理都在本地完成,数据永远不会离开你的电脑。同时,它支持对接本地大模型(如Qwen2.5、GLM4.7),完全不需要依赖外部API,真正做到了数据安全可控。
2.2 沙箱执行,代码运行安全
OpenClaw内置了Docker沙箱环境,所有Python代码都在隔离的沙箱中执行。这意味着即使分析代码出现bug或被恶意注入,也不会影响你的主系统。对于金融分析这种涉及资金安全的场景,这一点至关重要。
2.3 多渠道接入,随时随地获取报告
OpenClaw支持对接飞书、Telegram、微信、邮件等50+消息渠道。你可以在任何设备上接收生成的报告,甚至可以通过手机发送指令,让OpenClaw实时生成特定股票的分析报告。
2.4 技能扩展,按需加载功能
OpenClaw采用插件化架构,你可以根据需要安装各种金融技能,如技术指标计算、财报解析、舆情分析等。不需要的技能不会被加载,保证了系统的轻量和高效。
三、系统整体设计
我们的每日行情分析报告自动生成系统采用模块化设计,整体架构如下:
整个系统分为五个核心模块:
- 数据采集模块:定时从多个数据源获取行情数据、财经新闻和公司公告
- 数据预处理模块:对原始数据进行清洗、去重、格式转换和标准化
- 多维度分析模块:从技术面、基本面、资金面和舆情四个维度进行深度分析
- 报告生成模块:将分析结果整合为结构化的Markdown报告,并自动生成可视化图表
- 推送与通知模块:将生成的报告定时推送到指定的消息渠道
系统的核心执行流程如下:
- 每天15:00(A股收盘时间)定时触发任务
- 数据采集模块从akshare获取当日行情数据,从Tavily获取财经新闻
- 数据预处理模块对数据进行清洗和标准化处理
- 多维度分析模块调用OpenClaw的Python沙箱执行分析代码
- 报告生成模块根据分析结果生成Markdown格式的报告,并插入图表
- 推送与通知模块将报告发送到飞书群或个人聊天
- 所有操作日志和历史报告自动保存到本地,方便后续查阅
四、分步实现
4.1 环境配置与OpenClaw部署
首先,我们需要在本地部署OpenClaw。OpenClaw支持Windows、macOS和Linux系统,部署过程非常简单。
步骤1:安装Node.js和Docker
OpenClaw基于Node.js开发,代码执行需要Docker沙箱环境。
# 安装Node.js(推荐v20以上版本)
# Windows/macOS:从官网下载安装包
# Linux:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# 安装Docker
# Windows/macOS:安装Docker Desktop
# Linux:
curl -fsSL https://get.docker.com | sudo bash -
步骤2:安装OpenClaw
# 克隆OpenClaw仓库
git clone https://github.com/openclaw-ai/openclaw.git
cd openclaw
# 安装依赖
npm install
# 构建项目
npm run build
# 启动OpenClaw Gateway
npm start
步骤3:配置大模型
打开config.json文件,配置你要使用的大模型。这里我推荐使用智谱AI的GLM4.7,它在金融领域的表现非常出色,而且价格实惠。
{
"models": [
{
"provider": "zhipu",
"apiKey": "your-zhipu-api-key",
"model": "glm-4-7b",
"isDefault": true
}
],
"channels": [
{
"type": "lark",
"appId": "your-lark-app-id",
"appSecret": "your-lark-app-secret",
"verificationToken": "your-lark-verification-token"
}
]
}
步骤4:验证部署
打开浏览器访问http://localhost:18789,如果能看到OpenClaw的Web界面,说明部署成功。
4.2 金融数据源接入
我们使用akshare作为主要的金融数据源,它是一个免费、开源的Python财经数据接口库,提供了丰富的A股、港股、美股行情数据和基本面数据。
首先,在OpenClaw中安装akshare技能:
# 在OpenClaw终端中执行
pip install akshare pandas matplotlib seaborn
然后,创建一个名为financial_data_agent.md的Agent配置文件,定义数据采集和分析的逻辑:
# 金融数据分析Agent
## 角色定义
你是一个专业的金融数据分析专家,擅长股票行情分析、技术指标计算和投资报告撰写。你拥有丰富的金融知识和实战经验,能够从海量数据中提取有价值的信息。
## 核心能力
1. 使用akshare获取A股、港股、美股的实时和历史行情数据
2. 计算各种技术指标(MA、MACD、KDJ、RSI、BOLL等)
3. 分析大盘走势、行业轮动和个股表现
4. 生成专业的金融分析报告,包含文字分析和可视化图表
5. 提供客观、理性的投资建议和风险提示
## 工作流程
1. 获取用户指定日期的行情数据
2. 计算大盘指数的技术指标
3. 分析行业板块的涨跌幅排名和资金流向
4. 分析用户自选股的表现
5. 整合所有分析结果,生成Markdown格式的报告
6. 保存报告到本地,并发送到指定渠道
4.3 数据预处理与清洗
金融原始数据往往存在缺失值、异常值和格式不一致的问题,需要进行预处理才能用于分析。我们在OpenClaw中编写一个数据清洗函数:
import akshare as ak
import pandas as pd
import numpy as np
from datetime import datetime
def clean_stock_data(df):
"""清洗股票行情数据"""
# 重命名列名,使其更易读
df = df.rename(columns={
'代码': 'code',
'名称': 'name',
'最新价': 'close',
'涨跌幅': 'change_percent',
'涨跌额': 'change_amount',
'成交量': 'volume',
'成交额': 'turnover',
'振幅': 'amplitude',
'最高': 'high',
'最低': 'low',
'今开': 'open',
'昨收': 'pre_close',
'量比': 'volume_ratio',
'换手率': 'turnover_rate',
'市盈率-动态': 'pe_ttm',
'市净率': 'pb'
})
# 转换数据类型
numeric_cols = ['close', 'change_percent', 'change_amount', 'volume', 'turnover',
'amplitude', 'high', 'low', 'open', 'pre_close', 'volume_ratio',
'turnover_rate', 'pe_ttm', 'pb']
df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric, errors='coerce')
# 处理缺失值
df = df.dropna(subset=['close', 'change_percent'])
# 过滤掉停牌的股票
df = df[df['volume'] > 0]
# 添加日期列
df['date'] = datetime.now().strftime('%Y-%m-%d')
return df
def get_daily_market_data():
"""获取每日市场数据"""
# 获取A股所有股票实时行情
stock_df = ak.stock_zh_a_spot_em()
stock_df = clean_stock_data(stock_df)
# 获取大盘指数数据
index_codes = ['sh000001', 'sz399001', 'sz399006', 'sh000688']
index_names = ['上证指数', '深证成指', '创业板指', '科创50']
index_data = []
for code, name in zip(index_codes, index_names):
index_df = ak.stock_zh_index_daily_em(symbol=code)
latest = index_df.iloc[-1]
index_data.append({
'code': code,
'name': name,
'close': latest['close'],
'change_percent': latest['changepercent'],
'volume': latest['volume'],
'turnover': latest['turnover']
})
index_df = pd.DataFrame(index_data)
# 获取行业板块数据
industry_df = ak.stock_board_industry_name_em()
industry_df = industry_df.rename(columns={
'板块名称': 'name',
'涨跌幅': 'change_percent',
'总成交量': 'volume',
'总成交额': 'turnover',
'上涨家数': 'up_count',
'下跌家数': 'down_count'
})
return stock_df, index_df, industry_df
4.4 多维度分析逻辑设计
我们从四个维度对市场进行全面分析:大盘走势分析、行业轮动分析、自选股分析和风险提示。
大盘走势分析
def analyze_market_trend(index_df):
"""分析大盘走势"""
analysis = []
# 计算涨跌家数
up_count = len(stock_df[stock_df['change_percent'] > 0])
down_count = len(stock_df[stock_df['change_percent'] < 0])
flat_count = len(stock_df[stock_df['change_percent'] == 0])
analysis.append(f"今日A股市场整体表现:上涨{up_count}家,下跌{down_count}家,平盘{flat_count}家。")
# 分析主要指数表现
for _, row in index_df.iterrows():
if row['change_percent'] > 0:
trend = "上涨"
elif row['change_percent'] < 0:
trend = "下跌"
else:
trend = "平盘"
analysis.append(f"{row['name']}收盘{row['close']:.2f}点,{trend}{abs(row['change_percent']):.2f}%,成交额{row['turnover']/1e8:.2f}亿元。")
# 判断市场情绪
if up_count > down_count * 2:
sentiment = "非常乐观"
elif up_count > down_count:
sentiment = "偏乐观"
elif up_count < down_count / 2:
sentiment = "非常悲观"
elif up_count < down_count:
sentiment = "偏悲观"
else:
sentiment = "中性"
analysis.append(f"市场情绪:{sentiment}")
return "\n".join(analysis)
行业轮动分析
def analyze_industry_rotation(industry_df, top_n=5):
"""分析行业轮动"""
analysis = []
# 涨幅前5的行业
top_gainers = industry_df.sort_values('change_percent', ascending=False).head(top_n)
analysis.append(f"\n### 涨幅前{top_n}行业")
for _, row in top_gainers.iterrows():
analysis.append(f"- {row['name']}:上涨{row['change_percent']:.2f}%,上涨{row['up_count']}家,下跌{row['down_count']}家")
# 跌幅前5的行业
top_losers = industry_df.sort_values('change_percent', ascending=True).head(top_n)
analysis.append(f"\n### 跌幅前{top_n}行业")
for _, row in top_losers.iterrows():
analysis.append(f"- {row['name']}:下跌{abs(row['change_percent']):.2f}%,上涨{row['up_count']}家,下跌{row['down_count']}家")
return "\n".join(analysis)
自选股分析
def analyze_watchlist(stock_df, watchlist):
"""分析自选股"""
analysis = []
analysis.append("\n### 自选股表现")
for stock_code in watchlist:
stock_info = stock_df[stock_df['code'] == stock_code]
if len(stock_info) == 0:
analysis.append(f"- {stock_code}:未找到数据")
continue
stock_info = stock_info.iloc[0]
if stock_info['change_percent'] > 0:
trend = "上涨"
elif stock_info['change_percent'] < 0:
trend = "下跌"
else:
trend = "平盘"
analysis.append(f"- {stock_info['name']}({stock_info['code']}):收盘价{stock_info['close']:.2f}元,{trend}{abs(stock_info['change_percent']):.2f}%,换手率{stock_info['turnover_rate']:.2f}%,市盈率(TTM){stock_info['pe_ttm']:.2f}")
return "\n".join(analysis)
4.5 智能报告生成与可视化
OpenClaw最强大的功能之一就是能够自动生成包含图表的专业报告。我们使用matplotlib和seaborn生成可视化图表,然后将图表嵌入到Markdown报告中。
import matplotlib.pyplot as plt
import seaborn as sns
import base64
from io import BytesIO
def generate_chart(df, x_col, y_col, title, chart_type='bar'):
"""生成图表并转换为base64编码"""
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文显示问题
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10, 6))
if chart_type == 'bar':
sns.barplot(x=x_col, y=y_col, data=df, palette='viridis')
elif chart_type == 'line':
sns.lineplot(x=x_col, y=y_col, data=df, marker='o')
plt.title(title, fontsize=14)
plt.xlabel(x_col, fontsize=12)
plt.ylabel(y_col, fontsize=12)
plt.xticks(rotation=45)
plt.tight_layout()
# 保存图片到内存
buffer = BytesIO()
plt.savefig(buffer, format='png', dpi=100)
buffer.seek(0)
image_base64 = base64.b64encode(buffer.read()).decode('utf-8')
plt.close()
return f""
def generate_daily_report(market_analysis, industry_analysis, watchlist_analysis, index_df, industry_df):
"""生成每日行情分析报告"""
date = datetime.now().strftime('%Y年%m月%d日')
# 生成行业涨跌幅图表
top_10_industries = industry_df.sort_values('change_percent', ascending=False).head(10)
industry_chart = generate_chart(top_10_industries, 'name', 'change_percent', '行业涨跌幅排名(前10)', 'bar')
report = f"""# {date} A股每日行情分析报告
## 一、大盘走势概览
{market_analysis}
## 二、行业轮动分析
{industry_analysis}
{industry_chart}
## 三、自选股分析
{watchlist_analysis}
## 四、明日操作建议
1. 整体来看,今日市场{market_analysis.split('市场情绪:')[-1]},操作上建议{ '谨慎追高,控制仓位' if '悲观' in market_analysis else '逢低布局,关注优质成长股' }。
2. 行业方面,重点关注{top_10_industries.iloc[0]['name']}、{top_10_industries.iloc[1]['name']}等涨幅居前的板块。
3. 回避近期涨幅过大、估值过高的个股,注意防范回调风险。
## 五、风险提示
1. 本报告仅供参考,不构成任何投资建议。
2. 股市有风险,投资需谨慎。
3. 请根据自己的风险承受能力和投资目标做出投资决策。
---
报告生成时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
"""
return report
4.6 定时任务与自动推送
最后,我们使用schedule库设置定时任务,让系统每天15:10自动生成报告并推送到飞书。
import schedule
import time
from openclaw import Client
def send_report_to_lark(report_content):
"""发送报告到飞书"""
client = Client()
lark_channel = client.get_channel('lark')
lark_channel.send_message(report_content)
def daily_job():
"""每日任务"""
print("开始生成每日行情分析报告...")
# 获取数据
global stock_df
stock_df, index_df, industry_df = get_daily_market_data()
# 分析数据
market_analysis = analyze_market_trend(index_df)
industry_analysis = analyze_industry_rotation(industry_df)
watchlist_analysis = analyze_watchlist(stock_df, ['000001', '000002', '600519', '300750', '002594'])
# 生成报告
report = generate_daily_report(market_analysis, industry_analysis, watchlist_analysis, index_df, industry_df)
# 保存报告到本地
with open(f"daily_report_{datetime.now().strftime('%Y%m%d')}.md", "w", encoding="utf-8") as f:
f.write(report)
# 发送报告到飞书
send_report_to_lark(report)
print("报告生成并发送成功!")
# 设置定时任务,每天15:10执行
schedule.every().day.at("15:10").do(daily_job)
print("每日行情分析报告系统已启动,将在每天15:10自动生成报告。")
# 运行定时任务
while True:
schedule.run_pending()
time.sleep(60)
五、实战效果展示
系统运行后,每天15:10你会在飞书上收到这样一份报告:
- 清晰的大盘走势概览,包含主要指数的涨跌幅和成交额
- 详细的行业轮动分析,展示涨幅和跌幅前5的行业
- 直观的行业涨跌幅排名图表
- 你的自选股的详细表现分析
- 客观的明日操作建议和风险提示
报告完全采用Markdown格式,排版美观,重点突出,你可以直接转发给朋友或保存到笔记中。
六、性能优化与稳定性保障
为了保证系统能够7x24小时稳定运行,我做了以下优化:
-
异常处理:在所有数据获取和分析函数中添加了完善的异常处理机制,即使某个数据源暂时不可用,系统也不会崩溃,会继续执行其他部分。
-
重试机制:对于网络请求失败的情况,添加了自动重试机制,最多重试3次,每次间隔5秒。
-
日志记录:系统会记录所有操作日志,包括数据获取时间、分析耗时、报告生成时间等,方便后续排查问题。
-
资源限制:限制了Docker沙箱的CPU和内存使用,防止分析任务占用过多系统资源。
-
备份机制:每天生成的报告都会自动备份到本地,同时会同步到云盘,防止数据丢失。
七、总结与展望
通过OpenClaw,我们成功搭建了一套完全自动化的每日行情分析报告生成系统。这套系统不仅大大提高了我们的工作效率,还让我们能够从繁琐的数据处理工作中解放出来,专注于更有价值的投资决策。
未来,我计划在这套系统的基础上,进一步扩展以下功能:
- 舆情分析:接入新闻和社交媒体数据,分析市场情绪对股价的影响
- 量化策略回测:添加量化策略回测功能,自动评估策略的历史表现
- 实时监控:实现盘中实时监控,当股票达到预设条件时自动发送提醒
- 多市场支持:扩展支持港股、美股和期货市场的分析
OpenClaw作为一个强大的AI Agent操作系统,在金融领域有着巨大的应用潜力。相信随着技术的不断发展,它将成为每个投资者和分析师的得力助手。
👉 点击我的头像进入主页,关注专栏第一时间收到更新提醒,有问题评论区交流,看到都会回。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)