在 GitHub 上查看

每 N 根 K 线过滤策略图

两条指数移动平均线交叉,一边买入、另一边卖出。这张图的重点在于喂给均线的是什么数据。均线并不读取每一根 K 线,而是每五根 K 线只取一个价格;这种抽稀由一个 N 值(N values)方块完成,它把 K 线数据流接到自身的两个输入端上,用这条流为自己计数。下游的一切——均线、交叉、入场——都运行在这条更慢的时钟上,因此这张图是按采样窗口而不是按每根 K 线来观察市场。

策略概览

  • 走完的五分钟 K 线送入一个转换器,由它从每根 K 线中取出收盘价;同一条数据流还送入 N 值方块,被它变成采样脉冲。
  • N 值方块的两个输入端同时接收这条 K 线数据流:触发端启动它的倒计数,输入端逐根递减,因此它在每第五根走完的 K 线上发出一个脉冲,并立即重新启动计数。
  • 该脉冲是变量(Variable)方块的触发信号,而这个变量保存着最新的收盘价。变量会记录每一个到达的收盘价,但在脉冲到来之前不输出任何值,因此从它流出的是一条被抽稀的价格序列——每个采样窗口一个值。
  • 两条移动平均线读取的是这条抽稀后的序列,而不是 K 线本身,所以 14 周期的均线覆盖 70 根 K 线的市场时间,40 周期的均线覆盖 200 根。
  • 交叉(Crossing)方块比较快线与慢线,只在两者互换位置的那一刻发声:快线上穿时为 true,下穿时为 false。一个逻辑非(NOT)把下穿的情形转成独立的信号。
  • 持仓(Position)方块的值通过两个比较与一个零值变量作对照——非多头与非空头——每个结果再用逻辑与(AND)与对应的交叉信号合并,因此一次入场要求既出现新的交叉,又要求当前持仓不在该方向上。
  • 两个入场方块都设置为仅开仓,所以这张图同一时间只持有一个仓位、从不加仓;下单量来自一个在每根 K 线上刷新的变量。
  • 反向交叉驱动两个平仓方块,每一笔成交都会触发持仓保护(Position protection),图表面板则绘制 K 线、两条均线、入场与出场的委托、保护性委托以及每一笔成交。

入场与出场规则

  • 做多入场: 在某个采样脉冲上快线上穿慢线,且当前持仓不是多头。持仓修改(Position modify)以市价买入下单量,仅开仓,因此入场只从空仓状态建立,绝不叠加到已有仓位上。
  • 做空入场: 在某个采样脉冲上快线下穿慢线,且当前持仓不是空头。逻辑非把下穿转成信号,持仓修改以市价卖出下单量,同样仅开仓。
  • 离场: 退出有两条路径。由每一笔成交触发的持仓保护会在盈利 1.5% 时平仓,或在 1% 处止损。如果在均线换位回来之前两者都未触及,则由反向交叉接管:它触发当前持仓方向对应的平仓方块,该方块以市价送出全部仓位。由于入场方块仅开仓,结束一笔交易的那次交叉不会同时开出反向仓位——下一次入场要等到空仓状态下出现的下一次交叉。

参数

参数 默认值 说明
Candles 00:05:00 整张图所依据的 K 线周期;采样窗口就是按这些 K 线来计数的。
Bars Per Sample 5 多少根走完的 K 线构成一个采样。调大它,均线观察市场的频率更低、交易也更少;设为 1,这张图就变成在每根 K 线上进行的普通均线交叉。
Fast EMA Length 14 快线的周期长度,按采样数而不是 K 线数计算:在每个采样 5 根 K 线的设置下,它覆盖的市场时间是这个数值的五倍。
Slow EMA Length 40 慢线的周期长度,按采样数计算。要与快线长度拉开足够距离,否则两条线会因噪声而互换位置,交叉也就失去意义。
Order Volume 1 每次入场委托的数量,以合约单位计。平仓方块忽略该值,直接送出当前持仓的全部数量。
Take Profit, % 1.5 止盈距离,以成交价格的百分比表示。
Stop Loss, % 1 止损距离,以成交价格的百分比表示。

图表详情

  • 这里的 N 值方块用作抽稀器,而不是延时器。它的两个输入端来自同一条 K 线数据流,所以倒计数一到期就立即重启,脉冲在整个运行过程中始终落在每第五根走完的 K 线上。
  • 位于脉冲与均线之间的变量方块,才让重采样真正成立:它的输入端接收每一个收盘价,输出端在触发到来之前保持沉默,于是均线每个窗口只拿到一个值,完全看不到中间的那些 K 线。
  • 两条均线读取同一个变量,因此它们同步推进,交叉方块可以在数值到达时成对比较。它只报告两条线次序发生改变的那个采样点,这也是为什么在两次采样之间的 K 线上不可能入场。
  • 持仓条件写成非多头与非空头,而不是写成空仓,这样在反向仓位仍然持有时到来的交叉也能到达入场方块;把这张图限制在单一仓位的是仅开仓设置,而释放仓位的是平仓方块。
  • 每一笔成交,无论入场还是出场,都由一个组合(Combination)方块汇总后送入持仓保护,因此保护一侧看到的始终是账户实际持有的仓位,并在交叉平掉交易后随即撤下。

使用方法

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