212 lines
4.2 KiB
Markdown
212 lines
4.2 KiB
Markdown
# analytics - 성과 분석 및 리포팅
|
|
|
|
## 개요
|
|
|
|
**analytics** 컴포넌트는 실거래 성과 측정, 귀속 분석, 리포팅을 담당합니다.
|
|
|
|
### 책임
|
|
|
|
- 기간별 수익률 및 리스크 지표 계산
|
|
- 귀속 분석(자산 배분, 종목 선택, 타이밍)
|
|
- 거래 분석 및 비용 추정
|
|
- 정기 리포트 생성 및 배포
|
|
- 벤치마크 대비 성과 비교
|
|
|
|
### 의존성
|
|
|
|
```mermaid
|
|
graph LR
|
|
Analytics[analytics] --> Mgmt[mgmt]
|
|
Analytics --> Balance[balance]
|
|
Analytics --> Data[data]
|
|
Analytics --> DB[(Database)]
|
|
|
|
Monitor[monitor] --> Analytics
|
|
|
|
style Analytics fill:#3F51B5,color:#fff
|
|
```
|
|
|
|
## 주요 기능
|
|
|
|
### 1. 성과 측정
|
|
|
|
```typescript
|
|
calculatePerformance(containerId: string, period: DateRange): PerformanceReport
|
|
getReturnsTimeseries(containerId: string, from: Date): TimeseriesData
|
|
```
|
|
|
|
### 2. 귀속 분석
|
|
|
|
```typescript
|
|
analyzeReturns(containerId: string, period: DateRange): AttributionReport
|
|
```
|
|
|
|
### 3. 거래 분석
|
|
|
|
```typescript
|
|
analyzeTrades(containerId: string, from: Date): TradeAnalysis
|
|
calculateTradingCosts(containerId: string, period: DateRange): CostAnalysis
|
|
```
|
|
|
|
### 4. 리포트 생성
|
|
|
|
```typescript
|
|
generateReport(containerId: string, type: ReportType, period: DateRange): Report
|
|
scheduleReport(config: ReportSchedule): void
|
|
```
|
|
|
|
### 5. 벤치마크 비교
|
|
|
|
```typescript
|
|
compareWithBenchmark(containerId: string, benchmarkSymbol: string, period: DateRange): ComparisonReport
|
|
```
|
|
|
|
## 데이터 모델
|
|
|
|
```typescript
|
|
interface PerformanceReport {
|
|
containerId: string
|
|
period: DateRange
|
|
returns: {
|
|
total: number
|
|
annualized: number
|
|
daily: number
|
|
weekly: number
|
|
monthly: number
|
|
ytd: number
|
|
}
|
|
risk: {
|
|
volatility: number
|
|
sharpeRatio: number
|
|
sortinoRatio: number
|
|
maxDrawdown: number
|
|
calmarRatio: number
|
|
}
|
|
benchmark?: {
|
|
symbol: string
|
|
returns: number
|
|
excessReturn: number
|
|
beta: number
|
|
alpha: number
|
|
trackingError: number
|
|
informationRatio: number
|
|
}
|
|
generatedAt: Date
|
|
}
|
|
|
|
interface AttributionReport {
|
|
containerId: string
|
|
period: DateRange
|
|
totalReturn: number
|
|
attribution: {
|
|
assetAllocation: number
|
|
stockSelection: number
|
|
timing: number
|
|
interaction: number
|
|
}
|
|
sectorContribution: {
|
|
sector: string
|
|
weight: number
|
|
return: number
|
|
contribution: number
|
|
}[]
|
|
topContributors: {
|
|
symbol: string
|
|
contribution: number
|
|
}[]
|
|
topDetractors: {
|
|
symbol: string
|
|
contribution: number
|
|
}[]
|
|
}
|
|
|
|
interface TradeAnalysis {
|
|
containerId: string
|
|
period: DateRange
|
|
summary: {
|
|
totalTrades: number
|
|
winningTrades: number
|
|
losingTrades: number
|
|
winRate: number
|
|
avgWin: number
|
|
avgLoss: number
|
|
profitFactor: number
|
|
avgHoldingPeriod: number
|
|
turnoverRate: number
|
|
}
|
|
longestWinStreak: number
|
|
longestLossStreak: number
|
|
largestWin: {
|
|
symbol: string
|
|
return: number
|
|
date: Date
|
|
}
|
|
largestLoss: {
|
|
symbol: string
|
|
return: number
|
|
date: Date
|
|
}
|
|
}
|
|
|
|
interface CostAnalysis {
|
|
period: DateRange
|
|
costs: {
|
|
commission: number
|
|
estimatedSlippage: number
|
|
tax: number
|
|
other: number
|
|
total: number
|
|
}
|
|
impact: {
|
|
grossReturn: number
|
|
netReturn: number
|
|
costDrag: number
|
|
}
|
|
costByType: {
|
|
buy: number
|
|
sell: number
|
|
}
|
|
}
|
|
|
|
interface Report {
|
|
id: string
|
|
containerId: string
|
|
type: ReportType
|
|
period: DateRange
|
|
sections: {
|
|
summary: PerformanceSummary
|
|
positions: CurrentPositions
|
|
trades: RecentTrades
|
|
performance: PerformanceCharts
|
|
attribution: AttributionAnalysis
|
|
risk: RiskMetrics
|
|
}
|
|
format: 'PDF' | 'HTML' | 'JSON'
|
|
fileUrl?: string
|
|
generatedAt: Date
|
|
}
|
|
```
|
|
|
|
## API 명세
|
|
|
|
### GET /api/analytics/containers/:containerId/performance
|
|
성과 리포트 조회
|
|
|
|
### POST /api/analytics/containers/:containerId/reports
|
|
리포트 생성
|
|
|
|
## 구현 고려사항
|
|
|
|
- 성과 계산 시 배당/분할 조정 데이터를 일관되게 사용합니다.
|
|
- 리포트 생성은 비동기 작업으로 처리합니다.
|
|
|
|
## 관련 문서
|
|
|
|
- [공통 데이터 모델](../../docs/03-data-models.md)
|
|
- [구현 로드맵](../../docs/05-roadmap.md)
|
|
|
|
### 관련 컴포넌트
|
|
- [data - 데이터 관리](../phase1/data.md)
|
|
- [monitor - 모니터링](./monitor.md)
|
|
- [risk - 리스크 관리](../phase1/risk.md)
|