4.3 KiB
4.3 KiB
| domain | last_rule_review_commit | last_rule_updated_at |
|---|---|---|
| domain-model | 704f1eb232 |
2026-06-24 |
domain-model
목적 / 책임
ALT의 핵심 business vocabulary를 Go 타입으로 표현한다. Market, instrument, price, bar, backtest run, strategy, portfolio state, paper account, live trading account/order/risk/audit, and analysis result concepts stay transport- and storage-free here.
포함 경로
packages/domain/- shared Go domain model modulepackages/domain/market/- market, venue, currency, instrument, OHLCV bar typespackages/domain/backtest/- backtest run spec, run state, result typespackages/domain/trading/- broker-neutral live trading account, order, risk, capability, and audit types
제외 경로
packages/contracts/- external protobuf schema representationservices/api/- socket transport and API boundaryservices/worker/- execution and scheduled job boundary
주요 구성 요소
market.Instrument- tradable instrument identity and provider symbol mappingmarket.AssetTypeandmarket.VenueMetadata- venue/market/currency metadata for KR and US market datamarket.UniverseSelector- provider import universe vocabularymarket.ProviderCapabilityandmarket.ProviderCapabilityRule- provider/venue/asset type/timeframe capability matrixmarket.Bar- timeframe OHLCV market data pointbacktest.RunSpec- strategy, market, timeframe, period inputs for a runbacktest.InputSelector- optional instrument/symbol selector for backtest bar source filteringbacktest.Run- backtest lifecycle statebacktest.Result- backtest financial summary, trades, positions, summary metrics, and equity curvebacktest.Strategy,backtest.StrategyInput,backtest.OrderIntent- strategy execution vocabularybacktest.PortfolioState,backtest.Fill,backtest.Position- portfolio accounting state and fill applicationbacktest.PaperAccount,backtest.RiskSettings,backtest.CheckRisk, andbacktest.FillOrderOnDailyBar- paper trading simulation vocabulary and daily OHLC fill semanticsbacktest.TotalReturn- decimal return calculation helper backed by rational arithmetictrading.OrderIntent,trading.AccountSnapshot,trading.PositionSnapshot, andtrading.BrokerCapability- broker-neutral live trading vocabularytrading.RiskPolicy,trading.KillSwitchState,trading.EvaluateRisk- live risk and kill switch decision vocabularytrading.AuditEvent,trading.AuditFilter,trading.HasRawSecretKey- sanitized live operation audit vocabulary
유지할 패턴
- Domain type names should stay concise and market-neutral unless a market-specific rule is unavoidable.
- Decimal values are represented as strings through
market.Decimal; avoid float types for prices and quantities. - Portfolio and return calculations use exact decimal/rational conversion, not floating point arithmetic.
- Keep package dependencies inward: domain packages should not import API, worker, CLI, Flutter, protobuf generated code, database drivers, or proto-socket.
- Keep provider and broker vocabularies open string types where external systems may introduce new values.
- Treat account IDs in
tradingas operator aliases or internal identifiers; raw broker account numbers, tokens, and provider bodies must be stripped before domain objects are created. - Keep provider capability decisions in domain-model, while provider-specific fetch/auth behavior remains in worker adapters.
다른 도메인과의 경계
- contracts: domain-model owns internal Go vocabulary; contracts owns protobuf wire schema and compatibility.
- worker: domain-model defines the shapes; worker executes imports, normalization, backtests, paper/live trading, persistence, provider calls, scheduler work, and socket mapping.
- api: domain-model may be mapped to responses, but API transport details stay outside this module.
금지 사항
- Do not add persistence annotations, socket parser logic, or environment configuration here.
- Do not introduce generated protobuf code into this package.
- Do not use
float32orfloat64for money, price, or quantity values. - Do not store raw account numbers, access tokens, app secrets, authorization headers, or raw external provider payloads in domain objects or audit payloads.