콘텐츠로 이동

브로커 및 데이터 피드

AQE는 시장 데이터와 주문 실행을 분리합니다. 데이터 피드는 이력과 가격을 제공하고, 주문 실행 브로커는 주문과 계좌 상태를 관리합니다. UnifiedBroker는 둘을 결합하여 전략이 과거 데이터 테스트와 실시간 운영에서 동일한 구조를 사용할 수 있도록 합니다.

용도구현
모의 주문 실행PaperBroker
MetaTrader 5 주문 실행Mt5Broker
시장 데이터YahooFinanceDataFeed, Mt5DataFeed

모의 주문 실행과 수수료 가정은 PaperBroker를 참조하세요. Expert Advisor와 브리지 구성은 MT5 가이드를 참조하세요.

let execution = PaperBroker::new(AccountType::Paper, 100_000.0, 1);
let data = YahooFinanceDataFeed::new();
let broker = UnifiedBroker::new_backtest(execution, data);

0.2.0 API는 전체 인사이트를 브로커에 전달하는 대신 BrokerOrderRequest를 제출합니다. 이 요청에는 실행에 필요한 진입, 보호, 식별 데이터가 담깁니다.

let request = aq_engine::core::broker::BrokerOrderRequest::from(&insight);
let order = broker.submit_order(request).await?;

이 발췌 코드는 브로커와 인사이트가 이미 존재하고 OrderManagementProvider를 가져온 상태를 전제로 합니다. 전략 파이프는 일반적으로 전략 컨텍스트를 통해 변경을 요청하고 대기 중인 결과를 유지해야 합니다. 인사이트 파이프를 참조하세요.

사용자 지정 어댑터는 브로커 변경 작업에 대해 Send 퓨처를 반환해야 합니다. 대기 중인 진입 주문 교체에는 replace_order를 사용하고, 보호 설정 변경에는 update_take_profit 또는 update_stop_loss를 사용합니다. 제거된 모호한 update_order 인터페이스를 다시 사용하지 마세요.

주문 제출 후 아직 체결되지 않은 Executed 인사이트에서 update_limit(ctx, price)는 진입 지정가를, update_stop_limit(ctx, price)는 진입 스톱 발동 가격을 정정합니다. 후자는 손절 가격 변경이 아닙니다. 실행 어댑터는 이를 amend_entry_prices(order_id, limit_price, stop_price)로 처리하며, 지원하는 작업에 대해 AmendLimitPrice 또는 AmendStopPrice 기능을 명시합니다. 이 가격 정정은 주문 수량을 유지합니다. replace_order는 별도 작업입니다. 상태 및 확인 응답 규칙은 인사이트 수명 주기를 참조하세요.

**DataFeed와 DataProvider**를 구현해 자체 시장 데이터 서비스, 거래소 API, 과거 데이터셋을 연결하세요. 이 트레이트는 연결 관리, 자산 메타데이터, 과거 봉, 현재 가격, 구독을 다룹니다. 구현 결과를 PaperBroker와 결합하면 실시간 주문 실행과 독립적으로 데이터를 테스트할 수 있습니다.

필수 메서드, 봉 및 호가 형식, 기능 플래그, 검증 체크리스트는 사용자 지정 데이터 피드 만들기를 참조하세요.

**Broker와 OrderManagementProvider**를 구현해 주문 실행 시장을 연결하세요. 어댑터는 AQE 주문 요청을 해당 시장의 API로 변환하고, 계좌 및 포지션 상태를 반환하며, 주문 수명 주기 이벤트를 보고합니다. UnifiedBroker는 이를 기존 데이터 피드나 자체 구현과 결합할 수 있습니다.

실행 인터페이스의 규약, 처리량이 제한된 이벤트 대기열, 보호 설정 관리, 복구 요구 사항은 사용자 지정 브로커 만들기를 참조하세요.

이러한 연동은 전략에 컴파일되는 Rust 구현입니다. 트레이트를 구현해도 AQS 연결 선택기에 공급자가 자동으로 추가되지는 않습니다.

소스호가 동작
MT5 실시간캔들 타임프레임과 독립적으로 샘플링한 네이티브 매수 및 매도 호가
Yahoo 실시간 또는 모의 거래폴링한 분봉 종가를 매수 호가=매도 호가인 합성 호가로 표현
백테스트 재생재생 과정에서 이미 처리한 과거 봉으로 생성한 합성 호가

합성 호가는 실제 스프레드나 체결 가능한 가격을 제공하지 않습니다. 백테스트는 현재 시장 호가를 가져오지 않습니다. 호가를 구독해도 전략 on_quote 콜백이나 틱 기반 백테스트가 추가되는 것은 아닙니다.

사용자 지정 데이터 소비자는 DataFeedFeature::QuoteStream과 네이티브 및 합성 기능 플래그를 확인하세요. 고유한 구독 ID를 사용하고 자신이 만든 구독만 해제하세요. 콜백은 짧고 비차단 방식으로 유지하세요.

현재 엔진은 세 가지 한도를 구분합니다.

필드의미
Account.max_total_orders최대 대기 주문 수
Asset.max_order_size단일 진입 주문의 최대 수량
Asset.max_total_size심볼별 합산 수량 한도

수량 산정 시에는 주문을 분할하기 전에 활성 수량과 예약 수량을 고려합니다. MT5는 업데이트된 Expert Advisor를 통해 한도를 보고합니다. 모의 거래에서는 데이터 피드가 제공하는 실계좌 한도가 모두 적용되는 것은 아닙니다.

예약은 전략 내부에만 적용됩니다. 다른 전략이나 수동 주문이 계좌 한도를 사용할 수 있으므로, 로컬 검증 후에도 브로커가 주문을 거부할 수 있습니다. 재시도하기 전에 거부 사유를 확인하세요.

AQS는 전달받은 계좌 관측값, 계좌 평가액, 이벤트, 인사이트를 표시합니다. 명령 확인 응답은 체결 확인이 아니며, 관측값이 없거나 오래되었다고 해서 주문이 취소되었다고 단정할 수는 없습니다. 결과가 불확실하면 브로커 기록과 인사이트 이력을 확인하세요.

복구는 실시간 런타임을, 데스크톱 구성은 AQS의 데이터 피드를 참조하세요.