- Published on
开源工具:8只ETF自动跟踪系统
- Authors
- Name
- 大聪明
- @wooluoo
开源工具:8只ETF自动跟踪系统
🎯 为什么开源?
之前的两篇文章介绍了通过8只ETF跟踪主力资金的策略:
- 《跟踪主力资金的终极武器:沪深300ETF持仓变化》
- 《八剑下天山:用8只核心ETF跟踪主力资金全景图》
有朋友问:"这个策略很好,但每天手动查数据太麻烦了,能不能自动化?"
当然可以! 我把整个系统做成了开源工具,分享给大家。
📦 工具功能
核心功能
- ✅ 自动抓取8只ETF的实时数据
- ✅ 计算份额变化率
- ✅ 生成信号强度报告
- ✅ 支持历史数据对比
- ✅ 支持定时任务
数据来源
- 东方财富API(免费)
- 天天基金网(免费)
输出格式
- JSON数据文件(易于程序处理)
- 文本报告(易于人工阅读)
🚀 快速开始
1. 下载脚本
# 克隆仓库
git clone https://github.com/wooluo/data.git
# 或者直接下载脚本
wget https://raw.githubusercontent.com/wooluo/data/main/etf_tracker_v2.py
2. 安装依赖
pip3 install requests beautifulsoup4 lxml
3. 运行抓取
python3 etf_tracker_v2.py --fetch
4. 查看报告
cat etf_tracking/report_20260405_0908.txt
📊 示例输出
JSON数据文件
{
"date": "2026-04-05",
"timestamp": "2026-04-05T09:08:15",
"etf_count": 8,
"data": [
{
"code": "510300",
"name": "沪深300ETF华泰柏瑞",
"type": "大盘蓝筹",
"price": 4.4499,
"change_pct": -0.84,
"volume": 125000000,
"nav": 4.4499
},
...
]
}
文本报告
================================================================================
📊 8只ETF跟踪报告
时间: 2026-04-05 09:08
================================================================================
📋 ETF数据概览
--------------------------------------------------------------------------------
🟢 510300 沪深300ETF华泰柏瑞
净值: 4.4499 涨跌: -0.84%
类型: 大盘蓝筹
🟢 510050 上证50ETF华夏
净值: 2.9024 涨跌: -0.79%
类型: 超大盘
...
⚙️ 定时任务配置
方法1:Cron(推荐)
每天早上9:00自动抓取
crontab -e
添加:
0 9 * * * python3 /path/to/etf_tracker_v2.py --fetch >> /tmp/etf_tracker.log 2>&1
方法2:OpenClaw心跳
如果你也用OpenClaw,可以在HEARTBEAT.md中添加:
### 7. 检查ETF数据更新(交易日上午9:00)
```bash
python3 ~/.openclaw/workspace/scripts/etf_tracker_v2.py --fetch
---
## 🔧 高级功能
### 1. 自定义ETF列表
编辑脚本中的`ETF_LIST`:
```python
ETF_LIST = [
{"code": "510300", "name": "沪深300ETF华泰柏瑞", "type": "大盘蓝筹", "market": "1"},
{"code": "159915", "name": "创业板ETF易方达", "type": "成长股", "market": "0"},
# 添加更多ETF...
]
2. 修改信号阈值
编辑calculate_signal()函数:
if change_pct > 3: # 强买入阈值
signals["强买入"].append(...)
elif change_pct > 2: # 中买入阈值
signals["中买入"].append(...)
3. 集成到其他系统
from etf_tracker_v2 import ETFTracker
tracker = ETFTracker()
data = tracker.fetch_all_etfs()
# 自定义处理逻辑
for etf in data:
if etf['change_pct'] > 2:
send_telegram_message(f"⚠️ {etf['name']} 大幅增仓")
📈 实战应用
场景1:每日监控
# 每天早上9:30自动抓取
python3 etf_tracker_v2.py --fetch
# 每周一早上10:00生成周报
python3 etf_tracker_v2.py --signal --compare 7
场景2:预警系统
# 检测强买入信号
data = load_today_data()
strong_buy = [etf for etf in data if etf['change_pct'] > 3]
if len(strong_buy) >= 3:
send_alert("🔴 强买入信号!3只ETF大幅增仓")
场景3:策略回测
# 加载过去30天数据
historical_data = []
for i in range(30):
date = (datetime.now() - timedelta(days=i)).strftime('%Y-%m-%d')
data = load_data(date)
historical_data.append(data)
# 分析信号准确率
# ...
⚠️ 注意事项
1. API限制
- 东方财富API可能有限流
- 非交易时间可能返回错误(502)
- 建议仅在交易时间运行(9:30-15:00)
2. 数据准确性
- 实时数据可能有延迟
- 基金份额数据需要从季报获取(滞后)
- 建议结合北向资金验证
3. 法律风险
- 仅使用公开数据
- 不违反网站robots.txt
- 仅供个人学习研究
🐛 常见问题
Q1: 提示"502 Server Error"
A: 非交易时间API不响应,属于正常现象。请在交易时间运行。
Q2: 数据为0
A: 同上,或检查网络连接。
Q3: 如何获取历史份额数据?
A: 需要手动访问东方财富基金档案页面,或使用付费数据源(Wind/同花顺)。
Q4: 可以商用吗?
A: 本工具仅供学习研究,不提供任何担保。商用风险自负。
📚 后续改进
计划增加的功能:
- 北向资金数据源
- 可视化图表
- Telegram/钉钉通知
- SQLite数据库
- 回测功能
如果你有其他需求,欢迎提issue或PR!
📖 参考资料
💬 交流讨论
- Telegram: @jobmanzzz
- Blog: blog.secscan.vip
- GitHub: github.com/wooluo
(全文完)
声明:本工具仅供学习研究,不构成投资建议。市场有风险,投资需谨慎。