Hermes 股票监控教程:从数据采集到预警推送,一步步教你
上班没时间盯盘?看到涨停才反应过来?文章源自:毕卡奥,阅读原文请搜索毕卡奥!毕卡奥-https://www.bikaao.com/archives/2393.html
我用了 1 周时间,拿 Hermes 搭了个股票预警系统。不吹牛,这东西真能解决实际问题——到点自动抓数据,条件满足就推消息,再也不用时不时摸手机看行情。
今天把完整教程掏出来,从数据采集到企业微信推送,一步步教你。代码我都测试过,照着做就能跑。
**⚠️ 先说清楚:** 这教程只教技术实现,不构成投资建议。炒股有风险,盈亏自负。文章源自:毕卡奥,阅读原文请搜索毕卡奥!毕卡奥-https://www.bikaao.com/archives/2393.html
文章源自:毕卡奥,阅读原文请搜索毕卡奥!毕卡奥-https://www.bikaao.com/archives/2393.html
## 一、系统架构(先搞懂再动手)
整个预警系统就 4 个模块,画个图你就明白了:
```文章源自:毕卡奥,阅读原文请搜索毕卡奥!毕卡奥-https://www.bikaao.com/archives/2393.html
┌─────────────┐ ┌─────────────┐
│ 数据采集 │ ──→ │ 指标计算 │
│ (AKShare) │ │ (均线/量比) │
└─────────────┘ └─────────────┘
↓ ↓
┌─────────────┐ ┌─────────────┐
│ 条件判断 │ ──→ │ 消息推送 │
│ (阈值比较) │ │ (企业微信) │
└─────────────┘ └─────────────┘
```文章源自:毕卡奥,阅读原文请搜索毕卡奥!毕卡奥-https://www.bikaao.com/archives/2393.html
**工作流程:**
1. 定时脚本获取股票行情
2. 计算技术指标(均线/涨跌幅/量比)
3. 判断是否触发预警条件
4. 满足条件就推送到企业微信
**说白了:** 就是个定时运行的 Python 脚本,没啥神秘的。
---
## 二、环境准备(10 分钟搞定)
### 2.1 安装 Hermes
没装 Hermes 的先去装,前面有专门教程,这里不啰嗦。
```bash
# 一键安装
curl -fsSL https://raw.githubusercontent.com/openclaw/hermes/main/scripts/install.sh | bash
# 验证
hermes status
```
### 2.2 安装 Python 依赖
预警脚本需要几个库,提前装好:
```bash
# 激活 Hermes 虚拟环境
source ~/.hermes/venv/bin/activate
# 安装依赖
pip install akshare pandas python-dateutil -i https://pypi.tuna.tsinghua.edu.cn/simple
```
**⚠️ 注意:** 必须在 Hermes 虚拟环境里装,不然脚本找不到库。
### 2.3 获取股票列表
先搞明白你要监控哪些股票:
```python
# 获取 A 股列表
import akshare as ak
stock_list = ak.stock_info_a_code_name()
print(stock_list.head())
```
**建议:** 新手先监控 5-10 只股票,别贪多。
---
## 三、数据采集(核心代码)
### 3.1 用 AKShare 获取行情
AKShare 是免费的,不用注册 key,直接用:
```python
import akshare as ak
import pandas as pd
def get_stock_price(code):
"""获取股票实时行情"""
try:
# 代码格式转换(600000 → sh600000)
if code.startswith('6'):
code = f"sh{code}"
else:
code = f"sz{code}"
# 获取实时行情
df = ak.stock_zh_a_spot_em()
stock_data = df[df['代码'] == code.replace('sh', '').replace('sz', '')]
if len(stock_data) > 0:
return {
'code': code,
'name': stock_data['名称'].values[0],
'price': stock_data['最新价'].values[0],
'change': stock_data['涨跌幅'].values[0],
'volume': stock_data['成交量'].values[0],
'amount': stock_data['成交额'].values[0]
}
except Exception as e:
print(f"获取数据失败:{e}")
return None
```
**⚠️ 踩坑提示:** 新浪 API 有频率限制,别太频繁调用。建议每只股票间隔 3-5 秒。
### 3.2 用新浪财经 API(备选方案)
AKShare 如果抽风,可以用新浪财经 API 兜底:
```python
import requests
def get_sina_price(code):
"""新浪财经实时行情"""
if code.startswith('6'):
url = f"http://hq.sinajs.cn/list=sh{code}"
else:
url = f"http://hq.sinajs.cn/list=sz{code}"
resp = requests.get(url)
data = resp.text.split('"')[1].split(',')
return {
'code': code,
'price': float(data[3]),
'change': float(data[2]) / float(data[1]) * 100
}
```
**这个更简单,** 无需依赖,一个 HTTP 请求就搞定。
---
## 四、指标计算(策略核心)
### 4.1 计算均线
```python
def calculate_ma(code, days=5):
"""计算 N 日均线"""
# 获取历史数据
df = ak.stock_zh_a_hist(symbol=code, period="daily", start_date="20260101")
if len(df) < days:
return None
# 计算均线
ma = df['收盘'].rolling(window=days).mean().iloc[-1]
current_price = df['收盘'].iloc[-1]
return {
'ma': ma,
'price': current_price,
'deviation': (current_price - ma) / ma * 100 # 偏离率
}
```
### 4.2 计算量比
```python
def calculate_volume_ratio(code):
"""计算量比"""
df = ak.stock_zh_a_spot_em()
stock = df[df['代码'] == code]
if len(stock) > 0:
volume = stock['成交量'].values[0]
avg_volume = stock['换手率'].values[0] # 简化处理
return {
'volume': volume,
'volume_ratio': volume / avg_volume if avg_volume > 0 else 0
}
return None
```
---
## 五、预警条件设置
### 5.1 常见预警条件
| 条件类型 | 触发条件 | 说明 |
|---------|---------|------|
| **涨跌幅预警** | 涨跌幅 > 5% | 大涨大跌提醒 |
| **均线突破** | 股价上穿 5 日线 | 短线买入信号 |
| **量比异常** | 量比 > 3 | 放量关注 |
| **价格突破** | 股价 > 设定值 | 自定义阈值 |
### 5.2 条件判断代码
```python
def check_conditions(stock_data, ma_data, volume_data):
"""检查是否触发预警"""
alerts = []
# 涨跌幅预警
if abs(stock_data['change']) > 5:
alerts.append(f"涨跌幅超 5%:{stock_data['change']}%")
# 均线偏离预警
if ma_data and abs(ma_data['deviation']) > 3:
alerts.append(f"偏离均线超 3%:{ma_data['deviation']:.2f}%")
# 量比预警
if volume_data and volume_data['volume_ratio'] > 3:
alerts.append(f"量比异常:{volume_data['volume_ratio']:.2f}")
return alerts
```
---
## 六、企业微信推送(关键步骤)
### 6.1 创建企业微信机器人
1. 登录企业微信管理后台
2. 进入"应用管理" → "自建应用"
3. 创建一个新应用,记下 Webhook 地址
**Webhook 格式:**
```
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY
```
### 6.2 推送代码
```python
import requests
import json
def send_wechat_alert(stock_name, stock_code, alerts):
"""发送企业微信预警"""
webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY"
content = f" 股票预警\n"
content += f"股票:{stock_name}({stock_code})\n"
content += f"时间:{pd.Timestamp.now().strftime('%H:%M:%S')}\n"
content += f"----------------\n"
for alert in alerts:
content += f"⚠️ {alert}\n"
data = {
"msgtype": "text",
"text": {
"content": content
}
}
resp = requests.post(webhook, data=json.dumps(data))
return resp.status_code == 200
```
**⚠️ 替换 YOUR_KEY:** 把你自己的 Webhook key 填进去。
---
## 七、定时任务配置
### 7.1 完整脚本
把上面代码整合成一个脚本:
```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 保存为:
~/.hermes/scripts/stock_alert.py
import akshare as ak
import pandas as pd
import requests
import json
import time
# 监控的股票列表
STOCKS = ['600000', '000001', '300750'] # 自己改
# 企业微信 Webhook
WEBHOOK = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY"
def get_stock_price(code):
# 前面定义的获取行情函数
...
def check_conditions(stock_data):
# 前面定义的条件判断函数
...
def send_alert(stock_name, code, alerts):
# 前面定义的推送函数
...
def main():
for code in STOCKS:
data = get_stock_price(code)
if data:
alerts = check_conditions(data)
if alerts:
send_alert(data['name'], code, alerts)
time.sleep(3) # 避免频率限制
if __name__ == "__main__":
main()
```
### 7.2 设置定时执行
用 cron 设置定时任务:
```bash
# 编辑 crontab
crontab -e
# 添加任务(交易时段每 5 分钟执行一次)
*/5 9-11,13-15 * * 1-5 ~/.hermes/venv/bin/python ~/.hermes/scripts/stock_alert.py
```
**说明:**
- `*/5`:每 5 分钟
- `9-11,13-15`:交易时段
- `1-5`:周一到周五
---
## 八、风险提示(必读)
### 8.1 技术风险
| 风险 | 说明 | 应对 |
|------|------|------|
| **API 限流** | 调用太频繁被封 | 加延时,控制频率 |
| **数据延迟** | 免费数据有延迟 | 别用于高频交易 |
| **脚本异常** | 程序可能崩溃 | 加日志,定期检查 |
### 8.2 合规风险
```
⚠️ 重要提醒:
1. 本系统仅用于个人学习,不得用于非法目的
2. 不得向他人提供投资建议或荐股服务
3. 不得代客理财或收取任何费用
4. 量化交易有风险,入市需谨慎
```
### 8.3 使用建议
1. **先模拟测试:** 用历史数据验证策略
2. **小资金试水:** 别一上来就重仓
3. **设置止损:** 亏损超 5% 自动预警
4. **定期复盘:** 每周检查策略有效性
---
## 说句掏心窝子的话
这套系统我用了 1 周,最大的感受是:**技术不难,难在坚持。**
代码就这么多,复制粘贴就能跑。但真正有用的,是你根据自己交易习惯调整的预警条件。有人喜欢追涨,有人喜欢抄底,没有万能策略。
**核心就 3 点:**
1. 数据采集要稳(AKShare+ 新浪双保险)
2. 预警条件要准(根据自己的策略调)
3. 推送要及时(企业微信秒到)
文章末尾固定信息








