
1. 项目概述当小龙虾遇上股票异动最近在量化圈和AI智能体圈子里一个叫OpenClaw大家戏称“小龙虾”的开源项目火得不行。它本质上是一个AI智能体框架能让大语言模型LLM像人一样去操作电脑、使用软件、执行复杂的多步骤任务。而我作为一个常年和股票数据、监控脚本打交道的老股民兼技术爱好者第一时间就在想这玩意儿能不能帮我盯盘传统的股票异动监控要么是花钱买昂贵的专业软件要么是自己写爬虫脚本定时拉取数据再用一堆if-else规则去判断。维护起来麻烦规则僵化而且对新闻、舆情这类非结构化信息的处理能力很弱。OpenClaw的出现让我看到了新的可能性能不能训练一个“AI操盘手”让它7x24小时坐在电脑前像最敏锐的交易员一样实时浏览财经网站、解读新闻、分析K线形态一旦发现符合我策略的异动就立刻通过飞书或微信通知我这个想法让我兴奋了好几天。经过一番折腾我真的用OpenClaw搭建了一套个人专属的股票异动监控系统。它不仅能监控价格和成交量的技术性异动还能理解财经新闻的潜在影响甚至能对异动原因进行初步分析。今天我就把这套从环境部署到策略编写的完整方案拆解给你手把手教你如何用这只“小龙虾”为你自己的投资保驾护航。2. OpenClaw核心能力与选型解析在动手之前我们得先搞清楚OpenClaw到底能做什么以及为什么它是实现这个想法的合适工具而不是直接用Python写脚本。2.1 OpenClaw是什么为什么是它OpenClaw不是一个现成的股票监控软件而是一个“智能体基础框架”。你可以把它理解为一个给大模型配上的“手脚”和“眼睛”。大模型比如GPT-4、DeepSeek、本地部署的Qwen等是大脑负责理解和规划任务OpenClaw则提供了一系列“技能”Skills让大脑能通过代码去控制鼠标键盘、读取屏幕信息、操作浏览器、调用API等。对于股票监控这个场景OpenClaw的几个核心优势是传统脚本无法比拟的处理非结构化信息的能力脚本很难真正“读懂”一篇突然发布的公司公告或行业新闻并判断其利好利空等级。但大模型可以。OpenClaw可以让AI智能体去打开特定的新闻页面抓取正文然后让大模型进行摘要和情感分析。强大的任务规划与纠错能力监控任务可能是复杂的。例如“监控A股所有科创板股票如果出现‘放量突破20日均线’且‘当日有相关正面研报发布’则通知我”。OpenClaw的智能体可以自主拆解这个任务先打开交易软件获取股票列表再逐个检查K线同时打开研报网站搜索最后综合判断。如果中途某个网站打不开它还能尝试备用方案。低代码/自然语言交互你可以用自然语言描述你的监控需求尽管目前完全依赖自然语言还不成熟然后通过配置和少量代码让智能体学会。这比从头编写、调试复杂的多线程爬虫和分析逻辑要直观得多。无缝集成现有工具OpenClaw可以通过技能Skill轻松集成像pywencai问财这样的专业金融数据查询库也可以连接飞书、企业微信等通讯工具形成“感知-分析-决策-通知”的闭环。2.2 核心组件与我们的技术栈选型一个完整的OpenClaw智能体系统包含几个部分我们的股票监控方案会用到其中的大多数控制器Controller大脑中的大脑负责协调。我们选择直接使用OpenClaw框架本身。大语言模型LLM智能体的核心认知引擎。考虑到股票数据分析和中文财经新闻理解的需求以及对长期运行成本的把控我推荐以下方案云端API高精度推荐初期使用DeepSeek-V3或GPT-4o。它们对金融文本的理解和复杂指令的跟随能力最强能极大提高监控的准确性。你需要准备相应的API Key。本地模型高隐私零成本通过Ollama部署Qwen2.5-7B-Instruct或Qwen2.5-14B-Instruct。Qwen系列对中文和金融领域支持很好14B参数版本的能力已足够处理我们的监控逻辑。本地部署可以完全杜绝数据外泄且没有调用次数限制。技能Skills这是OpenClaw的“手脚”。我们需要为它装备以下关键技能pywencai技能这是重中之重。我们需要自己编写或找一个现成的Skill让OpenClaw能够以智能体的方式调用pywencai库。pywencai可以直接从同花顺问财获取极其强大的条件选股数据例如“今日涨幅大于5%且成交量较昨日放大一倍”这样的自然语言查询它直接返回股票列表。我们将让OpenClaw智能体定期执行这样的查询。Web Browsing技能让智能体能自动打开东方财富网、财联社等新闻站抓取实时快讯或个股公告。Notification技能集成飞书/钉钉/微信机器人用于发送报警消息。File Operations技能用于读写本地监控日志、股票池列表等配置文件。记忆Memory智能体需要记住自己的任务、之前的监控结果以避免重复报警。OpenClaw支持多种记忆后端对于监控任务简单的FileMemory文件记忆或SQLiteMemory通常就够用了。我的选型建议为了平衡性能、成本和隐私我最终采用了混合模式。核心的监控逻辑判断如“这条新闻是否构成重大利好”使用本地Ollama部署的Qwen2.5-14B模型。只有在需要对非常复杂的市场事件进行分析时才后备调用一次云端DeepSeek-V3的API。这样既保证了7x24小时稳定运行的成本可控又在关键处保留了最强的分析能力。3. 环境部署与核心技能配置工欲善其事必先利其器。这一步我们会完成OpenClaw及其所需环境的搭建并重点配置好金融数据抓取这个核心技能。3.1 基础环境部署以Ubuntu为例OpenClaw官方推荐使用Docker部署这能避免复杂的Python环境依赖问题也是最干净的方式。# 1. 确保系统已安装Docker和Docker Compose sudo apt update sudo apt install docker.io docker-compose -y # 2. 拉取OpenClaw的Docker镜像这里以其中一个常用版本为例请根据官方最新文档调整 docker pull openclaw/openclaw:latest # 3. 创建一个工作目录并编写docker-compose.yml mkdir ~/stock_monitor cd ~/stock_monitor vim docker-compose.ymldocker-compose.yml文件内容如下。这里关键是指定了Ollama作为本地模型服务并挂载了本地目录用于持久化配置和数据。version: 3.8 services: openclaw: image: openclaw/openclaw:latest container_name: stock_openclaw ports: - 3000:3000 # OpenClaw Web UI端口 environment: - OLLAMA_BASE_URLhttp://ollama:11434 # 指向Ollama服务 - DEFAULT_MODELqwen2.5:14b # 默认使用的模型 volumes: - ./data:/app/data # 挂载数据目录 - ./skills:/app/skills # 挂载自定义技能目录 - ./config:/app/config # 挂载配置目录 depends_on: - ollama restart: unless-stopped ollama: image: ollama/ollama:latest container_name: stock_ollama ports: - 11434:11434 volumes: - ./ollama_data:/root/.ollama # 挂载Ollama模型数据 restart: unless-stopped# 4. 启动服务 docker-compose up -d # 5. 在Ollama容器内拉取我们需要的模型 docker exec stock_ollama ollama pull qwen2.5:14b # 如果需要也可以拉取一个小模型做简单任务 docker exec stock_ollama ollama pull qwen2.5:7b启动后访问http://你的服务器IP:3000就能看到OpenClaw的Web界面了。注意国内拉取Docker镜像和Ollama模型可能较慢建议配置镜像加速器。Ollama模型文件较大14B约8GB请确保磁盘空间充足。3.2 核心技能配置让OpenClaw学会“问财”这是整个项目的灵魂。我们需要创建一个自定义Skill让OpenClaw能调用pywencai。首先在宿主机不是容器内的~/stock_monitor/skills目录下创建我们的技能文件夹和文件。mkdir -p ~/stock_monitor/skills/pywencai_skill cd ~/stock_monitor/skills/pywencai_skill创建技能描述文件skill.json{ name: pywencai_query, description: 使用pywencai库查询股票市场数据。可以根据自然语言条件进行选股查询。, inputs: { query: { type: string, description: 问财格式的自然语言查询语句例如今日涨幅大于5% 成交量放大 }, query_type: { type: string, description: 查询类型可选 stock股票, fund等默认为 stock, default: stock } }, outputs: { result: { type: string, description: 查询返回的结果通常是股票列表和相关数据的表格文本 } } }创建技能执行文件skill.py。这里有个大坑OpenClaw的Docker容器内可能没有pywencai库且该库有复杂的依赖。更稳妥的做法是我们在宿主机上运行一个独立的Python服务让OpenClaw通过HTTP API来调用。我们采用更优雅的方案编写一个简单的FastAPI服务作为“数据桥梁”。在宿主机上创建~/stock_monitor/pywencai_server.pyfrom fastapi import FastAPI, HTTPException from pydantic import BaseModel import pywencai import pandas as pd import uvicorn app FastAPI(titlePyWenCai Query Service) class QueryRequest(BaseModel): query: str query_type: str stock app.post(/query) async def query_wencai(req: QueryRequest): try: # 调用pywencai result_df pywencai.get(queryreq.query, query_typereq.query_type) if result_df is None or result_df.empty: return {result: 未查询到相关数据。} # 将DataFrame转换为易读的字符串表格 # 这里可以做一些处理比如只保留关键列 output result_df[[股票代码, 股票名称, 最新价, 涨跌幅, 成交量]].to_string(indexFalse) return {result: output} except Exception as e: raise HTTPException(status_code500, detailf查询失败: {str(e)}) if __name__ __main__: # 在宿主机上运行这个服务端口5000 uvicorn.run(app, host0.0.0.0, port5000)在宿主机上安装依赖并运行此服务pip install fastapi uvicorn pywencai pandas python ~/stock_monitor/pywencai_server.py 现在我们修改OpenClaw的技能让它调用这个HTTP服务。回到skill.pyimport requests import json def execute(inputs): 执行pywencai查询 query inputs.get(query) query_type inputs.get(query_type, stock) if not query: return {result: 错误查询语句不能为空。} try: # 调用我们刚启动的本地服务 response requests.post( http://host.docker.internal:5000/query, # Docker容器内访问宿主机的特殊域名 json{query: query, query_type: query_type}, timeout30 ) response.raise_for_status() data response.json() return {result: data.get(result, 无返回结果)} except requests.exceptions.ConnectionError: return {result: 错误无法连接到pywencai查询服务请确保服务已启动。} except requests.exceptions.Timeout: return {result: 错误查询服务响应超时。} except Exception as e: return {result: f查询过程中发生未知错误: {str(e)}} # 以下函数是OpenClaw技能框架要求的 def get_schema(): with open(skill.json, r) as f: return json.load(f)关键技巧host.docker.internal这个域名在Docker容器内指向宿主机这是容器访问宿主机服务的最简单方式。如果遇到连接问题可以改为使用宿主机的实际局域网IP。最后我们需要在OpenClaw的Web UI中“安装”这个技能。通常流程是在UI的技能管理页面选择“从文件夹添加”或“从Git添加”指向我们本地的~/stock_monitor/skills/pywencai_skill目录。安装成功后你的智能体就拥有了“问财”的能力。4. 股票异动监控智能体的设计与实现环境搭好了技能装上了现在我们来设计这个智能体本身。它不是一个简单的脚本而是一个有“记忆”、会“思考”、能“执行”的AI助手。4.1 智能体工作流设计我们的监控智能体将按以下流程工作这是一个循环任务初始化 ↓ [循环开始] ↓ 1. 执行监控任务 ├── 技术面监控 (使用pywencai技能) │ └── 查询预设条件如突破布林带上轨、量比3等 ├── 基本面/新闻面监控 (使用Web Browsing技能) │ └── 抓取指定新闻源的最新公告和快讯 └── 数据整合与去重 ↓ 2. 异动分析与判断 ├── 将原始数据股票列表、新闻文本送入LLM ├── LLM根据预设策略判断是否构成“异动” ├── 判断标准示例 │ - 技术面放量长阳 突破关键压力位 │ - 新闻面公司发布超预期业绩预告 技术形态良好 └── 生成异动分析摘要 ↓ 3. 决策与通知 ├── 与“记忆”比对过滤掉近期已报警的相同异动 ├── 如果发现新异动则调用Notification技能 └── 通过飞书机器人发送包含股票代码、名称、异动类型、简要分析和时间戳的消息 ↓ 4. 记录与等待 ├── 将本次监控结果记录到记忆文件或数据库 └── 等待下一个监控周期如每5分钟 ↓ [跳转至步骤1]4.2 在OpenClaw中配置监控智能体我们主要通过OpenClaw的Web UI来配置智能体这比写代码更直观。核心是编写智能体的“初始指令”System Prompt和设置其技能。初始指令System Prompt示例你是一个专业的A股市场异动监控AI助手。你的唯一任务是持续监控市场发现潜在的交易机会或风险信号。 你的工作流程 1. **技术面扫描**每5分钟使用pywencai_query技能执行以下查询这是一个示例用户后续可修改 - “今日涨幅大于7% 且 成交量较昨日放大150%” - “股价突破20日新高 且 换手率大于10%” - “量比大于5 现价上穿分时均线” 你将获得一个股票列表。 2. **新闻面监控**每10分钟使用web_browse技能访问财联社快讯页面例如https://www.cls.cn/telegraph抓取最近10条快讯。重点关注涉及“业绩预告”、“重大合同”、“政策利好”、“减持公告”、“风险警示”等关键词的新闻。 3. **信息整合与判断** - 将技术面选出的股票与新闻中提到的公司进行关联。 - 对于每一只候选股票综合其技术形态和最新消息判断其异动性质强势启动、利好兑现、利空出尽、主力出货等。 - 判断标准需严格。例如仅有涨幅而无量能配合或仅有中性新闻而无技术突破均不视为有效异动。 4. **报警与记录** - 只有当你判断为“高置信度”异动时如技术突破实质性利好才使用feishu_notify技能发送报警。 - 报警信息必须清晰包含[股票代码名称]、[异动类型]、[核心原因]、[建议关注度高/中/低]。 - 使用file_memory技能将本次所有监控到的股票无论是否报警记录到日志文件并记录时间戳。下次监控时先读取日志避免对同一异动在短时间内重复报警。 请严格按照此流程执行保持冷静、客观。你的分析直接服务于投资决策务必严谨。技能绑定在智能体配置页面确保它已拥有我们配置好的pywencai_query、web_browse、feishu_notify需额外配置飞书机器人技能和file_memory等技能。任务触发我们可以设置一个“计划任务”Cron Job来定期唤醒这个智能体。在OpenClaw的“工作流”或“任务”模块中创建一个定时任务每5分钟向该智能体发送一条指令例如“请执行例行监控扫描”。智能体收到指令后就会根据初始指令中的流程开始工作。4.3 飞书通知技能配置示例为了让报警能及时送达手机配置一个飞书机器人技能是必要的。这通常也是一个自定义技能通过调用飞书机器人的Webhook来发送消息。在飞书群中创建一个群机器人获取其Webhook URL。在OpenClaw的skills目录下创建feishu_notify技能其skill.py的核心部分如下import requests import json def execute(inputs): webhook_url https://open.feishu.cn/open-apis/bot/v2/hook/你的实际Webhook令牌 title inputs.get(title, 股票异动监控警报) content inputs.get(content, ) if not content: return {success: False, message: 内容不能为空} # 飞书机器人支持富文本消息格式 message { msg_type: post, content: { post: { zh_cn: { title: title, content: [ [{tag: text, text: content}] ] } } } } try: resp requests.post(webhook_url, jsonmessage, timeout10) if resp.status_code 200 and resp.json().get(code) 0: return {success: True, message: 通知发送成功} else: return {success: False, message: f飞书API返回错误: {resp.text}} except Exception as e: return {success: False, message: f发送请求失败: {str(e)}}这样当智能体需要报警时只需调用feishu_notify技能传入标题和内容即可。5. 高级策略与实战调优基础监控跑起来后你会发现它可能有很多“噪音”。如何让它变得更聪明、更精准这就需要引入更高级的策略和持续的调优。5.1 从简单规则到“AI策略引擎”最初的监控基于固定的pywencai查询语句和简单的LLM判断。我们可以将其升级为一个动态的“策略引擎”。实现方法创建一个策略配置文件如strategies.yaml让智能体在每次执行时读取。strategies: - name: 强势突破策略 technical_query: 今日涨幅大于5% 股价创20日新高 成交量大于5日均量2倍 news_keywords: [业绩预增, 中标, 技术突破] logic: 当技术面满足条件且当日有正面新闻时触发高置信度警报。仅有技术面满足时触发中置信度警报。 confidence_level: high # 该策略整体权重 - name: 超跌反弹策略 technical_query: 连续三日下跌且累计跌幅大于15% 今日振幅大于10% 现价位于当日均价上方 news_keywords: [利空出尽, 回购, 高管增持] logic: 寻找短期超跌后出现止跌企稳信号的股票配合公司或产业资本行动的消息。 confidence_level: medium - name: 风险规避策略 technical_query: 当日跌幅大于7% 成交量放大 news_keywords: [减持, 立案调查, 业绩暴雷, 风险警示] logic: 技术破位伴随实质性利空触发风险警报。 alert_type: risk然后修改智能体的初始指令让它循环读取这些策略逐一执行查询和判断。这样你无需修改智能体代码只需编辑YAML文件就能增加、删除或调整监控策略。5.2 记忆优化与状态管理OpenClaw的智能体默认有“会话记忆”但针对监控任务我们需要更结构化的长期记忆。问题智能体可能忘记一小时内已经报过某只股票的警导致重复通知。解决方案使用SQLiteMemory技能或自定义一个简单的文件数据库技能。每报告一只股票就在数据库里记录股票代码、异动类型、报告时间。下次判断前先查询数据库如果同一股票、同类异动在最近N小时如2小时内已存在记录则抑制本次报警或改为发送“异动持续”的提醒置信度较低。实战心得不要完全依赖LLM自身的“记忆”来做去重。LLM的上下文有限且不够精确。用外部存储来做状态管理是更可靠的选择。你可以写一个简单的check_and_update_memory技能专门处理这件事。5.3 性能优化与成本控制模型调用优化监控任务中大部分判断是模式化的例如是否放量是否突破。我们可以先写一些Python函数做初步的硬规则过滤只有通过硬规则的候选案例才送去LLM做复杂的综合分析如这篇研报的基调到底有多乐观。这能大幅减少对LLM的调用次数降低成本和延迟。异步与并发如果监控的股票池很大如全市场串行查询pywencai和新闻会很慢。可以考虑让智能体启动多个“子任务”如果OpenClaw支持或者将pywencai的多个查询条件合并成一个更复杂的查询一次性获取更多数据。本地模型调优如果使用本地Qwen模型可以通过调整temperature降低如0.1使其输出更确定、max_tokens限制避免冗长等参数来提升响应速度和稳定性。对于格式化输出如要求它输出固定的JSON可以在Prompt中给出更明确的示例Few-Shot Learning效果会好很多。6. 常见问题与排查实录在实际部署和运行中你几乎一定会遇到下面这些问题。这里是我的踩坑记录和解决方案。6.1 OpenClaw与模型服务连接失败症状OpenClaw Web UI显示模型不可用或智能体执行时超时。排查首先在宿主机上执行curl http://localhost:11434/api/tags检查Ollama服务是否正常模型是否已拉取。进入OpenClaw容器内部docker exec -it stock_openclaw /bin/bash尝试curl http://ollama:11434/api/tags。如果失败说明容器间网络不通。确保docker-compose.yml中depends_on和OLLAMA_BASE_URL配置正确。检查OpenClaw容器内的环境变量env | grep OLLAMA。确认OLLAMA_BASE_URL的值是http://ollama:11434。解决最常见的是Ollama模型没拉取完整。进入Ollama容器用ollama list查看并用ollama pull qwen2.5:14b重新拉取。6.2 PyWenCai查询无结果或报错症状pywencai_query技能总是返回“未查询到数据”或连接错误。排查首先确保宿主机上的pywencai_server.py服务正在运行ps aux | grep pywencai。在宿主机上直接运行一个Python脚本测试pywencaiprint(pywencai.get(‘今日涨幅大于5%’))看是否正常。这能排除库安装或网络问题。在OpenClaw容器内尝试curl http://host.docker.internal:5000/query -X POST -H “Content-Type: application/json” -d ‘{“query”:”测试”}’。如果连接被拒绝可能是Docker网络模式问题。尝试将host.docker.internal替换为宿主机的实际IP如192.168.1.100。解决网络问题修改skill.py中的请求地址为宿主机的局域网IP。pywencai库问题该库依赖浏览器引擎模拟查询有时会因网站反爬而失败。考虑在pywencai_server.py中增加重试机制和更友好的错误处理。使用备用数据源如akshare阿里云镜像或efinance并相应修改服务端代码。6.3 智能体“发呆”或执行逻辑混乱症状智能体不按预设流程执行或者在一个简单步骤上卡住。排查检查初始指令Prompt这是最可能的原因。Prompt必须极其清晰、无歧义步骤分解到位。用“第一步第二步…”的句式比用大段描述更有效。明确告诉它每一步使用哪个技能。检查技能输出在OpenClaw的“会话”或“日志”界面查看智能体每一步的实际输入和输出。可能是某个技能返回了意外格式的数据导致LLM无法理解。简化任务先让智能体只做一件事比如“使用pywencai_query技能查询‘今日涨幅大于5%’”成功了再增加下一步。解决优化Prompt加入角色设定、格式示例和错误处理指引。例如“你是一个严格的执行者必须严格按照以下步骤操作如果某一步失败请输出‘步骤X失败原因为[错误信息]’然后停止。”给技能输出做“格式化”在技能返回结果时尽量返回干净、结构化的文本。例如pywencai返回的股票列表在服务端就处理好用“|”分隔的表格形式返回方便LLM阅读。6.4 飞书/钉钉消息发送失败症状智能体流程显示成功但收不到消息。排查检查飞书机器人的Webhook URL是否正确是否已添加到正确的群聊。在宿主机上用curl命令模拟发送一条消息测试Webhook是否有效。查看OpenClaw技能的执行日志看feishu_notify技能返回的具体错误信息。解决飞书机器人消息格式要求较严。确保你发送的JSON格式完全符合官方文档。最简单的方法是先用Postman等工具调试通一个消息格式再将其固化到技能代码中。这套用OpenClaw搭建的股票异动监控系统我已经稳定运行了一个多月。它不能代替你做出投资决策但绝对是一个不知疲倦、覆盖全面的“一级警报员”。最大的价值在于它将我从机械的盯盘和繁杂的信息筛选中解放出来让我能更专注于策略本身的思考与优化。从最初的频繁误报到现在的精准提示调优的过程本身也是对市场认知的一次深化。如果你也厌倦了被动接收杂乱的信息不妨试试亲手赋予这只“小龙虾”以智慧打造一个专属于你的AI市场观察员。