PaperBroker 与模拟执行
PaperBroker 是 AQE 的执行模拟器,用于:
- 回测
- 模拟交易
- 验证交易信号生命周期行为
它负责处理:
- 订单提交
- 成交
- 取消
- 平仓请求
- 括号单的子订单
- 移动止损执行
- 交易事件发送
- 账户和净值状态
它还负责防止无效的模拟账户状态,例如订单超出可用购买力。
YahooFinanceDataFeed
Section titled “YahooFinanceDataFeed”YahooFinanceDataFeed 提供:
- 品种元数据
- 历史 K 线
- 最新报价
- 最新 K 线
- 实时 K 线流订阅
这是历史研究和模拟交易运行流程默认使用的市场数据来源。
资产费用模型
Section titled “资产费用模型”AQE 将资产费用与交易毛盈亏分开建模。Asset.fees 包含:
commission.entry.long和commission.entry.short:用于开立多头和空头持仓commission.exit.long和commission.exit.short:用于平掉多头和空头持仓swap.long和swap.short:用于多头和空头持仓的隔夜融资费用或收益
多头和空头指持仓方向,而不只是当前订单的买卖动作。买入开仓使用多头入场费用,卖出开仓使用空头入场费用。平仓时,AQE 按原持仓方向计算出场费用和隔夜利息。因此,commission.exit.short 表示空头持仓的平仓费用,即使该平仓操作是买入。
佣金和隔夜利息使用相同的公共费用类型枚举 AssetFee。可用费用类型包括:
AssetFee::NoneAssetFee::Points(points):用于基于点数的隔夜利息计算AssetFee::PercentageFee(rate):其中0.001表示交易名义金额的 0.1%AssetFee::FixedFee(amount):每次成交收取固定金额AssetFee::PerContractFee(amount):乘以交易数量AssetFee::PercentagePerContractFee(rate):按price * contract_size * quantity * rate计算
佣金计算接受正值的 PercentageFee、FixedFee、PerContractFee 和 PercentagePerContractFee。共享枚举中包含 Points,是因为隔夜利息计算需要它;如果将其用于佣金字段,AQE 会按零处理。
隔夜利息值可以为正或负。正值增加盈亏,负值减少盈亏。在模拟执行中,AQE 按以下方式计算净平仓盈亏:
gross PnL + swap - entry commission - exit commission配置 PaperBroker 费用
Section titled “配置 PaperBroker 费用”创建模拟执行适配器执行适配器时使用 with_asset_fees(...)。AQS 生成的回测使用相同路径。
use aq_engine::core::broker::paper_broker::PaperBroker;use aq_engine::core::broker::types::{ AccountType, AssetCommissionFees, AssetFee, AssetFees, AssetSideFees, AssetSwapFees,};
let fees = AssetFees { commission: AssetCommissionFees { entry: AssetSideFees { long: AssetFee::PercentageFee(0.0005), short: AssetFee::PercentageFee(0.0007), }, exit: AssetSideFees { long: AssetFee::FixedFee(1.0), short: AssetFee::FixedFee(1.0), }, }, swap: AssetSwapFees { long: AssetFee::PerContractFee(-3.25), short: AssetFee::PercentagePerContractFee(0.000041), }, ..AssetFees::default()};
let execution = PaperBroker::new(AccountType::Paper, 100_000.0, 1).with_asset_fees(fees);当按持仓方向划分的佣金对象为空时,AQE 仍接受 AssetFees 的旧版 entry 和 exit 字段,作为兼容性回退。新配置应使用 commission 和 swap 对象。
aq-engine/src/core/broker/paper_broker.rsaq-engine/src/core/broker/types/mod.rsaq-engine/src/core/broker/data_feeds/yahoo.rs
