fund-cli 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. fund_cli/__init__.py +13 -0
  2. fund_cli/__main__.py +10 -0
  3. fund_cli/ai/__init__.py +21 -0
  4. fund_cli/ai/analyzer.py +360 -0
  5. fund_cli/ai/prompts.py +244 -0
  6. fund_cli/ai/providers.py +286 -0
  7. fund_cli/analysis/__init__.py +17 -0
  8. fund_cli/analysis/attribution.py +161 -0
  9. fund_cli/analysis/backtest.py +75 -0
  10. fund_cli/analysis/holding.py +217 -0
  11. fund_cli/analysis/manager.py +133 -0
  12. fund_cli/analysis/performance.py +440 -0
  13. fund_cli/analysis/portfolio.py +152 -0
  14. fund_cli/analysis/risk.py +300 -0
  15. fund_cli/cli.py +98 -0
  16. fund_cli/commands/__init__.py +9 -0
  17. fund_cli/commands/ai_cmd.py +464 -0
  18. fund_cli/commands/analyze_cmd.py +418 -0
  19. fund_cli/commands/compare_cmd.py +264 -0
  20. fund_cli/commands/config_cmd.py +97 -0
  21. fund_cli/commands/data_cmd.py +106 -0
  22. fund_cli/commands/filter_cmd.py +286 -0
  23. fund_cli/commands/holding_cmd.py +140 -0
  24. fund_cli/commands/interactive_cmd.py +84 -0
  25. fund_cli/commands/main.py +17 -0
  26. fund_cli/commands/manager_cmd.py +74 -0
  27. fund_cli/commands/monitor_cmd.py +113 -0
  28. fund_cli/commands/optimize_cmd.py +192 -0
  29. fund_cli/config.py +163 -0
  30. fund_cli/core/__init__.py +8 -0
  31. fund_cli/core/analyzer.py +46 -0
  32. fund_cli/core/data_manager.py +231 -0
  33. fund_cli/core/data_quality.py +162 -0
  34. fund_cli/core/monitor.py +230 -0
  35. fund_cli/core/optimizer.py +50 -0
  36. fund_cli/core/optimizers/__init__.py +13 -0
  37. fund_cli/core/optimizers/efficient_frontier.py +91 -0
  38. fund_cli/core/optimizers/max_sharpe.py +54 -0
  39. fund_cli/core/optimizers/mean_variance.py +84 -0
  40. fund_cli/core/optimizers/risk_parity.py +60 -0
  41. fund_cli/core/reporter.py +67 -0
  42. fund_cli/core/reporters/__init__.py +6 -0
  43. fund_cli/core/reporters/html_reporter.py +62 -0
  44. fund_cli/core/reporters/markdown_reporter.py +40 -0
  45. fund_cli/core/screener.py +142 -0
  46. fund_cli/data/__init__.py +6 -0
  47. fund_cli/data/adapters/__init__.py +7 -0
  48. fund_cli/data/adapters/akshare_adapter.py +442 -0
  49. fund_cli/data/adapters/tushare_adapter.py +254 -0
  50. fund_cli/data/adapters/wind_adapter.py +78 -0
  51. fund_cli/data/base.py +209 -0
  52. fund_cli/data/cache.py +192 -0
  53. fund_cli/data/models.py +248 -0
  54. fund_cli/utils/__init__.py +6 -0
  55. fund_cli/utils/decorators.py +88 -0
  56. fund_cli/utils/helpers.py +127 -0
  57. fund_cli/utils/validators.py +77 -0
  58. fund_cli/views/__init__.py +6 -0
  59. fund_cli/views/charts.py +120 -0
  60. fund_cli/views/reports.py +82 -0
  61. fund_cli/views/tables.py +124 -0
  62. fund_cli-2.0.0.dist-info/METADATA +183 -0
  63. fund_cli-2.0.0.dist-info/RECORD +66 -0
  64. fund_cli-2.0.0.dist-info/WHEEL +4 -0
  65. fund_cli-2.0.0.dist-info/entry_points.txt +3 -0
  66. fund_cli-2.0.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,82 @@
