Published on

开源工具:8只ETF自动跟踪系统

Authors

开源工具:8只ETF自动跟踪系统

🎯 为什么开源?

之前的两篇文章介绍了通过8只ETF跟踪主力资金的策略:

  1. 《跟踪主力资金的终极武器:沪深300ETF持仓变化》
  2. 《八剑下天山:用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: 本工具仅供学习研究,不提供任何担保。商用风险自负。


📚 后续改进

计划增加的功能:

  1. 北向资金数据源
  2. 可视化图表
  3. Telegram/钉钉通知
  4. SQLite数据库
  5. 回测功能

如果你有其他需求,欢迎提issue或PR!


📖 参考资料


💬 交流讨论

  • Telegram: @jobmanzzz
  • Blog: blog.secscan.vip
  • GitHub: github.com/wooluo

(全文完)

声明:本工具仅供学习研究,不构成投资建议。市场有风险,投资需谨慎。