一个使用免费网络数据源(AKShare、Yahoo Finance、Binance/CCXT)来研究股票/加密货币价格历史趋势、风险与收益特征的可视化应用。基于 Streamlit + Plotly 构建,适合快速探索与分享。
English: A Streamlit + Plotly app using free data sources (AKShare, Yahoo Finance via yfinance, Binance via CCXT) to analyze historical price trends, risk and return characteristics.
- 市场选择:
A股、美股/港股/全球、加密货币 - 长期对数回归通道与当前位置百分比(估算估值区间)
- 波动率历史分位(ATR%)与风险提示
- 历史最大回撤与年化收益率
- 扩展指标:
夏普比率、VaR(95%)、下行波动率、趋势强度R² - 市场状态识别:上升趋势 / 震荡区间 / 下行风险
- 辅助图表:
63日滚动收益、收益分布直方图 - 数据缓存:减少重复网络请求与等待时间
- 加密货币榜单:新增
过去7天涨跌图内嵌折线列(CoinGecko) - 资料/AI资讯:先显示本地缓存,后台刷新最新内容后即时替换
- 资料与AI资讯:DeepSeek 生成内容分类缓存,支持细粒度展示
- A股:
AKShare的stock_zh_a_hist(前复权,日频) - 美股/港股/全球:
Yahoo Finance通过yfinance(自动复权,日频) - 加密货币:
Binance通过CCXT(日频 OHLCV)CoinGecko用于加密货币榜单与7天涨跌图
以上数据均为公开免费数据接口,存在延迟、口径差异或历史修订的可能,仅供研究与学习使用,不构成投资建议。
- 安装依赖
pip install -r requirements.txt- 启动应用(Windows)
.venv\Scripts\python.exe -m streamlit run Homepage.py或直接双击 activate_python.bat
3. 使用方式
- 左侧侧边栏选择市场与输入代码,然后点击“开始分析”
- 代码示例:
- A股:
600519.SH、000001.SZ、430047.BJ - 美股:
AAPL、TSLA、NVDA - 加密货币:
BTCUSDT、ETHUSDT
- A股:
- 通道位置:基于对数价格的线性趋势与上下轨(±2.5×滚动标准差,约等于长期估值区间)
- ATR分位:真实波动范围占价格的百分比的历史分位(高分位提示短期风险)
- 历史最大回撤:相对历史滚动最高价的最大跌幅
- 年化收益率:
(终值/初值)^(1/年数)-1 - 夏普比率:
日收益均值/日收益标准差 × √252 - VaR(95%):日收益的第5百分位(表示可能的单日极端损失区间)
- 下行波动率:仅对负收益部分的波动年化
- 趋势强度 R²:近 1 年/3 年对数线性回归的拟合优度
- 主入口:
Homepage.py - 重要函数:
- 数据获取与缓存:
fetch_data(market, code)(data_sources.py) - 指标计算:
compute_indicators(df)(analysis.py)
- 数据获取与缓存:
- 页面交互与图表绘制:
Homepage.py- AI资料生成与缓存:
get_profile_cached、generate_profile_via_deepseek(analysis.py) - 资讯获取与AI补充:
get_news_cached、generate_news_via_deepseek(data_sources.py)
- AI资料生成与缓存:
- 交易日计数假设为
252(约等于美股/A股每年交易日),不同市场可能略有差异 - A股代码需带市场后缀(如
600519.SH、000001.SZ) - 接口偶尔会限流或不可用,重试或更换网络即可
- 若缺少依赖,请先安装;国内环境可考虑使用镜像源加速
- 在项目根目录创建
.env文件,写入:DEEPSEEK_API_BASE=https://api.deepseek.com/v1DEEPSEEK_API_KEY=你的密钥DEEPSEEK_MODEL=deepseek-chat(可选)
- 应用会自动读取
.env,用于生成“资料”和补充“资讯”。
- 原始数据:
data_cache/raw/<市场>/<代码>.csv - 分析结果:
data_cache/analysis/*.csv|*.json - 基础信息:
data_cache/ui/basic/<市场>/<代码>.json - 资讯:
data_cache/ui/news/<市场>/<代码>.json - 资料(整段):
data_cache/ui/profile/<市场>/<代码>.json - AI分类缓存:
data_cache/ui/ai/<市场>/<代码>.json(包含profile.segments与news_summary)
- 运行主界面验证:
- 启动:
.venv\Scripts\python.exe -m streamlit run Homepage.py或双击activate_python.bat - 切换市场为“加密货币”,确认榜单中出现“7天涨跌图”折线列。
- 启动:
- 验证 AI 资料生成与缓存:
.venv\Scripts\python.exe test\test_ai_profile.py --market "A股" --code 600519.SH --force_refresh- 完成后,检查:
data_cache/ui/profile/与data_cache/ui/ai/下对应文件是否生成。
- 验证 AI 资讯补充与缓存:
.venv\Scripts\python.exe -c "import sys,os; sys.path.insert(0, os.getcwd()); from data_sources import get_news_cached; print(len(get_news_cached('A股','600519.SH', True)))"- 完成后,检查:
data_cache/ui/news/与data_cache/ui/ai/是否有更新。
- 测试 read_ai_cache:
.venv\Scripts\python.exe test\test_ai_profile.py --market "A股" --code 600519.SH --test_ai_cache- 该测试会写入示例 AI 分类缓存并读取,打印缓存路径、键列表、最新要点数与历史条目数。
- 示例输出:
=== Test read_ai_cache === Path: D:\AB\finance_app\data_cache\ui\ai\A股\600519.SH.json Keys: ['news_history', 'news_summary', 'profile'] Latest items: 2 History entries: 1
- 加密货币榜单集成
CoinGecko并新增7天涨跌图折线列(Homepage.py) - “资料”“资讯”改为先显示本地缓存,再后台拉取最新并即时替换(
Homepage.py) - DeepSeek 生成的“资料”“资讯”按段落/要点分类保存至
data_cache/ui/ai(analysis.py、data_sources.py、cache_utils.py) - 依赖更新:新增
pycoingecko>=3.2.0
本项目仅用于数据可视化与教育研究目的,不构成任何投资建议。请自行对数据的完整性与准确性进行核验。