4.3 KiB
4.3 KiB
simulation - 시뮬레이션 환경
개요
simulation 컴포넌트는 Paper Trading, 시나리오 테스트, 파라미터 최적화를 제공하여 실전 전 검증을 지원합니다.
책임
- Paper Trading 계좌/주문 실행
- 전략 시뮬레이션 및 비교
- 파라미터 최적화 및 과최적화 검증
- 몬테카를로 및 스트레스 테스트
- 실계좌 전환 계획 생성
의존성
graph LR
Simulation[simulation] --> Strategy[strategy]
Simulation --> Risk[risk]
Simulation --> Data[data]
Simulation --> Analytics[analytics]
Simulation --> DB[(Database)]
Audit[audit] --> Simulation
style Simulation fill:#607D8B,color:#fff
주요 기능
1. Paper Trading
createPaperAccount(config: PaperAccountConfig): PaperAccount
executePaperTrade(order: Order): PaperOrderResult
2. 전략 시뮬레이션
runSimulation(config: SimulationConfig): SimulationResult
compareStrategies(strategyIds: string[], config: SimulationConfig): ComparisonResult
3. 파라미터 최적화
optimizeParameters(strategyId: string, searchSpace: ParameterSpace): OptimizationResult
validateOptimization(result: OptimizationResult, outOfSampleData: MarketData): ValidationResult
4. 시나리오 테스트
testScenario(containerId: string, scenario: Scenario): ScenarioResult
runMonteCarloSimulation(containerId: string, iterations: number): MonteCarloResult
5. 전환 지원
promoteToProd(paperAccountId: string, realAccountId: string): MigrationPlan
cloneContainer(sourceId: string, targetAccountId: string): Container
데이터 모델
interface PaperAccount {
id: string
name: string
balance: {
initialCash: number
currentCash: number
positions: Position[]
totalEquity: number
}
settings: {
commissionModel: 'FIXED' | 'PERCENTAGE'
commissionRate: number
slippageModel: 'FIXED_BPS' | 'VOLUME_BASED'
slippageBps: number
}
isActive: boolean
createdAt: Date
}
interface SimulationConfig {
strategyId: string
startDate: Date
endDate: Date
initialCapital: number
universe: string[]
costs: {
commission: number
slippage: number
tax: number
}
constraints: RiskLimits
rebalanceFrequency: string
}
interface SimulationResult {
config: SimulationConfig
performance: PerformanceMetrics
equity: {
date: Date
value: number
}[]
trades: {
date: Date
symbol: string
action: 'BUY' | 'SELL'
quantity: number
price: number
}[]
drawdowns: {
start: Date
end: Date
depth: number
recovery: number
}[]
completedAt: Date
}
interface ParameterSpace {
parameters: {
name: string
type: 'INTEGER' | 'FLOAT' | 'CATEGORICAL'
min?: number
max?: number
step?: number
values?: any[]
}[]
}
interface OptimizationResult {
strategyId: string
searchSpace: ParameterSpace
bestParameters: Record<string, any>
bestMetric: number
trials: {
parameters: Record<string, any>
metrics: PerformanceMetrics
}[]
optimizationTime: number
warnings: {
overfitting: boolean
insufficientData: boolean
unstableParameters: string[]
}
}
interface MonteCarloResult {
iterations: number
returns: {
mean: number
median: number
std: number
percentiles: {
p5: number
p25: number
p75: number
p95: number
}
}
drawdowns: {
mean: number
max: number
percentiles: {
p95: number
p99: number
}
}
probabilities: {
profit: number
loss10pct: number
loss20pct: number
}
distribution: number[]
}
API 명세
POST /api/simulation/run
시뮬레이션 실행
POST /api/simulation/optimize
파라미터 최적화
구현 고려사항
- 과최적화 경고 기준을 명확히 정의합니다.
- Paper Trading과 실계좌 체결 차이를 리포트에 표시합니다.