研究背景
该代码针对订单驱动市场中高频交易策略的自动化设计问题。在存在买卖价差、有限订单簿深度和交易成本的现实约束下,如何动态决定每时刻的买卖量以最大化最终收益是一个复杂优化任务。传统解析方法难以求解,故采用遗传算法进行随机启发式搜索。
主要功能
- 模拟生成带价格波动和深度的订单簿时间序列数据。
- 通过遗传算法优化一个长度为100的时间步的连续值交易决策向量(正为买入量,负为卖出量),最大化策略的最终利润。
- 评估交易路径时考虑市场摩擦:仅能以当前最优买/卖价和挂单量成交,并扣除双向交易成本。
- 输出最优交易路径、利润、实际成交量序列和算法收敛图。
算法步骤
- 数据生成:模拟中间价、买卖价差、bid/ask价格和数量;设定初始资金和持仓。
- 适应度函数:调用
evaluate_trading_path,按时间顺序执行个体的交易决策,累积现金和持股,最终以清算价格计算利润。 - 遗传算法初始化:在
[-1000,1000]范围内均匀随机生成200个实数编码个体。 - 主循环(300代):
- 评估全部个体适应度,保留最优4个精英。
- 重复进行锦标赛选择、模拟二进制交叉(SBX)、高斯变异,生成新一代种群。
- 结果输出:显示最优利润,绘制买卖报价与成交量的双轴图及收敛曲线。
技术路线
采用实数编码遗传算法直接优化交易序列。个体为T维实数向量,无显式拆分买卖逻辑,由正负号区分交易方向。遗传操作方面:选择用规模为3的锦标赛选择;交叉用带边界处理的SBX算子以保证子代可行;变异为逐维度概率执行的高斯变异并做边界裁剪。适应度评估内部模拟实际订单簿成交过程,考虑量价限制,符合市场微观结构。
公式原理
- 成交与资产更新
设x(t)为第t步决策量:- 买入(
x(t) > 0):实际成交量vol = min(x(t), ask_size(t)),
成本cost = vol × ask_price(t) × (1 + cost_rate),现金:cash -= cost,持股:shares += vol。 - 卖出(
x(t) < 0):卖出量vol = min(-x(t), bid_size(t), shares),
收入earn = vol × bid_price(t) × (1 - cost_rate),现金:cash += earn,持股:shares -= vol。
最终利润 =(现金 + 持股 × 最后中间价) - 初始资产,其中初始资产按初始中间价计算。
- 买入(
- SBX交叉:利用分布指数η=20,通过扩展因子
β_q在多维度产生子代,保持变量在[lb, ub]内。 - 高斯变异:
mutated(i) += scale*(ub-lb)*randn,其中scale=0.1,依概率prob=0.1发生变异并截断。
参数设定
- 市场模拟:T=100,中间价波动标准差0.5,基础价差0.05,挂单量200~800,交易成本率0.02%。
- 策略与评估:初始现金10000,初始持仓0,最大单步交易量±1000,最终清算价为最后中间价。
- GA参数:种群200,代数300,交叉概率0.9,变异概率0.1,变异尺度0.1,精英保留4,锦标赛规模3,SBX分布指数20。
运行环境
MATLAB环境(无需额外工具箱),使用基础矩阵运算和随机数生成函数,适用于R2015b及以上版本。
应用场景
- 高频/算法交易的离线回测与策略自动生成。
- 订单簿市场中最优执行与动态建仓/减仓路径的设计。
- 金融市场微观结构研究中的代理模型,用于测试不同摩擦条件下策略的上限收益。