1
+ """
2
+ 报告视图模块
3
+
4
+ 提供报告生成功能。
5
+ """
6
+
7
+ from datetime import datetime
8
+
9
+ import pandas as pd
10
+
11
+
12
+ class ReportRenderer:
13
+ """
14
+ 报告渲染器
15
+
16
+ 生成各类分析报告。
17
+ """
18
+
19
+ def generate_html_report(
20
+ self,
21
+ fund_code: str,
22
+ fund_name: str,
23
+ metrics: dict,
24
+ nav_data: pd.DataFrame | None = None,
25
+ ) -> str:
26
+ """
27
+ 生成 HTML 分析报告
28
+
29
+ Args:
30
+ fund_code: 基金代码
31
+ fund_name: 基金名称
32
+ metrics: 分析指标
33
+ nav_data: 净值数据
34
+
35
+ Returns:
36
+ HTML 字符串
37
+ """
38
+ report_date = datetime.now().strftime("%Y-%m-%d %H:%M")
39
+
40
+ html = f"""
41
+ <!DOCTYPE html>
42
+ <html>
43
+ <head>
44
+ <meta charset="utf-8">
45
+ <title>基金分析报告 - {fund_code}</title>
46
+ <style>
47
+ body {{ font-family: Arial, sans-serif; margin: 40px; }}
48
+ h1 {{ color: #333; }}
49
+ h2 {{ color: #666; border-bottom: 1px solid #ddd; padding-bottom: 10px; }}
50
+ table {{ border-collapse: collapse; width: 100%; margin: 20px 0; }}
51
+ th, td {{ border: 1px solid #ddd; padding: 12px; text-align: left; }}
52
+ th {{ background-color: #f5f5f5; }}
53
+ .positive {{ color: green; }}
54
+ .negative {{ color: red; }}
55
+ .footer {{ margin-top: 40px; color: #999; font-size: 12px; }}
56
+ </style>
57
+ </head>
58
+ <body>
59
+ <h1>基金分析报告</h1>
60
+ <p><strong>基金代码:</strong> {fund_code}</p>
61
+ <p><strong>基金名称:</strong> {fund_name}</p>
62
+ <p><strong>报告日期:</strong> {report_date}</p>
63
+
64
+ <h2>业绩指标</h2>
65
+ <table>
66
+ <tr><th>指标</th><th>值</th></tr>
67
+ <tr><td>总收益率</td><td>{metrics.get('total_return', 0):.2f}%</td></tr>
68
+ <tr><td>年化收益率</td><td>{metrics.get('cagr', 0):.2f}%</td></tr>
69
+ <tr><td>年化波动率</td><td>{metrics.get('volatility', 0):.2f}%</td></tr>
70
+ <tr><td>最大回撤</td><td>{metrics.get('max_drawdown', 0):.2f}%</td></tr>
71
+ <tr><td>夏普比率</td><td>{metrics.get('sharpe', 0):.2f}</td></tr>
72
+ <tr><td>索提诺比率</td><td>{metrics.get('sortino', 0):.2f}</td></tr>
73
+ </table>
74
+
75
+ <div class="footer">
76
+ <p>本报告由 Fund CLI 自动生成,仅供参考。</p>
77
+ </div>
78
+ </body>
79
+ </html>
80
+ """
81
+
82
+ return html
@@ -0,0 +1,124 @@
1
+ """
2
+ 表格渲染模块
3
+
4
+ 提供 Rich 表格渲染功能。
5
+ """
6
+
7
+ import pandas as pd
8
+ from rich.console import Console
9
+ from rich.table import Table
10
+
11
+
12
+ class TableRenderer:
13
+ """
14
+ 表格渲染器
15
+
16
+ 使用 Rich 库渲染美观的表格输出。
17
+ """
18
+
19
+ def __init__(self, console: Console | None = None):
20
+ """
21
+ 初始化表格渲染器
22
+
23
+ Args:
24
+ console: Rich Console 实例
25
+ """
26
+ self.console = console or Console()
27
+
28
+ def render_fund_list(
29
+ self,
30
+ df: pd.DataFrame,
31
+ title: str = "基金列表",
32
+ ) -> Table:
33
+ """
34
+ 渲染基金列表表格
35
+
36
+ Args:
37
+ df: 基金数据 DataFrame
38
+ title: 表格标题
39
+
40
+ Returns:
41
+ Rich Table 对象
42
+ """
43
+ table = Table(title=title)
44
+
45
+ # 定义列
46
+ columns = [
47
+ ("code", "基金代码", "cyan"),
48
+ ("name", "基金名称", "white"),
49
+ ("type", "基金类型", "blue"),
50
+ ("scale", "规模(亿)", "green"),
51
+ ("company", "基金公司", "yellow"),
52
+ ]
53
+
54
+ for col_name, col_title, col_style in columns:
55
+ if col_name in df.columns:
56
+ table.add_column(col_title, style=col_style)
57
+
58
+ # 添加行
59
+ for _, row in df.iterrows():
60
+ values = []
61
+ for col_name, _, _ in columns:
62
+ if col_name in row:
63
+ val = row[col_name]
64
+ if pd.isna(val):
65
+ values.append("-")
66
+ elif col_name == "scale":
67
+ values.append(f"{val:.2f}" if val else "-")
68
+ else:
69
+ values.append(str(val)[:20])
70
+ if values:
71
+ table.add_row(*values)
72
+
73
+ return table
74
+
75
+ def render_analysis_result(
76
+ self,
77
+ metrics: dict,
78
+ title: str = "分析结果",
79
+ ) -> Table:
80
+ """
81
+ 渲染分析结果表格
82
+
83
+ Args:
84
+ metrics: 指标字典
85
+ title: 表格标题
86
+
87
+ Returns:
88
+ Rich Table 对象
89
+ """
90
+ table = Table(title=title)
91
+
92
+ table.add_column("指标", style="cyan")
93
+ table.add_column("值", style="green")
94
+
95
+ # 指标名称映射
96
+ metric_names = {
97
+ "total_return": "总收益率",
98
+ "cagr": "年化收益率",
99
+ "volatility": "年化波动率",
100
+ "max_drawdown": "最大回撤",
101
+ "sharpe": "夏普比率",
102
+ "sortino": "索提诺比率",
103
+ "calmar": "卡玛比率",
104
+ "alpha": "Alpha",
105
+ "beta": "Beta",
106
+ "var_95": "VaR(95%)",
107
+ }
108
+
109
+ for key, name in metric_names.items():
110
+ if key in metrics:
111
+ value = metrics[key]
112
+ if value is not None:
113
+ if isinstance(value, float):
114
+ if "return" in key or "drawdown" in key or "volatility" in key:
115
+ value_str = f"{value:.2f}%"
116
+ else:
117
+ value_str = f"{value:.2f}"
118
+ else:
119
+ value_str = str(value)
120
+ else:
121
+ value_str = "-"
122
+ table.add_row(name, value_str)
123
+
124
+ return table
@@ -0,0 +1,183 @@
1
+ Metadata-Version: 2.4
2
+ Name: fund-cli
3
+ Version: 2.0.0
4
+ Summary: 专业基金分析CLI工具 - 面向机构客户
5
+ Project-URL: Homepage, https://github.com/your-org/fund-cli
6
+ Project-URL: Documentation, https://fund-cli.readthedocs.io
7
+ Project-URL: Repository, https://github.com/your-org/fund-cli
8
+ Author: Fund CLI Team
9
+ License: MIT
10
+ License-File: LICENSE
11
+ Keywords: analysis,cli,finance,fund,investment,quant
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Financial and Insurance Industry
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Office/Business :: Financial :: Investment
19
+ Classifier: Topic :: Terminals
20
+ Requires-Python: >=3.10
21
+ Requires-Dist: akshare>=1.12.0
22
+ Requires-Dist: diskcache>=5.6.0
23
+ Requires-Dist: httpx>=0.25.0
24
+ Requires-Dist: litellm>=1.20.0
25
+ Requires-Dist: matplotlib>=3.8.0
26
+ Requires-Dist: numpy>=1.24.0
27
+ Requires-Dist: pandas>=2.0.0
28
+ Requires-Dist: plotly>=5.18.0
29
+ Requires-Dist: prompt-toolkit>=3.0.0
30
+ Requires-Dist: pydantic-settings>=2.1.0
31
+ Requires-Dist: pydantic>=2.5.0
32
+ Requires-Dist: pyportfolioopt>=1.5.0
33
+ Requires-Dist: python-dateutil>=2.8.0
34
+ Requires-Dist: pyyaml>=6.0
35
+ Requires-Dist: quantstats>=0.0.62
36
+ Requires-Dist: rich>=13.0.0
37
+ Requires-Dist: tushare>=1.4.0
38
+ Requires-Dist: typer[all]>=0.9.0
39
+ Provides-Extra: dev
40
+ Requires-Dist: black>=23.0.0; extra == 'dev'
41
+ Requires-Dist: mypy>=1.7.0; extra == 'dev'
42
+ Requires-Dist: pandas-stubs>=2.0.0; extra == 'dev'
43
+ Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
44
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
45
+ Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
46
+ Requires-Dist: pytest>=7.4.0; extra == 'dev'
47
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
48
+ Requires-Dist: types-pyyaml>=6.0.0; extra == 'dev'
49
+ Provides-Extra: docs
50
+ Requires-Dist: mkdocs-material>=9.4.0; extra == 'docs'
51
+ Requires-Dist: mkdocs>=1.5.0; extra == 'docs'
52
+ Requires-Dist: mkdocstrings[python]>=0.23.0; extra == 'docs'
53
+ Description-Content-Type: text/markdown
54
+
55
+ # Fund CLI
56
+
57
+ <div align="center">
58
+
59
+ **专业基金分析CLI工具 - 面向机构客户**
60
+
61
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
62
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
63
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
64
+
65
+ </div>
66
+
67
+ ---
68
+
69
+ ## 📖 简介
70
+
71
+ Fund CLI 是一款面向机构客户的专业基金分析命令行工具,提供基金筛选、业绩分析、组合对比、风险监控等功能。基于开源技术栈构建,支持多数据源接入和AI辅助分析。
72
+
73
+ ## ✨ 核心功能
74
+
75
+ - 🔍 **基金筛选** - 多维度筛选条件,支持业绩、风险、规模等指标
76
+ - 📊 **业绩分析** - 收益率、夏普比率、最大回撤等专业指标
77
+ - ⚖️ **基金对比** - 多基金横向对比分析
78
+ - 📈 **组合优化** - 基于现代投资组合理论的资产配置优化
79
+ - 🤖 **AI分析** (V2.0) - AI辅助投资分析和报告生成
80
+ - 💾 **多数据源** - 支持AKShare、Tushare、Wind等数据源
81
+
82
+ ## 🚀 快速开始
83
+
84
+ ### 安装
85
+
86
+ ```bash
87
+ # 使用 pip 安装
88
+ pip install fund-cli
89
+
90
+ # 或从源码安装
91
+ git clone https://github.com/your-org/fund-cli.git
92
+ cd fund-cli
93
+ pip install -e ".[dev]"
94
+ ```
95
+
96
+ ### 基本使用
97
+
98
+ ```bash
99
+ # 查看帮助
100
+ fund --help
101
+
102
+ # 筛选基金
103
+ fund filter --type 股票型 --min-scale 10
104
+
105
+ # 分析基金
106
+ fund analyze 000001
107
+
108
+ # 对比基金
109
+ fund compare 000001 000002 000003
110
+
111
+ # 查看基金信息
112
+ fund info 000001
113
+ ```
114
+
115
+ ## 📚 文档
116
+
117
+ - [安装指南](docs/installation.md)
118
+ - [使用教程](docs/usage/)
119
+ - [API文档](docs/api/)
120
+ - [开发指南](docs/development.md)
121
+
122
+ ## 🛠️ 技术栈
123
+
124
+ | 类别 | 技术 |
125
+ |------|------|
126
+ | CLI框架 | Typer, Rich |
127
+ | 数据处理 | Pandas, NumPy |
128
+ | 数据源 | AKShare, Tushare |
129
+ | 量化分析 | QuantStats, PyPortfolioOpt |
130
+ | 可视化 | Plotly, Matplotlib |
131
+ | AI集成 | LiteLLM |
132
+
133
+ ## 📁 项目结构
134
+
135
+ ```
136
+ fund-cli/
137
+ ├── src/fund_cli/ # 源代码
138
+ │ ├── cli.py # CLI入口
139
+ │ ├── config.py # 配置管理
140
+ │ ├── core/ # 核心模块
141
+ │ ├── data/ # 数据层
142
+ │ ├── analysis/ # 分析模块
143
+ │ ├── commands/ # CLI命令
144
+ │ └── utils/ # 工具函数
145
+ ├── tests/ # 测试代码
146
+ ├── docs/ # 文档
147
+ └── examples/ # 示例脚本
148
+ ```
149
+
150
+ ## 🧪 开发
151
+
152
+ ```bash
153
+ # 安装开发依赖
154
+ pip install -e ".[dev]"
155
+
156
+ # 安装 pre-commit 钩子
157
+ pre-commit install
158
+
159
+ # 运行测试
160
+ pytest tests/
161
+
162
+ # 代码格式化
163
+ black src tests
164
+
165
+ # Lint检查
166
+ ruff check src tests
167
+
168
+ # 类型检查
169
+ mypy src
170
+ ```
171
+
172
+ ## 📄 许可证
173
+
174
+ 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。
175
+
176
+ ## 🤝 贡献
177
+
178
+ 欢迎贡献!请查看 [贡献指南](CONTRIBUTING.md) 了解详情。
179
+
180
+ ## 📧 联系方式
181
+
182
+ - 问题反馈: [GitHub Issues](https://github.com/your-org/fund-cli/issues)
183
+ - 功能建议: [GitHub Discussions](https://github.com/your-org/fund-cli/discussions)
@@ -0,0 +1,66 @@
1
+ fund_cli/__init__.py,sha256=e7NXSfFxPLKs19uWmDGzP-xke9NSrO7fadv0n0ZuFSI,296
2
+ fund_cli/__main__.py,sha256=GweOhmUiW6FXo7dRj_Tkm46x43qtiBeSYRWY8cZzFhY,138
3
+ fund_cli/cli.py,sha256=SyQIvTzld9bWhUNtk_9tejEu10LP8x7X-LRJ3nU20YA,2179
4
+ fund_cli/config.py,sha256=5H_oiMo-PTyR_KWCeUgfbzRPWnsayyOVKRXuUME14Wk,5469
5
+ fund_cli/ai/__init__.py,sha256=K_d8SGCCeBhvwur-YPqKrTBAkJ5tJmq6sQF_kiCns0g,450
6
+ fund_cli/ai/analyzer.py,sha256=n2VZeal9zf5CHKb0C7cl2JiTZX5EHl6lYuizEFifjEw,11304
7
+ fund_cli/ai/prompts.py,sha256=Lpp8nrMRUwhSDGHyXjS7W5LLVUDAf7AXhUGSJYZEKSo,6957
8
+ fund_cli/ai/providers.py,sha256=g9adfq8My17WpC76J2SFAn7VdNjRiu0__GKvtT3gNr8,8863
9
+ fund_cli/analysis/__init__.py,sha256=TrB7LVw0K8W3h3yoSf5cTFtE8GOVr1_HK_4vX9uZp8w,608
10
+ fund_cli/analysis/attribution.py,sha256=wh9oYrLJhaqWcSp1r6n70hLkWwwZTL6HaqjRFbgVQqk,4923
11
+ fund_cli/analysis/backtest.py,sha256=Us3NW6lxUVfIsace4tUASIgH_GFzgisBztAJhBcc0iU,2462
12
+ fund_cli/analysis/holding.py,sha256=vd5lAvUojRIAQtbXFmIhwjRFiWEp9bh05xrnzBWQQyk,7219
13
+ fund_cli/analysis/manager.py,sha256=UmVT5OZZqYXBN7-tZXShjUl7w8L8EoV9ZE1w7Xh1VDE,4540
14
+ fund_cli/analysis/performance.py,sha256=l0SBvdp6Asy0ebIM6JHjwoHYiQUkKys8nPrRz9KkGVg,15010
15
+ fund_cli/analysis/portfolio.py,sha256=dbmE-XDTHZEmHeFDqlV3a1y6GD6ucJtE_LV0v2U5QRU,4525
16
+ fund_cli/analysis/risk.py,sha256=rby96vnFqTyupC-KrbvsxU9M03N5zRdut7MVuHxr3OE,8248
17
+ fund_cli/commands/__init__.py,sha256=mqaGfQm9f2Hq6Dvy76wx6_P6fLxrKhfJ5RoSV9WwSlo,468
18
+ fund_cli/commands/ai_cmd.py,sha256=hTfbJHOSyUPNJi78bhEzDFFXCqVlggRAFv3IGhwHWRc,15910
19
+ fund_cli/commands/analyze_cmd.py,sha256=7nTmT9KFTqcXDHnF48jdkWrFy9GpZ69EbTuHxB89cZY,15896
20
+ fund_cli/commands/compare_cmd.py,sha256=JbBDH8rjb9xpkeSNkpowdQB2oXnaRGMgpihhWz-Tk54,9075
21
+ fund_cli/commands/config_cmd.py,sha256=SoPuvBZUDzdS_lZL1Fo3_pBC8Luv5x_iGoceDiufnxI,2966
22
+ fund_cli/commands/data_cmd.py,sha256=VuuM7wkwntm7kngSZu58AseD4E74cbxwHwbCSroWFT8,3690
23
+ fund_cli/commands/filter_cmd.py,sha256=LZH9bxY6YIGf7ENzVFnffhSyNaczKyxOSGOLHIVZlv4,9401
24
+ fund_cli/commands/holding_cmd.py,sha256=tROWZ8pk_pQ5n8Eb-oeTmDEXyHvbp9vZJZ-qAinQxOo,5618
25
+ fund_cli/commands/interactive_cmd.py,sha256=vNrknzFBpDOwYZ6VNOpCHWVjpjUHzjJ5C_5eSXcxANI,2370
26
+ fund_cli/commands/main.py,sha256=Kl3wJnzncit4cQOra2SRs9VUPoxiELxJWSfBCcwZqoA,356
27
+ fund_cli/commands/manager_cmd.py,sha256=Wbk4yX_TFw8K_zEeu988qT3KyIQ2Ya_X160vylgLjjA,3081
28
+ fund_cli/commands/monitor_cmd.py,sha256=FVxCX1sc3V4pJhC9LhVSRrgpVIw3t8virgwBzU1Us78,3752
29
+ fund_cli/commands/optimize_cmd.py,sha256=n7fw0sIo0qq_FbR1hqQ2Fv1kKSl1foJlcOBZTsTcVXw,7453
30
+ fund_cli/core/__init__.py,sha256=Ckvvi7qZibPyqLorKCioI7CXtOKOYc87j-zPG8pzSK4,335
31
+ fund_cli/core/analyzer.py,sha256=IvV5hLxrISXDMiAr4WUPPLxJBzOUC4QCBvyqVZ6tlqg,745
32
+ fund_cli/core/data_manager.py,sha256=fk7un94ZcyjqVfU_akuRwQwx15ArriDedNmzwAjwUwo,6282
33
+ fund_cli/core/data_quality.py,sha256=csAsly_8DRezP-cfMRRMgVrL8QRbgAA7R-w4hyqLlGQ,5677
34
+ fund_cli/core/monitor.py,sha256=DMputAAC16OZLTMkEJ5hFdDw-2CK-8BmAojwQugARJQ,7166
35
+ fund_cli/core/optimizer.py,sha256=eBR2cbY1p2MPuWs2mbF-i7kuUu3v3Qmx5WnfP8Yjer8,1054
36
+ fund_cli/core/reporter.py,sha256=nWYL0sWivNoMb7x0J7pEOIwGeXLnt9ETYnxiLoQh23s,1295
37
+ fund_cli/core/screener.py,sha256=KaLhH7KRPXUshkghy4wyycGdWnXhrjvDaRCyn9fzAoY,5254
38
+ fund_cli/core/optimizers/__init__.py,sha256=ehDCfDixENRYBH5J6V5dVIvL1wqL8u0-AF_6CUz8hYQ,451
39
+ fund_cli/core/optimizers/efficient_frontier.py,sha256=AUzjDrh_VLzIVeNjPoip38Nf5zmuc4A49xqBefZprWA,3111
40
+ fund_cli/core/optimizers/max_sharpe.py,sha256=T0MkdxXPzp22mBkuXXqwnGPbj31wmE2uuHfWHtusXhA,1889
41
+ fund_cli/core/optimizers/mean_variance.py,sha256=lFlIlKV9zmDyAQPOmbHBqOmENwBnv1xhBncLvVukvsM,2949
42
+ fund_cli/core/optimizers/risk_parity.py,sha256=P-vScpfFBdnBukl1qy4-tRVuWeykOFRiYbgCg8yjpBk,1991
43
+ fund_cli/core/reporters/__init__.py,sha256=3fLPXM3fAYBD-6SjhZZJmlGgcokXI74usYF8Sj4PuFg,205
44
+ fund_cli/core/reporters/html_reporter.py,sha256=hZTG4mAA0N5Sg6vBRa2TRc5skgiNfXIIVk_3HSY4Ul8,2579
45
+ fund_cli/core/reporters/markdown_reporter.py,sha256=uzaUP4Vl7uB9MeDDaXReZXTrzggG-z9RyMeakBmm2SE,1357
46
+ fund_cli/data/__init__.py,sha256=1QCLoAlKTfbHWv68_--R99Se4TKCLs8PcnVSrh3wSk8,246
47
+ fund_cli/data/base.py,sha256=LxRC9xNu5HQXSoNql_l0UY76N39x7FZsxLbLSNvGv_s,4822
48
+ fund_cli/data/cache.py,sha256=YSQqONeSpr1cz5CsJNpVCIWEHYk75_gLMPw0shPE9ek,4993
49
+ fund_cli/data/models.py,sha256=i2RHgOjybx9j0UDzvrK0EWbsCbx9gfAPzEWp8fJAKyk,9446
50
+ fund_cli/data/adapters/__init__.py,sha256=cJVwp2VtMKTie97H41x_ZGrXkCi-Md_Jn2oC70O-KUg,308
51
+ fund_cli/data/adapters/akshare_adapter.py,sha256=Np4UqSoSNzEXbPWqjLjX67F3O9RFhHWEZTTqCYynCL8,13889
52
+ fund_cli/data/adapters/tushare_adapter.py,sha256=Hs26C32w2fb59-wd8e2VHWqn8Fj3_7Q5PCfzxmL3ZPA,7516
53
+ fund_cli/data/adapters/wind_adapter.py,sha256=fbjhUTLH3E43SkcSAaI5U03AXuvszK0IrjuWaPqcFdA,2382
54
+ fund_cli/utils/__init__.py,sha256=632JtzLIV3rhqGVsvqmyGKsAjmk4QPVF9yET6sdfrnQ,260
55
+ fund_cli/utils/decorators.py,sha256=6ti6ZNTsbUxWqpKazXSce_L6NAqzyRo66pWewfCtNrc,1908
56
+ fund_cli/utils/helpers.py,sha256=yxJNfDcHpGxLzCNtExtW-0BkBbUVUdV9yPdIW2M4Faw,2235
57
+ fund_cli/utils/validators.py,sha256=cjuhVJBV-DvhfHf5Mq-to7Iu_aBr23Kkntr_gBMiTDE,1226
58
+ fund_cli/views/__init__.py,sha256=wSEE4mo8Gxap_oe7boePj3yTr17BAXL3RhcRzHMVA4E,204
59
+ fund_cli/views/charts.py,sha256=cjeYoBnBzsw7Eq8NBIrr4M4zOOKtuDMfB2S5K_Zc-fk,2708
60
+ fund_cli/views/reports.py,sha256=5wN8QYvG4VRPAzr6NqdHTYrZhqGf6F7CuDAVEkNx29w,2628
61
+ fund_cli/views/tables.py,sha256=dPxA-l5yoMk1Pr4GRJo_cHjeBvhsauJVhkJugJxrdEE,3337
62
+ fund_cli-2.0.0.dist-info/METADATA,sha256=WqGXVyLQal1G7sf-oY1HXbI_Hr4-ApYpwpTopOkvQqQ,5240
63
+ fund_cli-2.0.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
64
+ fund_cli-2.0.0.dist-info/entry_points.txt,sha256=gi5pXkhu8-gS6GY-FTelrhdPQJoUVPsB8NpykfBpMek,70
65
+ fund_cli-2.0.0.dist-info/licenses/LICENSE,sha256=ykHLtJwd6JjxwAEJG6IOkF314qKB7YUoU-vRON6JcMU,1070
66
+ fund_cli-2.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.29.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ fund = fund_cli.cli:app
3
+ fund-cli = fund_cli.cli:app
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Fund CLI Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.