一、前言
在理财市场中,基金是大多数投资者首选的资产配置工具。随着基金产品数量的激增,投资者需要实时了解基金净值变动,以做出科学的投资决策。
传统手动查询基金净值效率低,数据量大时容易遗漏信息。因此,搭建一个 个人基金监控平台 成为许多投资者的需求。
本文将以 Python 为工具,完整展示从 基金净值数据抓取 → 数据存储 → 数据分析 → 可视化监控 → 自动化提醒 的全流程,实现一个 可视化、智能、可扩展的个人基金监控平台。
二、基金净值数据抓取
1. 数据来源
基金净值通常可以从以下渠道获取:
- 天天基金网(fund.eastmoney.com)
- 新浪财经基金模块(finance.sina.com.cn)
- 东方财富网 API
本文以 天天基金网公开接口 为例。
2. Python 爬虫库
常用库包括:
requests:HTTP 请求获取网页/接口数据pandas:数据存储与清洗BeautifulSoup:解析 HTMLjson:解析接口返回 JSON 数据lxml:高性能解析
3. 数据抓取示例
import requests
import pandas as pd
def fetch_fund_data(fund_code):
url = f"https://fund.eastmoney.com/pingzhongdata/{fund_code}.js"
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)
# 接口返回 JavaScript,需要提取 JSON 数据
text = response.text
# 查找净值数据
start = text.find('Data_netWorth =') + len('Data_netWorth =')
end = text.find(';', start)
json_str = text[start:end].strip()
data = eval(json_str) # 转成 Python list
df = pd.DataFrame(data, columns=["date", "net_value", "accum_value"])
return df
df = fetch_fund_data("519697") # 示例基金代码
print(df.head())
💡 提示:
- 每个基金页面结构可能不同,需要针对性解析
- 对于大量基金,可批量抓取并结合 多线程 提升效率
三、数据存储与管理
1. 存储方式
- CSV:小规模数据快速存储
- SQLite:单机数据库,方便查询
- MySQL/PostgreSQL:多基金、大数据量推荐
2. SQLite 存储示例
import sqlite3
conn = sqlite3.connect("funds.db")
df.to_sql("fund_519697", conn, if_exists="replace", index=False)
conn.close()
3. 数据更新策略
- 每日更新:每天定时抓取最新净值
- 增量更新:只抓取最新数据,避免重复
# 示例:检查数据库中最后日期
last_date = pd.read_sql("SELECT MAX(date) FROM fund_519697", conn).iloc[0,0]
new_data = df[df['date'] > last_date]
四、基金净值分析
1. 净值趋势可视化
import matplotlib.pyplot as plt
df['date'] = pd.to_datetime(df['date'])
plt.figure(figsize=(12,6))
plt.plot(df['date'], df['net_value'], label='每日净值')
plt.plot(df['date'], df['accum_value'], label='累计净值')
plt.title("基金净值趋势")
plt.xlabel("日期")
plt.ylabel("净值 (元)")
plt.legend()
plt.show()
2. 收益率计算
df['daily_return'] = df['net_value'].pct_change()
df['cumulative_return'] = (1 + df['daily_return']).cumprod() - 1
3. 风险指标
- 波动率:标准差衡量风险
volatility = df['daily_return'].std() * (252**0.5) # 年化波动率
print(f"年化波动率: {volatility:.2%}")
- 最大回撤
cum_max = df['cumulative_return'].cummax()
drawdown = (df['cumulative_return'] - cum_max) / cum_max
max_drawdown = drawdown.min()
print(f"最大回撤: {max_drawdown:.2%}")
五、基金监控平台设计
1. 核心功能
- 基金净值抓取:支持多基金批量更新
- 趋势分析与可视化:日常净值、累计净值、收益率
- 自动提醒:价格变动、达到预设收益/亏损阈值
- 多基金组合分析:对比净值、风险指标
- 数据存储与历史查询
2. 技术选型
| 模块 | 技术 | 说明 |
|---|---|---|
| 爬虫 | requests + BeautifulSoup/Selenium | 数据抓取 |
| 数据存储 | SQLite/MySQL | 轻量级存储 |
| 数据分析 | pandas + numpy | 净值、收益率、风险指标 |
| 可视化 | matplotlib + seaborn | 净值趋势、收益分布 |
| 定时任务 | APScheduler | 自动抓取与提醒 |
| 通知 | smtplib / 微信公众号 / 企业微信 | 实时提醒 |
六、自动化任务与提醒
1. 定时抓取
from apscheduler.schedulers.blocking import BlockingScheduler
def scheduled_fetch():
fund_list = ["519697", "000001", "161725"]
for code in fund_list:
df = fetch_fund_data(code)
# 更新数据库
# ...
sched = BlockingScheduler()
sched.add_job(scheduled_fetch, 'cron', hour=16) # 每天收盘后抓取
sched.start()
2. 自动提醒
import smtplib
from email.mime.text import MIMEText
def send_email(subject, content):
msg = MIMEText(content, "plain", "utf-8")
msg["Subject"] = subject
msg["From"] = "your_email@example.com"
msg["To"] = "recipient@example.com"
server = smtplib.SMTP("smtp.example.com", 25)
server.login("your_email@example.com", "password")
server.sendmail("your_email@example.com", ["recipient@example.com"], msg.as_string())
server.quit()
💡 提示:
- 可根据每日涨跌或收益阈值触发邮件/微信通知
- 配合
apscheduler完成全自动监控
七、多基金组合分析
1. 组合收益率
# 假设 df_list 是多个基金净值 DataFrame
combined = pd.concat([df.set_index('date')['daily_return'] for df in df_list], axis=1)
combined.columns = ["基金A", "基金B", "基金C"]
combined['portfolio_return'] = combined.mean(axis=1)
2. 可视化组合净值
cumulative = (1 + combined).cumprod()
cumulative.plot(figsize=(12,6))
plt.title("基金组合净值趋势")
plt.show()
八、工程化与优化建议
-
数据抓取优化
- 使用多线程或 asyncio 提升效率
- 针对接口限制设置请求间隔
- 使用缓存,避免重复请求
-
数据存储优化
- SQLite 适合单机小规模
- MySQL/PostgreSQL 支持多用户、多基金历史数据
-
可视化优化
- 使用 Plotly 或 Dash 做交互式图表
- 便于网页端或手机端查看
-
扩展功能
- 基金评级分析(星级、基金经理表现)
- 历史分红和分红再投资策略分析
- 与股票或债券组合分析,构建资产配置工具
九、总结
本文完整演示了 Python 抓取基金净值数据 → 数据存储 → 数据分析 → 可视化趋势 → 自动化监控 的流程,构建了一个 可扩展、智能化的个人基金监控平台。
核心技术点:
- 数据抓取:requests + BeautifulSoup + Selenium
- 数据管理:pandas + SQLite
- 数据分析:收益率计算、风险指标、组合分析
- 可视化:matplotlib + seaborn
- 自动化:APScheduler + 邮件/微信通知
通过该平台,投资者可以实现:
- 每日自动更新基金净值
- 实时了解收益和风险
- 自动提醒价格变动
- 支持多基金组合分析
未来可进一步扩展为 Web 平台,结合 Dash/Flask/Streamlit,实现网页端监控和移动端访问。
1592

被折叠的 条评论
为什么被折叠?



