在 GitHub 上查看

分形最小距离策略图示

分形是指最高价高于(或最低价低于)左右各两根相邻K线的那根K线,只有在后面的K线出现之后才能被认定。本图示同时寻找这两种分形,记住最近一次出现的每种分形的价格,并且在两者相距不足以值得在其间交易之前拒绝下单。所有计算都基于已完成的K线,因此价位一经认定即刻确定,之后不再修改。

策略概览

  • 整个图示由一条K线序列驱动,而且它只输出已完成的K线,因此任何价位、任何距离和任何委托都不会建立在后续跳动仍可能推翻的价格之上。
  • 前值(Previous value)返回上一根K线,最高值(Highest)与最低值(Lowest)计算到该K线为止的五根K线的极值——这是一个完全位于过去的窗口。
  • 第二个前值返回三根之前的那根K线,也就是该窗口的正中央,两个转换器分别读取它的最高价和最低价。
  • 当中心K线的最高价与窗口的最高值一致时,图示便得到一个上分形;对最低价做镜像判断则标记出下分形。锁存变量保存每个分形的价格;由于锁存会忽略为假的比较结果,只有在真正出现分形的那根K线上,保存的价格才会改变。
  • 第二对变量在每根K线上重新输出这两个已保存的价位,因此计算两者间距的公式以及与最小距离的比较都会在每根K线上给出结果,而不只是在出现分形的K线上。
  • 多空两边各自把自己的分形判断与该距离判断合并到一个逻辑条件中;通过的信号先平掉反向持仓,然后才开立新仓,两者都以市价成交。
  • 持仓保护(Position protection)跟随每一笔成交,并按每根已完成K线的收盘价计算离场价格,因此止盈或止损每根K线检查一次。
  • K线、两个极值、两个已保存的价位以及每一笔成交都绘制在同一个图表区域中,因此两个价位及其间距可以直接从图上读出。

入场与出场规则

  • 做多入场: 下分形得到确认——三根之前那根K线的最低价是截止到上一根K线的五根K线窗口中的最低值——并且最近的上方价位与最近的下方价位之间的距离不小于最小距离。若持有空头仓位,图示先将其平掉,然后按市价买入委托数量。
  • 做空入场: 上分形得到确认——三根之前那根K线的最高价是同一窗口中的最高值——且满足同样的距离条件。若持有多头仓位,图示先将其平掉,然后按市价卖出委托数量。
  • 离场: 有两种情况可以结束一笔交易。相反方向的分形会在发出新的入场委托之前平掉已有持仓,这正是每个信号上平仓模块位于开仓模块之前的原因。与此相互独立的是,持仓保护按成交价格的百分比计算止盈或止损并据此平仓,判断依据是每根已完成K线的收盘价。

参数

参数 默认值 说明
Candles 00:05:00 唯一一条K线序列的时间周期。只输出已完成的K线,因此每根K线做出一次决策。
Upper Fractal Length 5 窗口中的K线数量,中心K线的最高价与该窗口的最高值比较。
Lower Fractal Length 5 窗口中的K线数量,中心K线的最低价与该窗口的最低值比较;应与 Upper Fractal Length 保持相等,使分形保持对称。
Fractal Shift 3 中心K线位于多少根K线之前。当窗口为五根并延迟一根K线时,取 3 可使中心正好落在窗口正中。
Minimum Distance 100 允许入场时,最近的上方价位与最近的下方价位之间所需的最小间距。它是以该品种价格单位表示的绝对距离,因此把图示移到报价数量级不同的品种上时,必须重新调整这个数值。
Order Volume 1 委托数量,以手为单位。
Take Profit, % 2 止盈距离,以成交价格的百分比表示,在每根已完成K线的收盘价上检查。
Stop Loss, % 1 止损距离,以成交价格的百分比表示,在每根已完成K线的收盘价上检查。

图表详情

  • 指标模块会把送到它那里的任何数据都标记为已完成的值——它无法区分正在形成的K线与已收盘的K线。只输出已完成的K线,才能把未完成的最高价和最低价挡在窗口之外,否则它们会悄悄改变极值,并在下一次更新时被覆盖。
  • 同一条订阅也保证了委托的合法性:由未完成K线的更新构建出来的委托会带有该K线的开盘时间,会因为来自过去而被拒绝。
  • 窗口向后延迟一根K线,使被判断的那根K线正好位于窗口正中,其前后各有两根K线。因此分形最早也要在其出现三根K线之后才被认定,而且此后不再修改。
  • 锁存触发器在比较结果为假时将其丢弃,而不保存任何值,正是这一点把“本根K线上判断通过”变成了“这是最后一次判断通过时的价格”。在各自的第一个分形出现之前,两个价位都不存在,因此在两种分形都出现之前无法入场。
  • 两个入场模块都按市价交易,并且被设置为不要求策略处于在线状态,因此该图示在历史数据上的表现与实盘交易中一致。

使用方法

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