이벤트 추가
add_events를 사용하면 AQE 전략이 주 타임프레임 외에 추가 시장 데이터 이벤트 스트림을 구독할 수 있습니다. 처음 지원되는 이벤트 스트림은 EventStreamType::Bar입니다.
주 전략 타임프레임은 run_backtest(...)에 전달하거나 실시간 런타임에 설정한 타임프레임을 기준으로 항상 자동 등록됩니다. 1m, 15m, 1h 등 보조 데이터용 타임프레임이 필요할 때만 add_events를 호출하세요.
기본 사용법
섹션 제목: “기본 사용법”on_start에서 보조 데이터 스트림을 등록하세요.
use aq_engine::core::strategy::{EventStreamType, StrategyContext};use aq_engine::core::utils::timeframe::{TimeFrame, TimeFrameUnit};
fn on_start(&mut self, ctx: &mut dyn StrategyContext) { ctx.add_events( EventStreamType::Bar, Some(TimeFrame::new(15, TimeFrameUnit::Minute)), );}AQE는 불러온 유니버스의 모든 자산에 해당 스트림을 적용합니다. 전략이 BTC와 ETH를 거래하면 두 심볼 모두에 15m 보조 봉 스트림이 등록됩니다.
ctx.add_events(EventStreamType::Bar, None) 호출은 주 타임프레임을 가리키며, 자동 등록된 주 스트림과의 중복은 제거됩니다.
이벤트 옵션
섹션 제목: “이벤트 옵션”옵션이 필요하면 EventStreamRequest를 사용하세요.
use aq_engine::core::strategy::{EventStreamRequest, EventStreamType, StrategyContext};use aq_engine::core::utils::timeframe::{TimeFrame, TimeFrameUnit};
fn on_start(&mut self, ctx: &mut dyn StrategyContext) { ctx.add_events_with_options( EventStreamRequest::bar(Some(TimeFrame::new(1, TimeFrameUnit::Hour))) .allow_trading(true), );}allow_trading은 해당 이벤트 스트림에 대한 전략 및 알파 모델의 인사이트 생성을 제어합니다.
false는 보조 데이터 스트림의 기본값입니다. AQE는 이력을 갱신하고on_bar를 호출하지만, 해당 보조 이벤트에 대해 알파 모델의generate_insights나 전략의generate_insights를 호출하지 않습니다.true이면 해당 보조 이벤트에 대해 알파 모델의generate_insights와 전략의generate_insights를 실행할 수 있습니다.
브로커 실행은 기존 실행 경로를 따릅니다. 보조 봉은 전략 컨텍스트와 신호 생성에 필요한 정보를 보강하기 위한 것이며, 별도의 브로커 체결 스트림으로 취급해서는 안 됩니다.
이력 키
섹션 제목: “이력 키”주 타임프레임은 기본 심볼을 이력 키로 유지합니다.
let main_history = ctx.history().get(symbol);보조 타임프레임은 {symbol}:{timeframe}을 사용합니다.
let feature_history = ctx.history().get("BTC:15m");let faster_history = ctx.history().get("BTC:1m");let hourly_history = ctx.history().get("ETH:1h");이렇게 하면 보조 데이터가 주 전략 이력과 분리됩니다. 지표와 사용자 지정 상태는 사용하는 이벤트나 신호에 맞는 키에서 데이터를 읽어야 합니다.
현재 이벤트 읽기
섹션 제목: “현재 이벤트 읽기”on_bar, 알파 모델, generate_insights 안에서 ctx.current_event()를 사용하면 AQE가 현재 처리하는 이벤트를 검사할 수 있습니다.
fn on_bar(&mut self, ctx: &mut dyn StrategyContext, symbol: &str, _bar: &BarData) { let Some(event) = ctx.current_event() else { return; };
let history = ctx.history().get(&event.history_key);
if event.is_feature { println!( "feature bar: {} {} history={} allow_trading={}", event.symbol, event.timeframe, event.history_key, event.allow_trading, ); } else { println!("main bar: {symbol}"); }}StrategyEventContext에는 다음 항목이 포함됩니다.
event_typesymboltimeframehistory_keyis_featureallow_tradingtimestamp
컨텍스트는 해당 이벤트의 봉 처리가 끝날 때까지 활성 상태를 유지합니다. 여기에는 이력 갱신, 지표 갱신, on_bar, 알파 모델의 인사이트 생성, 그리고 해당 이벤트에 인사이트 생성이 허용된 경우 전략의 인사이트 생성이 포함됩니다.
보조 데이터 스트림을 사용하는 경우
섹션 제목: “보조 데이터 스트림을 사용하는 경우”전략에 둘 이상의 시간 간격으로 집계된 시장 데이터가 필요할 때 보조 데이터 스트림을 사용하세요.
- 신호를 생성하기 전에
15m구조를 읽는 일봉 전략 1m변동성 또는 유동성 필터를 사용하는1h전략- 주 실행 타임프레임의 신호를 상위 타임프레임으로 확인하는 전략
주 타임프레임을 실행 시점의 기본 기준으로 유지하세요. 보조 데이터 스트림에 인사이트 생성을 의도적으로 허용한 경우가 아니라면 컨텍스트 제공 용도로만 사용하세요.
로그인, 계정 보안, 색상 테마 설정, 이 알림 표시와 PostHog의 필수 내부 이용 현황·세션 품질·안정성 지표 수집을 위해 필수 쿠키와 저장소를 사용합니다. 광고 쿠키는 사용하지 않습니다.
