Aller au contenu

Courtiers et flux de données

AQE garde l’exécution et les données de marché derrière des traits courtier/datafeed afin que le code de stratégie puisse utiliser la même surface runtime en backtest, en paper trading et en live.

AQE expose actuellement ces intégrations runtime concrètes :

  • courtiers d’exécution : PaperBroker, Mt5Broker
  • datafeeds : YahooFinanceDataFeed, Mt5DataFeed

Commencez par les pages d’intégration ciblées :

Elles sont composées via UnifiedBroker, qui donne au runtime de stratégie une surface courtier cohérente.

aq-engine/src/core/broker/mod.rs
pub trait Broker {
async fn connect(&self) -> Result<bool, BrokerError>;
async fn disconnect(&self) -> Result<bool, BrokerError>;
fn is_connected(&self) -> bool;
fn get_name(&self) -> String;
fn get_account_type(&self) -> Result<AccountType, BrokerError>;
}
pub trait OrderManagementProvider: Broker {
async fn submit_order(&self, insight: Insight) -> Result<Order, BrokerError>;
async fn cancel_order(&self, order_id: &str) -> Result<bool, BrokerError>;
async fn close_position(&self, order_id: &str, qty: f64, price: Option<f64>) -> Result<bool, BrokerError>;
async fn get_account(&self) -> Result<Account, BrokerError>;
fn drain_trade_events(&self) -> Vec<(Order, TradeUpdateEvent)>;
}
aq-engine/src/core/broker/mod.rs
pub trait DataFeed {
async fn connect(&self) -> Result<bool, BrokerError>;
async fn disconnect(&self) -> Result<bool, BrokerError>;
fn is_connected(&self) -> bool;
}
pub trait DataProvider: DataFeed {
async fn get_ticker_info(&self, symbol: &str) -> Result<Asset, BrokerError>;
async fn get_history(
&self,
symbol: &str,
start: DateTime<Utc>,
end: DateTime<Utc>,
time_frame: TimeFrame,
) -> Result<DataFrame, BrokerError>;
async fn get_latest_quote(&self, symbol: &str) -> Result<Quote, BrokerError>;
async fn get_latest_bar(&self, symbol: &str) -> Result<Bar, BrokerError>;
}
let execution = PaperBroker::new(AccountType::Paper, 100_000.0, 1);
let data = YahooFinanceDataFeed::new();
let broker = UnifiedBroker::new_backtest(execution, data);

En live, le même pattern s’applique, mais le runtime utilise le chemin live au lieu de new_backtest(...).

Quand la synchronisation live est activée, AQE publie l’état broker/runtime dans des tables par session utilisées par AQS :

  • insights
  • strategy_accounts
  • strategy_equity_points
  • strategy_live_metrics
  • strategy_events

Cela signifie que le comportement courtier/datafeed façonne directement ce que l’opérateur voit dans l’UI desktop.

  • aq-engine/src/core/broker/mod.rs
  • aq-engine/src/core/broker/types/mod.rs
  • aq-engine/src/core/broker/paper_broker.rs
  • aq-engine/src/core/broker/mt5_broker.rs
  • aq-engine/src/core/broker/data_feeds/yahoo.rs