在 GitHub 上查看

恢复目标突破策略图

这里的入场只看一件事:一根远比近期市场宽得多的K线。出场看的是金额而不是价格——图中把持仓的浮动结果与保存在变量里的目标金额相比较,而这个目标并不是常数。亏损离场会把它放大,盈利离场会把它恢复到基准值,因此每一笔交易都知道上一笔付出了多少代价。

策略概览

  • 已完成的15分钟K线送入四个转换器,从每根K线中取出最高价、最低价、开盘价和收盘价。
  • 一个公式用最高价减去最低价,得到该K线的振幅;与此同时,平均真实波幅(Average true range)指标衡量最近十根K线的振幅水平。
  • 第二个公式把平均真实波幅乘以突破倍数,一个比较判断当前K线的振幅是否高于这个阈值——这就是“异常宽K线”的全部定义。
  • 方向只由一个比较决定:收盘价高于开盘价。一个逻辑非把同一个信号变成阴线的情形,于是两个方向的入场是从相反的两侧读取同一根K线实体。
  • 两个入场闸门都是三个条件的逻辑与:K线足够宽、方向正确、当前没有持仓。随后仓位调整(Position modify)按下单量以市价买入或卖出。
  • 盈亏变化(P&L change)在每次更新时给出持仓的浮动结果,两个比较分别把它与目标金额和止损金额相比较。
  • 目标金额不是固定数值:一个公式把基准目标乘以保存在变量中的恢复系数,因此目标会随恢复状态移动,而不是在图中写死两遍。
  • 恢复系数只由两个事件改写,各自经过自己的闸门,而组合(Combination)把这两次写入合并到存放该系数的变量的单一输入上。

入场与出场规则

  • 做多入场: 一根已完成的K线,其最高价到最低价的振幅超过平均真实波幅乘以突破倍数,收盘价高于自身开盘价,且当时没有持仓。仓位调整按下单量以市价买入。
  • 做空入场: 一根已完成的K线,其振幅超过同一阈值,但收盘价并不高于自身开盘价,且当时没有持仓。仓位调整按同样的下单量以市价卖出。
  • 离场: 图中既没有价格止损,也没有价格目标——平仓完全依据金额。当浮动结果达到当前的目标金额时,一个设置为平仓的仓位调整触发;当它跌到止损金额时,另一个触发。每个平仓模块各自掌管恢复锁存的一个分支:亏损平仓的成交放行放大后的系数,盈利平仓的成交放行数值1,两次写入在组合中汇合,再送入存放该系数的变量。

参数

参数 默认值 说明
Candles 00:15:00 整张图所使用的K线周期。
ATR Length 10 计算平均真实波幅所用的K线根数;它就是判断一根K线是否够宽的标尺。
Breakout Multiplier 1.5 一根K线要比平均值宽多少倍才算作突破。调高会让入场更稀少、更极端,调低则入场更多。
Volume 1 每笔入场委托的数量。下面所有金额都是这个数量带来的结果,因此改动其中之一就要重新调整其余。
Target Base 300 在一笔盈利交易之后开出的交易的目标金额,以结果计价的货币表示。
Recovery Multiplier 2 一笔亏损交易之后目标要乘以的倍数。2 表示下一笔交易必须赚回基准目标的两倍;1 则关闭恢复机制,只留下一个普通的目标金额。
Stop Money -600 放弃持仓时的浮动结果,写成负数。它是一个固定数值,不会被恢复系数放大。

图表详情

  • 这个锁存是图中唯一的回环:系数变量送入一个公式,公式把它乘以恢复倍数,结果在闸门变量中等待,当亏损平仓真正成交时,闸门把它写回系数变量。
  • 两个闸门都由平仓模块的成交触发,而不是由发出平仓请求的比较触发。在平仓委托尚未完成时,比较可能多次重复同样的结论;而成交只发生一次,因此每笔亏损交易只会把系数放大一次。
  • 系数变量接收输入,但并不把它当作触发,因此写入只改变它所保存的值。它按给定的触发信号输出,也就是盈亏更新,这样目标比较的两侧就保持在同一时钟上。
  • 在第一笔持仓建立之前,金额分支一直保持沉默,因为只有存在可估值的持仓时才会报告浮动结果。从那一刻起,系数、基准目标和恢复倍数会在每次更新时一同放行。
  • K线只订阅已完成的,因此每个信号都属于一根已经收盘的K线,委托带的是该K线收盘的时间,而不是K线开始的时间。

使用方法

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