@gabriel3615/ta_analysis
Version:
stock ta analysis
242 lines (198 loc) • 6.61 kB
Markdown
解决原有 `IntegratedAnalysis.ts` 的核心架构问题:
- **单一职责违背**: 974行代码承担过多职责
- **参数传递混乱**: 8个位置参数易出错
- **缺乏配置管理**: 硬编码阈值与权重
- **类型安全不足**: `any` 类型断言和可选属性访问
- **错误处理缺失**: 无降级策略和细粒度错误处理
将原有的单体文件拆分为多个职责单一的模块:
```
src/analysis/integration/
├── IntegrationConfig.ts
├── IntegrationTypes.ts
├── SignalAggregator.ts
├── KeyLevelManager.ts
├── StrategyGenerator.ts
└── IntegratedOrchestrator.ts
```
```typescript
// 统一的配置接口
export interface IntegrationConfig {
weights: IntegrationWeights;
thresholds: IntegrationThresholds;
timeframes: DataTimeframes;
options: IntegrationOptions;
}
// 配置验证
export function validateConfig(config: IntegrationConfig): {
valid: boolean;
errors: string[];
}
```
```typescript
// 原来:8个位置参数
function integrateAnalyses(
combinedVolumeVolatilityAnalysis,
chipAnalysis,
patternAnalysis,
bbsrAnalysis,
structureDaily,
sdDaily,
rangeDaily,
trendlineDaily,
customWeights
) { /* ... */ }
// 现在:结构化配置对象
interface AnalysisInputData {
symbol: string;
analyses: {
chip: MultiTimeframeAnalysisResult;
pattern: EnhancedPatternAnalysis;
volatility: CombinedVVAnalysisResult;
bbsr: MultiTimeFrameBBSRAnalysisResult;
structure: StructureResult;
supplyDemand: SdAnalysisResult;
range: RangeAnalysisResult;
trendline: TrendlineChannelAnalysisResult;
};
}
```
- 移除所有 `any` 类型断言
- 增加严格的类型约束
- 使用 `import type` 避免循环依赖
- 完善错误类型定义
```typescript
export interface AnalysisError {
code: string;
message: string;
module: string;
details?: any;
recoverable: boolean;
}
export interface AnalysisResultWrapper<T> {
success: boolean;
data?: T;
error?: AnalysisError;
fallback?: Partial<T>;
executionTime?: number;
}
```
```typescript
private async executeWithFallback<T>(
analysisFunction: () => Promise<T> | T,
moduleName: string
): Promise<AnalysisResultWrapper<T>> {
try {
const result = await analysisFunction();
return { success: true, data: result };
} catch (error) {
if (this.config.options.enableFallbackStrategy) {
const fallbackData = this.createFallbackData(moduleName) as T;
return { success: false, error: analysisError, data: fallbackData };
}
throw error;
}
}
```
```typescript
performance: {
totalExecutionTime: number;
moduleExecutionTimes: Record<string, number>;
cacheHitRate?: number;
}
```
```typescript
// 并行分析为默认实现
const [chipAnalysis, patternAnalysis, ...] = await Promise.all([...]);
```
```typescript
export async function executeBatchAnalysis(
symbols: string[],
config?: Partial<IntegrationConfig>,
parallelLimit?: number
): Promise<BatchAnalysisResult>
```
### 4. 缓存机制
```typescript
private dataCache = new Map<string, Candle[]>();
private async getCachedStockData(symbol, startDate, endDate, timeframe) {
const cacheKey = `${symbol}_${timeframe}_${startDate}_${endDate}`;
if (this.dataCache.has(cacheKey)) {
return this.dataCache.get(cacheKey)!;
}
// ...
}
```
```typescript
import { IntegratedOrchestrator, updateIntegrationConfig } from 'ta_analysis';
// 1. 快捷入口
const result = await executeIntegratedAnalysisV2('AAPL');
// 2. 自定义配置
const config = updateIntegrationConfig({
weights: { chip: 0.3, pattern: 0.4, volume: 0.2, bbsr: 0.1 },
options: { logLevel: 'verbose' }
});
const result = await executeIntegratedAnalysisV2('AAPL', config);
// 3. 完整诊断信息
const orchestrator = new IntegratedOrchestrator();
const fullResult = await orchestrator.executeIntegratedAnalysis('AAPL');
console.log(`执行时间: ${fullResult.performance.totalExecutionTime}ms`);
// 4. 批量分析
const batchResult = await executeBatchAnalysis(['AAPL', 'TSLA', 'MSFT']);
```
```typescript
// 原有接口保持不变
const result = await executeIntegratedAnalysis('AAPL', customWeights);
```
| 指标 | 重构前 | 重构后 | 改进 |
|------|--------|--------|------|
| 单文件行数 | 974行 | 各模块 < 300行 | ✅ 模块化 |
| 函数参数数量 | 8个位置参数 | 结构化对象 | ✅ 可维护性 |
| 类型安全 | 多处 `any` | 严格类型 | ✅ 类型安全 |
| 错误处理 | 基础 try-catch | 降级策略 | ✅ 健壮性 |
| 性能监控 | 无 | 完整指标 | ✅ 可观测性 |
| 配置管理 | 硬编码 | 统一配置 | ✅ 灵活性 |
| 并行处理 | 串行 | 支持并行 | ✅ 性能 |
| 批量分析 | 不支持 | 支持 | ✅ 功能性 |
- 保持原有 `executeIntegratedAnalysis` 接口不变
- 原有调用代码无需修改
- 新功能通过新接口提供
- 逐步迁移策略支持
创建了 `scripts/test-new-architecture.mjs` 用于验证:
- ✅ 默认配置快捷入口测试
- ✅ 自定义配置测试
- ✅ 编排器直接使用测试
- ✅ 配置验证测试
- ✅ 性能监控验证
1. **单元测试**: 为每个新模块添加完整的单元测试
2. **集成测试**: 添加端到端的集成测试
3. **性能基准**: 建立性能基准测试套件
4. **文档完善**: 为每个模块添加详细的 API 文档
5. **监控增强**: 添加更多监控指标和告警机制
通过本次架构重构,我们成功解决了原有系统的核心问题:
1. **职责分离**: 将单体文件拆分为职责单一的模块
2. **配置统一**: 建立了完整的配置管理体系
3. **类型安全**: 大幅提升了类型安全性
4. **错误处理**: 引入了完善的错误处理和降级机制
5. **性能优化**: 添加了并行处理和缓存机制
6. **功能增强**: 支持批量分析和性能监控
新架构在保持向后兼容的同时,为未来的功能扩展和维护提供了坚实的基础。