在 GitHub 上查看

MACD 多周期共振策略图

单个 MACD 只是一种看法;两个不同周期的 MACD 指向一致才算信号。本图分别在 30 分钟和 4 小时 K 线上度量 MACD 与自身信号线之间的距离,只有当两个读数指向同一方向、且订单簿的点差足够窄时才开仓。

策略概览

  • 两个 K 线模块在同一个交易品种上以两个时间周期运行:30 分钟用于交易,4 小时用于确认。
  • 每条 K 线序列各自驱动一个 MACD,两个转换器分别从各自的指标中取出 MACD 线和信号线。
  • 一个公式用 MACD 线减去信号线,于是每个周期都被归结为一个数字:为正说明快线在前,为负说明快线落后。
  • 市场深度(Market depth)被截取到最优档,两个转换器分别读取最优卖价和最优买价;第三个公式把它们换算成点差。
  • 同步(Sync)保存这三个数字,并在 4 小时的节拍上一起放行。正是这一点让比较变得可靠:订单簿在一根 K 线内会刷新上百次,没有它,这些读数就永远不属于同一时刻。
  • 在同步(Sync)之后,两个差值与零比较,点差与其上限比较,再由一个逻辑条件把这三个结果连同无持仓状态汇总在一起。
  • 多空两个方向的入场都是固定手数的市价单,并且只有在无持仓时才会发出。
  • 仓位保护(Position protection)负责照看这笔交易:它跟踪入场成交,从订单簿读取当前价格,并在达到按百分比设定的止盈或止损时平仓。

入场与出场规则

  • 做多入场: 在 4 小时的节拍上,两个差值同时为正 —— 交易周期和确认周期上的 MACD 都位于各自的信号线之上 —— 点差处于上限之内,且当前无持仓。仓位修改(Position modify)以市价买入设定的下单手数。
  • 做空入场: 在同一节拍上,两个差值同时为负,点差与无持仓的条件与上面相同。仓位修改(Position modify)以市价卖出设定的下单手数。
  • 离场: 图中没有单独的离场信号:一旦建立持仓,就交由仓位保护(Position protection)接管,在相对入场价盈利 1.5% 或亏损 1% 时平仓。持仓期间出现的反向读数会被忽略,因此不会在途中反手。

参数

参数 默认值 说明
Trading Candles 00:30:00 交易用 MACD 所使用的时间周期。
Confirming Candles 04:00:00 确认用 MACD 的时间周期,同时也是同步(Sync)统一放行全部数据的节拍。
Maximum Spread 50 仍允许入场的最大点差,以价格单位计。
Order Volume 1 下单手数。
Take Profit, % 1.5 止盈距离,按入场价的百分比计。
Stop Loss, % 1 止损距离,按入场价的百分比计。

图表详情

  • 两个 MACD 模块都设置为只输出已形成的最终值,因此未走完的 K 线无法影响决策。
  • 确认用的 MACD 参数刻意比交易用的更短:一个月的历史数据里 4 小时 K 线本就不多,标准的 12/26/9 会把其中大部分时间耗在预热上。
  • 同步(Sync)会为自己保存的每条线路命名,并且每条线路的两端都必须连接 —— 只送进去却从不取出的值会让该模块一直等待,策略也就无法启动。
  • 点差是在同步(Sync)之后才参与比较,而不是在它到达的地方比较;也只有这样,由订单簿驱动的过滤条件才能放进由 K 线驱动的条件之中。
  • 仓位保护(Position protection)的输入来自订单簿而非 K 线价格,因此它按当前最优档的价格计算离场。

使用方法

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