static class="type">int candle=-class="num">1""> static class="type">int candle=-class="num">1"">
货币对形态测试: 实际应用和真实交易视角。 第四部分·综合运用
📘

货币对形态测试: 实际应用和真实交易视角。 第四部分·综合运用

第 3/3 篇

「用静态变量卡住新K线开口」

想在EA里只在新K线形成时跑一次逻辑,靠静态变量记上一根编号是最省事的做法。下面这段把H1/H4/D1三类周期的新柱判断收进一个函数,返回true即代表当前刚换柱。

MQL5 / C++
class="kw">static class="type">int candle=-class="num">1;
class="type">int t1=class="num">0;
class="kw">switch(_Period)
  {
   case PERIOD_H1:  t1 = Hour();   class="kw">break;
   case PERIOD_H4:  t1 = Hour4();  class="kw">break;
   case PERIOD_D1:  t1 = Day();    class="kw">break;
  }

if(t1!=candle) {candle=t1; class="kw">return(true);}
class="kw">return (false);
}

class="type">int Hour4(){class="kw">return((class="type">int)Hour()/class="num">4);}
class="type">int Day()
  {
   class="type">MqlDateTime tm;
   TimeCurrent(tm);
   class="kw">return(tm.day);
  }
class="type">int Hour()
  {
   class="type">MqlDateTime tm;
   TimeCurrent(tm);
   class="kw">return(tm.hour);
  }
逐行拆一下:static int candle=-1 让变量跨 tick 保留,初值 -1 保证首根必触发;switch(_Period) 按当前图表周期取不同时间单位,H1用小时数、H4用小时除4向下取整、D1用日期。 if(t1!=candle) 是比较本次时间单位与上次记录,不等就更新并返回true,否则false。Hour4里 (int)Hour()/4 把 0–3 点都归为第0根4小时线,4–7点为第1根,依此类推。 直接把这段代码塞进 OnTick 开头,外包 if(IsNewBar()){...} 就能把回测里重复计算的开销砍掉。外汇与贵金属波动受杠杆放大,这类计时判断出错可能导致信号漏触发,上MT5用策略测试器跑一根EURUSD的H4就知有没有漏柱。

MQL5 / C++
class="kw">static class="type">int candle=-class="num">1;
class="type">int t1=class="num">0;
class="kw">switch(_Period)
  {
   case PERIOD_H1:  t1 = Hour();   class="kw">break;
   case PERIOD_H4:  t1 = Hour4();  class="kw">break;
   case PERIOD_D1:  t1 = Day();    class="kw">break;
  }

if(t1!=candle) {candle=t1; class="kw">return(true);}
class="kw">return (false);
}

class="type">int Hour4(){class="kw">return((class="type">int)Hour()/class="num">4);}
class="type">int Day()
  {
   class="type">MqlDateTime tm;
   TimeCurrent(tm);
   class="kw">return(tm.day);
  }
class="type">int Hour()
  {
   class="type">MqlDateTime tm;
   TimeCurrent(tm);
   class="kw">return(tm.hour);
  }

单一形态测试的诚实结论

前面几节把货币对篮子的原理、基础算法和几种常见形态都铺开了,从简单交叉到配合振荡器与趋势指标的组合结构也过了一遍。但把已识别形态单独拿去回测,效率并不令人信服——这其实在预期之内。交易公理一直强调入场需要若干信号共振,而我们此前只依赖单一形态做决策,样本逻辑上就单薄。 经验上看,只用最简单形态(比如价格与一条均线交叉)直接开仓风险很高,外汇和贵金属市场的高杠杆会把这种裸信号失误放大成大幅回撤。不过在部分时段和品种上,简单形态也跑出过值得记下的结果,说明它并非完全无用,只是不能独立承重。 要明确一点:我们目标不是写出一款稳定盈利的 EA,而是拿到能和其他信号叠加、辅助判断的可行信号。下一节会顺着这条线,看这套方法在手动盯盘和自动化里的落地空间。

◍ NZDUSD H1 上篮子指标的三种入场形态

