erlangshen 0.1.0

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 (93) hide show
  1. package/.claude/agents/equity-agent.md +26 -0
  2. package/.claude/agents/macro-agent.md +25 -0
  3. package/.claude/commands/analyze.md +40 -0
  4. package/.claude/commands/macro.md +29 -0
  5. package/.claude/settings.json +12 -0
  6. package/CODEX_GOAL.md +46 -0
  7. package/README.md +206 -0
  8. package/bin/cli.js +67 -0
  9. package/bin/erlangshen +2 -0
  10. package/bin/xiaoergod +2 -0
  11. package/frontend/index.html +700 -0
  12. package/knowledge/crypto_guide.md +147 -0
  13. package/knowledge/economic_indicators.md +125 -0
  14. package/knowledge/financial_glossary.md +148 -0
  15. package/knowledge/first_principles.md +50 -0
  16. package/knowledge/first_principles_deep.md +115 -0
  17. package/knowledge/global_markets.md +173 -0
  18. package/knowledge/insights.md +141 -0
  19. package/knowledge/market_basics.md +116 -0
  20. package/knowledge/memos/session_20260513_003616.json +6 -0
  21. package/knowledge/memos/session_20260513_003822.json +6 -0
  22. package/knowledge/risk_management.md +151 -0
  23. package/knowledge/team_context.md +42 -0
  24. package/knowledge/trading_strategies.md +114 -0
  25. package/package.json +42 -0
  26. package/requirements.txt +14 -0
  27. package/scripts/postinstall.js +188 -0
  28. package/scripts/preuninstall.js +22 -0
  29. package/src/__init__.py +4 -0
  30. package/src/__pycache__/__init__.cpython-313.pyc +0 -0
  31. package/src/agents/__init__.py +3 -0
  32. package/src/agents/base.py +103 -0
  33. package/src/agents/base_agent.py +86 -0
  34. package/src/agents/equity.py +136 -0
  35. package/src/agents/equity_agent.py +91 -0
  36. package/src/agents/erlang.py +165 -0
  37. package/src/agents/macro.py +137 -0
  38. package/src/agents/macro_agent.py +81 -0
  39. package/src/agents/multi_asset.py +147 -0
  40. package/src/agents/multi_asset_agent.py +87 -0
  41. package/src/api/__init__.py +1 -0
  42. package/src/api/__pycache__/__init__.cpython-313.pyc +0 -0
  43. package/src/api/__pycache__/server.cpython-313.pyc +0 -0
  44. package/src/api/cli.py +435 -0
  45. package/src/api/cli_enhanced.py +537 -0
  46. package/src/api/server.py +266 -0
  47. package/src/brain.py +200 -0
  48. package/src/cli.py +153 -0
  49. package/src/commands/__init__.py +3 -0
  50. package/src/commands/analyze.py +131 -0
  51. package/src/commands/macro.py +100 -0
  52. package/src/commands/memo.py +216 -0
  53. package/src/commands/portfolio.py +154 -0
  54. package/src/commands/report.py +228 -0
  55. package/src/commands/risk.py +183 -0
  56. package/src/commands/search.py +183 -0
  57. package/src/commands/stock.py +124 -0
  58. package/src/config.py +327 -0
  59. package/src/core/__init__.py +1 -0
  60. package/src/core/brain.py +645 -0
  61. package/src/core/cerebellum.py +175 -0
  62. package/src/core/investment_universe.py +423 -0
  63. package/src/core/knowledge.py +207 -0
  64. package/src/core/memory.py +115 -0
  65. package/src/hooks/__init__.py +3 -0
  66. package/src/hooks/session_end.py +57 -0
  67. package/src/hooks/session_start.py +75 -0
  68. package/src/knowledge/__init__.py +1 -0
  69. package/src/mcp/__init__.py +3 -0
  70. package/src/mcp/feishu.py +331 -0
  71. package/src/mcp/fund_tools.py +323 -0
  72. package/src/mcp/macro.py +452 -0
  73. package/src/mcp/market.py +331 -0
  74. package/src/mcp/registry.py +168 -0
  75. package/src/network/__init__.py +15 -0
  76. package/src/network/detector.py +125 -0
  77. package/src/network/proxy.py +199 -0
  78. package/src/network/router.py +103 -0
  79. package/src/prompts/__init__.py +1 -0
  80. package/src/prompts/analysis_framework.md +164 -0
  81. package/src/prompts/persona.md +65 -0
  82. package/src/prompts/report_template.md +144 -0
  83. package/src/skills/__init__.py +3 -0
  84. package/src/skills/framework.py +105 -0
  85. package/src/skills/templates.py +342 -0
  86. package/src/tools/__init__.py +1 -0
  87. package/src/tools/file_tools.py +209 -0
  88. package/src/tools/macro_tools.py +152 -0
  89. package/src/tools/market_tools.py +1172 -0
  90. package/src/tools/registry.py +398 -0
  91. package/src/tools/search_tools.py +777 -0
  92. package/tests/__init__.py +1 -0
  93. package/tests/test_erlangshen.py +140 -0
