콘텐츠로 이동

전략 수명 주기 흐름

AQE는 StrategyState를 소유하며 예측 가능한 순서로 전략을 실행합니다.

  1. on_start(ctx)로 일회성 시작 처리를 수행합니다.
  2. universe(ctx)로 정적 또는 인라인 로직에 따른 심볼을 선택합니다.
  3. 등록된 유니버스 모델로 모듈식 심볼 선택을 수행합니다.
  4. 최종 병합된 유니버스의 자산 메타데이터를 불러옵니다.
  5. 거래 가능한 각 자산에 대해 init(ctx, asset)을 한 번씩 실행합니다.
  6. 봉마다 이력을 갱신하고 지표, 알파 모델, 전략 콜백, 인사이트 파이프를 처리합니다.
  7. on_teardown(ctx)로 종료 정리를 수행합니다.

수명 주기 로직 블록은 생성되거나 인라인으로 작성된 전략 수명 주기 메서드를 감쌉니다. 유니버스 모델은 최종 유니버스에 심볼을 추가합니다.

런타임 백테스트 흐름은 StrategyState::run_backtest 구현을 따릅니다.

aq-engine/src/core/strategy/mod.rs
// 1. strategy.on_start(ctx)
// 2. load_universe() -> strategy.universe() -> broker.get_ticker_info()
// 3. alpha.start() per alpha
// 4. load_init() -> OnInit lifecycle logic -> strategy.init per asset
// 5. alpha.init(asset) per alpha per asset
// 6. broker.load_backtest_data()
// 7. loop: broker step -> on_bar() -> optional insight generation -> run_insight_pipeline()
// 8. strategy.on_teardown(ctx)
// 9. return BacktestResults

생성된 AQS 프로젝트도 동일한 런타임 순서를 따릅니다. 차이점은 AQE가 전략을 실행하기 전에 AQS가 노드 그래프에서 전략 본문의 일부를 생성한다는 점입니다.