统合指标检测 NZDUSD 买卖信号时,核心公式可写成 Indicator(NZDUSD) = Indicator(NZD) - Indicator(USD),即基准与报价货币篮子指标的差值。默认显示都采用这种差值图,方便直接看相对强弱。 以 NZDUSD H1 为例,左侧差值图先跌破 -50% 超卖红线(垂直绿线,蜡烛1开盘识别),下跌动能耗尽倾向逆转,此时可开多但风险偏高、止损要短,因为跌势可能延续。随后指标突破均线、脱离超卖,蜡烛2开盘出现第二形态,趋势动量增强、滤波器降低了逆势风险,止损由均线参数决定通常更大。 蜡烛3开盘出现第三形态:快线突破慢线,风险最小但盈利空间偏低、止损最大。注意检测后两均线间距扩大代表趋势走强,间距收窄(左侧截图可见)则是减速减弱信号。前两种形态对所有振荡器通用,第三种是按已确立趋势顺向入场的示例。 三个变体都由「突破超卖等级」这个强初始信号统合,但它很少见。把超买/超卖等级降到 ±50% 能多出信号,却放大了逆势风险——因为两篮子可能都还没跑完动量。此时形态3(顺向)就特别关键,但要躲开背离:右侧截图快线破慢线而指标反向即背离,必须跳过。 离场可看五类:指标进超买/超卖区、反方向均线突破信号、快慢线间距缩小示减速、触及0%等值阻力线(菲波也可用作等级)、或凭自有技术分析设损盈。0% 代表两篮子「相等」,指标常在此徘徊成阻力。 在 NZDUSD H1 近期图上,形态3和7出现在脱离超买区附近无背离,形态3穿零轴大涨、形态7弱反弹未穿零;形态8触超卖反转穿零却随后价格反向,及早平单能控损。形态6贴近超卖横盘无利,形态5同条件下却有延续性——说明超买/超卖附近的形态不能一律丢弃。该分析方法模糊点多,需进入「高级」阶段补足。 高级用法之一是在同图挂两个组合指标副本:V1用差值窗,V2拆出 USD(深绿)、CAD(橙)独立线。USDCAD 上 V1 给的入场点1、2无背离,切到 V2 可见点1处 CAD 超买走弱、USD 亦离超买,走势转上可多;点2两篮都穿越水平段,任一方变向都可能亏。点3虽无形态,但 V2 显两篮互破超买超卖,可能是趋势逆转起点。 另一用法是组合指标叠标准指标。组合 WPR 配合标准 WPR 看 USDCAD:形态1顺向穿零且标准WPR离超买远,潜在盈利获确认;形态2、3在标准WPR超买区里横盘或调整,解释了对冲失败原因。换组合 STOCH 同样段落,形态1、3可入、形态2现背离排除——但 WPR 认定的超买区在 STOCH 组合里只是横盘,这是不同组合指标的视角差。这些方法易识别且有效,但不是唯一路径。

「篮子策略的延伸空间」

前面几篇用组合 WPR 演示了货币篮子交易的形态识别、入场与离场规则,但 WPR 只是入口。STOCH、RSI、TDI 这类组合指标同样能搭出篮子策略框架,只是参数耦合和权重分配更绕,新手很容易在交叉信号里迷失。 这类策略对盘感和纪律的要求偏高,经验不足的交易者用模拟盘跑两周多半会暴露执行漏洞。外汇和贵金属本身高杠杆、高波动,实盘前务必用 MT5 策略测试器先验证信号逻辑。 后续还会拆解其他组合指标的写法,不急在这一篇全塞进来。

把这条线请下神坛

随文附带了六组可直接拖进 MT5 验证的素材:test.zip(15.54 KB)是形态测试工具本体,testhtml.zip(1197.56 KB)跑出了它的原始回测页面;test1.zip 里是带过滤器版本的测试 EA,对应 testhtml50.zip(226.91 KB)和 testhtml60.zip(200.84 KB)两份不同参数下的结果表;testEAbasket5.mq5(4.81 KB)则是独立篮子测试 EA。 这些文件加起来不到 1.7 MB,但覆盖了从裸形态检测到加过滤器、再到期权式分桶测试的完整链路。外汇与贵金属市场高杠杆、滑点随机,任何历史结果都只代表过去概率,下载后请在策略测试器里用自己经纪商报价重跑一遍。 真要把这套东西用起来,别迷信附件里的 html 结论——开 MT5 把 testEAbasket5.mq5 加载到 EURUSD 15 分钟图,先只看它有没有触发你预期的过滤分支,再谈调参。

常见问题

用静态变量记录上一根K线的时间,当前K线时间与之不同就说明是新开口,只在那时执行检测逻辑即可。
单一形态单独用胜率倾向不稳定,实盘前需用历史数据做样本外验证,且外汇高风险,不建议直接重仓跟。
可以,小布盯盘的AIGC已内置这类形态识别,打开对应品种页就能看到实时诊断,不用自己写代码跑。
可延伸到贵金属与交叉盘组合,但贵金属波动大、高风险,参数和止损要单独回测再上。
形态线只是概率参考而非预测,请下神坛看:实盘受滑点、流动性影响,需结合仓位和周期过滤。