유니버스 모델
유니버스 모델은 심볼 선택 로직을 모듈로 구성한 것으로, UniverseResult를 통해 선택한 심볼을 반환합니다.
pub trait UniverseModel { fn version(&self) -> &str; fn run(&mut self, ctx: &mut dyn StrategyContext) -> UniverseResult;}AQE는 Strategy::universe(ctx)와 등록된 모든 유니버스 모델이 반환한 심볼을 병합합니다. 최종 유니버스는 중복을 제거한 합집합입니다. 따라서 정적 유니버스는 인라인으로 유지하면서 하나 이상의 유니버스 모델이 관심 목록, 필터, 계좌 규칙, 날짜를 고려한 선택 로직에서 심볼을 추가할 수 있습니다.
state.add_universe_model( UniverseModelBuilder::new(Box::new(MyUniverseModel::new())) .can_fail(false) .build(),);use aq_engine::core::strategy::StrategyContext;use aq_engine::core::universe::{UniverseModel, UniverseResult};use std::collections::HashSet;
pub struct CryptoMajors;
impl CryptoMajors { pub fn new() -> Self { Self }}
impl UniverseModel for CryptoMajors { fn version(&self) -> &str { "1.0" }
fn run(&mut self, _ctx: &mut dyn StrategyContext) -> UniverseResult { let symbols = ["BTCUSD", "ETHUSD"] .into_iter() .map(str::to_string) .collect::<HashSet<_>>();
UniverseResult::passed(symbols, self.name().to_string()) }}인라인 또는 모듈식 구성
섹션 제목: “인라인 또는 모듈식 구성”인라인 수명 주기 코드도 계속 사용할 수 있습니다.
- 간단한 시작 시 등록 로직은
Strategy::on_start에 배치하세요. - 간단한 자산별 설정은
Strategy::init에 배치하세요. - 고정된 심볼 집합은
Strategy::universe에서 반환하세요. - 일회성 정리는
Strategy::on_teardown에 배치하세요.
심볼 선택의 모듈 경계가 명확하거나, 생성자 설정이 필요하거나, 전략 간에 재사용해야 한다면 유니버스 모델을 사용하세요.
필수 쿠키 및 저장소
로그인, 계정 보안, 색상 테마 설정, 이 알림 표시와 PostHog의 필수 내부 이용 현황·세션 품질·안정성 지표 수집을 위해 필수 쿠키와 저장소를 사용합니다. 광고 쿠키는 사용하지 않습니다.