@@ -0,0 +1,152 @@
1
+ """
2
+ Macro Tools - 宏观数据工具
3
+ 提供经济指标、利率、汇率等宏观数据查询
4
+ """
5
+ from typing import Optional, Any
6
+ from datetime import datetime
7
+ from loguru import logger
8
+
9
+
10
+ class MacroTools:
11
+ """
12
+ 宏观数据工具集
13
+
14
+ 工具函数:
15
+ - get_macro_indicator: 宏观指标最新值
16
+ - get_macro_history: 宏观指标历史
17
+ - get_interest_rates: 利率数据
18
+ - get_currency_rates: 汇率数据
19
+ - get_gdp_data: GDP数据
20
+ """
21
+
22
+ def __init__(self, db_connection: Optional[Any] = None):
23
+ self.db = db_connection
24
+ logger.info("MacroTools initialized")
25
+
26
+ async def execute(self, tool_name: str, **kwargs) -> Any:
27
+ """执行指定工具"""
28
+ method = getattr(self, tool_name, None)
29
+ if method and callable(method):
30
+ return await method(**kwargs)
31
+ return {"error": f"Unknown tool: {tool_name}"}
32
+
33
+ async def get_macro_indicator(self, code: str) -> dict:
34
+ """
35
+ 获取宏观指标最新值
36
+
37
+ Args:
38
+ code: 指标代码,如 "CPI", "PPI", "PMI"
39
+
40
+ Returns:
41
+ dict 指标数据
42
+ """
43
+ logger.info(f"Fetching macro indicator: {code}")
44
+ # 模拟数据
45
+ return {
46
+ "code": code,
47
+ "name": self._get_indicator_name(code),
48
+ "value": 0.0,
49
+ "unit": "%",
50
+ "period": "",
51
+ "timestamp": datetime.now().isoformat(),
52
+ "source": "mock",
53
+ "note": "请接入宏观数据库",
54
+ }
55
+
56
+ async def get_macro_history(
57
+ self,
58
+ code: str,
59
+ months: int = 12,
60
+ ) -> dict:
61
+ """
62
+ 获取宏观指标历史数据
63
+
64
+ Args:
65
+ code: 指标代码
66
+ months: 历史月数
67
+
68
+ Returns:
69
+ dict 包含时间序列数据
70
+ """
71
+ logger.info(f"Fetching {months} months history for {code}")
72
+ return {
73
+ "code": code,
74
+ "name": self._get_indicator_name(code),
75
+ "periods": [],
76
+ "values": [],
77
+ "source": "mock",
78
+ "note": "请接入宏观数据库",
79
+ }
80
+
81
+ async def get_interest_rates(self, country: str = "CN") -> dict:
82
+ """
83
+ 获取利率数据
84
+
85
+ Args:
86
+ country: 国家代码 (CN/US/EU/JP)
87
+
88
+ Returns:
89
+ dict 利率数据
90
+ """
91
+ logger.info(f"Fetching interest rates for {country}")
92
+ rates_map = {
93
+ "CN": {"policy_rate": 3.45, "lpr_1y": 3.45, "lpr_5y": 4.20},
94
+ "US": {"fed_funds_rate": 5.25, "prime_rate": 8.50},
95
+ "EU": {"depo_rate": 4.00, "refinancing": 4.50},
96
+ "JP": {"policy_rate": 0.10, "10y_yield": 0.85},
97
+ }
98
+ return {
99
+ "country": country,
100
+ "rates": rates_map.get(country, {}),
101
+ "timestamp": datetime.now().isoformat(),
102
+ "source": "mock",
103
+ "note": "请接入真实利率数据",
104
+ }
105
+
106
+ async def get_currency_rates(self, base: str = "USD") -> dict:
107
+ """
108
+ 获取汇率数据
109
+
110
+ Args:
111
+ base: 基准货币
112
+
113
+ Returns:
114
+ dict 汇率数据
115
+ """
116
+ logger.info(f"Fetching currency rates with base {base}")
117
+ return {
118
+ "base": base,
119
+ "rates": {
120
+ "CNY": 7.24,
121
+ "EUR": 0.92,
122
+ "JPY": 155.0,
123
+ "GBP": 0.79,
124
+ },
125
+ "timestamp": datetime.now().isoformat(),
126
+ "source": "mock",
127
+ "note": "请接入真实汇率数据",
128
+ }
129
+
130
+ async def get_gdp_data(self, country: str = "CN", quarters: int = 8) -> dict:
131
+ """获取GDP数据"""
132
+ logger.info(f"Fetching GDP data for {country}")
133
+ return {
134
+ "country": country,
135
+ "quarters": [],
136
+ "values": [],
137
+ "yoy": 0.0,
138
+ "source": "mock",
139
+ "note": "请接入真实GDP数据",
140
+ }
141
+
142
+ def _get_indicator_name(self, code: str) -> str:
143
+ """获取指标名称映射"""
144
+ names = {
145
+ "CPI": "居民消费价格指数",
146
+ "PPI": "工业生产者出厂价格指数",
147
+ "PMI": "采购经理指数",
148
+ "GDP": "国内生产总值",
149
+ "M2": "广义货币供应量",
150
+ "REER": "实际有效汇率",
151
+ }
152
+ return names.get(code, code)