在 GitHub 上查看

使用Level1限价单的Last Price均值回归

本例重点展示Order registering与Level1执行:熟悉的EMA偏离回归被实现为可成交限价单。尽管策略历史名称含有Last Price,所有决定仍只依据已完成的四小时K线,不存在逐笔信号路径。

策略概览

  • 已完成四小时收盘价输入EMA(20),并与其上下0.5%的边界比较。
  • 空仓时,收盘价低于下边界请求买入,高于上边界请求卖出。
  • 多头在收盘价回到EMA或其上方时退出,空头在回到EMA或其下方时退出。
  • 每根K线采样Level1最优卖价用于买单、最优买价用于卖单,正价格门避免无报价时登记。
  • 入场和退出共用一单位数量,因此本图自行建立的仓位可由一次反向成交归零。

入场与出场规则

  • 做多入场: Position == 0且Close < EMA × (1 − 0.5/100)时,在采样的best ask登记买入限价,穿过价差以模拟源代码BuyMarket的即时执行。
  • 做空入场: Position == 0且Close > EMA × (1 + 0.5/100)时,在采样的best bid登记卖出限价,穿过价差以模拟SellMarket。
  • 离场: Position > 0且Close >= EMA时,共用卖出方块按best bid卖一单位;Position < 0且Close <= EMA时,共用买入方块按best ask买一单位。

参数

参数 默认值 说明
Candle Time Frame 04:00:00 EMA及全部决策使用的已完成K线周期,与C#默认值一致。
EMA Period 20 ExponentialMovingAverage包含的已完成收盘价数量。
Entry Distance, % 0.5 空仓入场要求价格偏离EMA的百分比。
Shared Entry/Exit Volume 1 入场与退出限价单共用的数量。

图表详情

  • C#在入场和退出均使用市价单。本图有意保留Order registering,并以best ask买、best bid卖的可成交限价获得近似即时执行。
  • 被动版本会在best bid买、best ask卖,但必须增加Order cancellation或replacement处理信号改变后未成交的订单。
  • Close与EMA来自同一根已完成K线。变量在EMA更新后才释放缓存的close,避免把新收盘价与旧EMA比较。
  • 共用数量对应无参数BuyMarket/SellMarket所用的Strategy.Volume。外部或不同规模仓位不能保证由固定一单位退出完全归零。
  • 交易思想与已发布的MA_Deviation重叠;本例独特内容是Level1报价采样与可成交限价执行。

使用方法

将 .json 文件导入 Designer,在回测器中用历史数据运行,然后根据自己的交易品种调整参数或方块,确认无误后再用于实盘。