跳转到内容

PaperBroker 与模拟执行

PaperBroker 是 AQE 的执行模拟器,用于:

  • 回测
  • 模拟交易
  • 验证交易信号生命周期行为

它负责处理:

  • 订单提交
  • 成交
  • 取消
  • 平仓请求
  • 括号单的子订单
  • 移动止损执行
  • 交易事件发送
  • 账户和净值状态

它还负责防止无效的模拟账户状态,例如订单超出可用购买力。

YahooFinanceDataFeed 提供:

  • 品种元数据
  • 历史 K 线
  • 最新报价
  • 最新 K 线
  • 实时 K 线流订阅

这是历史研究和模拟交易运行流程默认使用的市场数据来源。

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::None
  • AssetFee::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

创建模拟执行适配器执行适配器时使用 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.rs
  • aq-engine/src/core/broker/types/mod.rs
  • aq-engine/src/core/broker/data_feeds/yahoo.rs