forked from 0xemmkty/QuantMuse
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathlesson7_professional_system.py
More file actions
282 lines (225 loc) · 9.54 KB
/
Copy pathlesson7_professional_system.py
File metadata and controls
282 lines (225 loc) · 9.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
#!/usr/bin/env python3
"""
第七课:从你的lesson升级到专业量化系统
演示如何使用企业级量化框架
"""
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
import logging
# 导入专业系统模块(简化版本,避免依赖问题)
# from data_service.fetchers.yahoo_fetcher import YahooFetcher
# from data_service.processors.data_processor import DataProcessor
# from data_service.storage.database_manager import DatabaseManager
def setup_logging():
"""设置日志"""
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def lesson7_professional_demo():
"""第七课:专业系统演示"""
print("🚀 第七课:从lesson6到企业级量化系统")
print("="*60)
# 1. 专业数据获取 (vs lesson1简单API)
print("\n📊 步骤1: 专业数据获取系统")
print("-"*40)
# 演示专业系统概念,使用模拟数据
print("⚠️ 演示模式:使用模拟数据展示专业系统架构")
market_data = generate_sample_data()
# 2. 专业数据处理 (vs lesson3手工计算)
print("\n🔧 步骤2: 专业数据处理系统")
print("-"*40)
# 模拟专业数据处理器的功能
analysis_results = simulate_professional_analysis(market_data)
# 3. 专业策略信号 (vs lesson5硬编码)
print("\n🎯 步骤3: 专业策略信号生成")
print("-"*40)
# 生成综合投资建议
recommendations = {}
for symbol, analysis in analysis_results.items():
signals = analysis['signals'] # 修复属性访问
stats = analysis['statistics'] # 修复属性访问
# 综合评分系统 (vs lesson简单if判断)
score = 0
reasons = []
if signals['golden_cross']:
score += 2
reasons.append("MA金叉信号")
if signals['macd_bullish']:
score += 1
reasons.append("MACD看涨")
if signals['oversold']:
score += 2
reasons.append("RSI超卖机会")
if signals['overbought']:
score -= 2
reasons.append("RSI超买风险")
if stats['volatility'] < 0.2: # 低波动
score += 1
reasons.append("波动率适中")
# 生成建议
if score >= 3:
recommendation = "强烈买入"
elif score >= 1:
recommendation = "买入"
elif score <= -2:
recommendation = "卖出"
else:
recommendation = "持有"
recommendations[symbol] = {
'action': recommendation,
'score': score,
'reasons': reasons,
'current_price': stats['current_price']
}
# 4. 专业数据存储 (vs lesson简单CSV)
print("\n💾 步骤4: 专业数据存储系统")
print("-"*40)
try:
# 演示专业数据存储概念
print("💾 演示专业数据存储系统架构")
print(" - SQLite/PostgreSQL数据库支持")
print(" - 标准化数据表结构")
print(" - 数据完整性检查")
print(" - 事务处理和错误恢复")
# 模拟存储过程
for symbol in analysis_results.keys():
print(f"💾 存储 {symbol} 分析结果到数据库")
print("✅ 数据存储完成")
except Exception as e:
print(f"⚠️ 数据存储出错: {e}")
# 5. 生成专业报告 (vs lesson6简单打印)
print("\n📊 步骤5: 生成专业投资报告")
print("="*60)
print(" 投资建议报告")
print("="*60)
for symbol, rec in recommendations.items():
print(f"\n🏢 {symbol}")
print(f" 📊 当前价格: ${rec['current_price']:.2f}")
print(f" 🎯 投资建议: {rec['action']}")
print(f" 📈 综合评分: {rec['score']}/5")
print(f" 💡 分析依据: {', '.join(rec['reasons'])}")
print("\n" + "="*60)
# 6. 系统对比总结
print("\n🎯 第七课总结:系统升级对比")
print("="*60)
print("📚 你的Lessons → 🏢 企业级系统")
print("─"*60)
print("lesson1: 简单API调用 → 多源数据获取器")
print("lesson2: 手工处理K线 → 标准化数据处理器")
print("lesson3: 单个指标计算 → 批量指标工厂")
print("lesson4: 基础因子概念 → 完整因子分析系统")
print("lesson5: 硬编码策略 → 可插拔策略框架")
print("lesson6: 简单分析类 → 企业级分析引擎")
print("lesson7: 🚀 完整量化交易系统!")
print("="*60)
print("\n🎉 恭喜!你现在掌握了:")
print("✅ 企业级数据获取和处理管道")
print("✅ 标准化的策略开发框架")
print("✅ 专业的因子分析系统")
print("✅ 可扩展的系统架构")
print("✅ 完整的量化交易工作流")
return recommendations, analysis_results
def simulate_professional_analysis(market_data):
"""模拟专业数据处理器的分析功能"""
analysis_results = {}
for symbol, data in market_data.items():
print(f"🔍 分析 {symbol}...")
df = data['price_data']
# 计算技术指标 (模拟专业处理器)
ma5 = df['close'].rolling(5).mean()
ma20 = df['close'].rolling(20).mean()
# RSI计算
delta = df['close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(14).mean()
rs = gain / loss
rsi = 100 - (100 / (1 + rs))
# 统计数据
daily_return = df['close'].pct_change().mean()
volatility = df['close'].pct_change().std() * np.sqrt(252)
current_price = df['close'].iloc[-1]
# 信号生成
golden_cross = ma5.iloc[-1] > ma20.iloc[-1] and ma5.iloc[-2] <= ma20.iloc[-2]
death_cross = ma5.iloc[-1] < ma20.iloc[-1] and ma5.iloc[-2] >= ma20.iloc[-2]
overbought = rsi.iloc[-1] > 70
oversold = rsi.iloc[-1] < 30
# 模拟分析结果结构
analysis_results[symbol] = {
'statistics': {
'daily_return': daily_return,
'volatility': volatility,
'current_price': current_price,
'rsi': rsi.iloc[-1]
},
'signals': {
'golden_cross': golden_cross,
'death_cross': death_cross,
'overbought': overbought,
'oversold': oversold,
'macd_bullish': np.random.choice([True, False]) # 简化模拟
}
}
# 显示分析结果
stats = analysis_results[symbol]['statistics']
signals = analysis_results[symbol]['signals']
print(f" 📊 统计: 年化收益 {stats['daily_return']*252:.1%}, 波动率 {stats['volatility']:.1%}")
print(f" 🎯 信号: 金叉 {signals['golden_cross']}, RSI超买 {signals['overbought']}")
return analysis_results
def generate_sample_data():
"""生成示例数据(如果真实数据获取失败)"""
print("🎲 生成模拟数据...")
symbols = ['AAPL', 'GOOGL', 'MSFT']
sample_data = {}
for symbol in symbols:
# 生成251天的价格数据,避免长度不匹配
dates = pd.date_range(start='2023-01-01', periods=251, freq='D')
np.random.seed(hash(symbol) % 1000)
base_price = np.random.uniform(100, 300)
returns = np.random.normal(0.001, 0.02, 251)
prices = [base_price]
for ret in returns:
prices.append(prices[-1] * (1 + ret))
# 创建OHLCV数据 (252个价格点 -> 251条K线)
df = pd.DataFrame({
'open': prices[:-1], # 前251个作为开盘价
'high': [p * np.random.uniform(1.0, 1.02) for p in prices[:-1]],
'low': [p * np.random.uniform(0.98, 1.0) for p in prices[:-1]],
'close': prices[1:], # 后251个作为收盘价
'volume': np.random.randint(1000000, 10000000, 251)
}, index=dates)
# 公司信息
company_info = {
'name': f'{symbol} Corporation',
'industry': 'Technology',
'market_cap': np.random.randint(500000000, 2000000000000),
'pe_ratio': np.random.uniform(15, 30)
}
sample_data[symbol] = {
'price_data': df,
'company_info': company_info
}
print(f"✅ 生成了 {len(symbols)} 只股票的模拟数据")
return sample_data
def main():
"""主函数"""
setup_logging()
print("🎓 量化交易学习第七课:企业级系统实战")
print("基于你前6课的基础,现在体验专业量化系统!")
try:
recommendations, analysis_results = lesson7_professional_demo()
print(f"\n💾 分析结果已保存,共处理 {len(analysis_results)} 只股票")
print("🚀 下一步:你可以基于这个框架开发自己的量化策略!")
return True
except Exception as e:
print(f"❌ 程序执行出错: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
success = main()
print(f"\n程序执行 {'成功' if success else '失败'}!")