ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用 gs-quant 给量化回测加上交易成本模型:市场冲击与流动性怎么拆

用 gs-quant 给量化回测加上交易成本模型:市场冲击与流动性怎么拆 用 gs-quant 给量化回测加上交易成本模型市场冲击与流动性怎么拆【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant回测曲线漂亮、实盘一跑就打折多数情况不是策略失效而是成交价里没算交易成本。gs-quant 的量化回测引擎把每一笔成交拆成订单、执行引擎和成交价三个环节成交价由订单对象自己计算这个位置正好留给冲击模型。你可以继承订单类把成交价从历史价格原值改成中间价加上流动性冲击项再配合 TWAP 式的时间窗口把大额订单切片摊薄冲击。落地路径很直接先设 0.01 的冲击系数观察滑点变化再按资产流动性逐步上调最后用基线回测对比验证模型是否贴近实盘。一、成交价为什么偏离中间价一笔订单提交进队列后执行引擎中的SimulatedExecutionEngine按执行截止时间排序到点就由订单对象自己算出成交价和成交数量生成 Fill 事件。默认实现里成交价就是历史价格原值没有任何冲击修正——这就是回测与实盘差异的主要来源之一。gs-quant 在订单模块内置三种基准订单OrderAtMarket取执行时点价成交适合小单OrderMarketOnClose指定日收盘价成交OrderTWAP取时间窗口内全部成交价的算术平均TWAP 的本质就是订单的时间切片同一笔单量摊在窗口内多个时点单位时间成交量下降对价格的推升自然减弱。冲击建模可以看作给成交价额外加一个与你的单量 / 市场日均成交量相关的项。另一个容易被忽略的约束DataHandler 内置时钟读取未来时点数据会直接抛错。对冲击模型这是好事——平均日成交量只能取当前时点之前的历史窗口模型天然无未来函数。fill FillEvent( orderorder, filled_priceorder.execution_price(self.data_handler), filled_unitsorder.execution_quantity(), )二、冲击因子怎么校准冲击模型挂在订单的_execution_price上OrderBase 定义了execution_price、execution_quantity、execution_end_time三个钩子。最简单的做法是继承订单类让成交价偏离中间价的比例与订单量相对日均成交量的占比成正比impact 0.01 * (order_size / avg_volume) fill_price mid * (1 impact)冲击系数没有放之四海皆准的取值但可以按经验区间起步参数作用取值建议冲击系数成交价偏离中间价的比例正比于订单量/日均成交量从 0.01 起步观察滑点变化后上调流动性差的产品可到 0.03-0.05TWAP 窗口长度订单时间切片的时长窗口越长单位时间成交量越小先用 30-60 分钟试偏离度不够再逐步拉长单资产仓位上限限制单只标的的单笔单量控制订单量/日均成交量比值日均成交量的 5% 左右校准时建议按资产分层高流动性的大盘股冲击曲线平缓小盘股要单独设更高的系数。你可以先把全部订单统一调到 0.01跑一轮后按滑点排序给滑点异常的产品单独提系数。三、大订单按时间切片拆分用 TWAP 窗口做第一层拆分把一笔大单换成OrderTWAP并指定TimeWindow执行引擎只在窗口结束时按窗口均价生成一次 Fill等价于把单量摊到整个窗口。窗口太短冲击没摊开窗口太长你承担了窗口期间的价格波动风险。拆单前后各跑一遍验证拆分效果的方法很朴素同一策略同一历史区间单笔市价单和 TWAP 拆单各跑一次比较两组结果。重点看三处单位成交额的平均滑点是否下降大订单相对小订单的成本差距是否收窄总收益变化是否在可解释范围内如果拆单后滑点降幅很小说明瓶颈不在订单量而在冲击系数本身回到上一节的系数上调整。四、怎么验证成本模型贴近实盘基线回测加冲击回测做差同一个策略跑两遍第一遍不加冲击项作为基线第二遍叠加冲击模型。两遍结果之差就是你的交易成本估计重点看三个数滑点量级单位成交额的成本是否在实盘经验的区间内夏普比率变化加入成本后应下降如果反升说明模型写反了方向大单与小单的成本差冲击模型是否真的让大单更贵分批处理长历史报告类任务用 PortfolioManager 的months_per_batch分批调度避免一次性提交全部历史报告参数必须大于 0长历史建议 3-6 个月一批。pm.schedule_reports(backcastFalse, months_per_batch6)五、从回测到实盘的落地清单模块分工上Backtest 管生命周期和结果获取SimulatedExecutionEngine管订单到期的成交判定OrderBase 决定每一笔成交价——你只需要改最后一环。落地建议三步走先跑无冲击基线拿到成本上界再叠加冲击系数 0.01 的模型看滑点方向是否正确最后按资产分层调系数并对比实盘执行单。当模型产出的平均滑点与实盘同量级这套成本模型就可以用来筛选策略了而不是继续凭感觉加固定手续费。【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表