跳转到内容

经纪商与数据源

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 的 future。替换入场挂单时使用 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 或历史数据集。这些 trait 涵盖连接管理、资产元数据、历史 K 线、当前价格和订阅。可以将其与 PaperBroker 配合,在不依赖实时执行的情况下测试数据。

有关必需方法、K 线和报价格式、能力标志及验证清单,请阅读创建自定义数据源。

通过实现 Broker 和 OrderManagementProvider,接入交易执行场所。适配器负责将 AQE 订单请求转换为该场所的 API 调用,返回账户和持仓状态,并报告订单生命周期事件。UnifiedBroker 可以将其与现有数据源或自定义数据源组合使用。

有关执行接口约定、有界事件队列、保护设置管理和恢复要求,请阅读创建自定义经纪商适配器。

这些是编译到策略中的 Rust 集成。实现 trait 并不会自动将提供商添加到 AQS 连接选择器。

来源报价行为
MT5 实时连接对原生买卖报价采样,不依赖 K 线周期
Yahoo 实时运行或模拟交易轮询分钟 K 线,以收盘价构造买价等于卖价的合成报价
回测回放根据已处理的历史 K 线生成合成报价

合成报价不提供真实点差或可执行价格。回测不会获取当前市场报价。报价订阅不会引入策略 on_quote 回调,也不会使回测由逐笔行情驱动。

编写自定义数据消费端时,请检查 DataFeedFeature::QuoteStream 以及原生报价或合成报价的能力标志。使用唯一的订阅 ID,并且只释放自己的订阅。回调应简短且非阻塞。

当前引擎区分三项限制:

字段含义
Account.max_total_orders最大挂单数量
Asset.max_order_size单个入场订单的最大数量
Asset.max_total_size单个品种的总数量上限

仓位计算会在拆分订单前计入活跃订单和已预留的数量。MT5 通过更新后的 Expert Advisor 报告容量。模拟执行不会从数据源继承实时交易账户的所有限制。

预留仅在策略内部生效。其他策略或手动订单可能占用账户容量;即使通过本地验证,经纪商仍可能拒绝订单。重试前请检查拒绝原因。

AQS 显示已送达的账户数据、净值、事件和交易信号。命令获确认不等于订单已成交;数据缺失或未及时更新,也不能证明订单已取消。结果不确定时,请检查经纪商记录和交易信号历史。

有关恢复,请参阅实时运行时;有关桌面配置,请参阅AQS 中的数据源。