价格行为分析工具包开发(第一部分):图表投影仪(基础篇)
📘

价格行为分析工具包开发(第一部分):图表投影仪(基础篇)

第 1/2 篇

◍ 正文

价格行为分析工具包开发(第一部分):图表投影仪 MetaTrader 5 — 示例 | 23 六月 2025, 06:59

  • 097

2 Christian Benjamin

「把昨天的图表叠到今天看」

价格行为交易者常犯的一个错,是只盯当下K线而忘了前一日波动结构对今日的压制与牵引。把前一天的图表以“幽灵模式”半透明叠加到当前周期上,能直接比对昨日高低点、收盘位与今日开盘后的位移关系,省去来回翻周期的动作。 这套思路在MT5里可行,因为每根完成的日K都留在历史里,用脚本抓取前一交易日OHLC并重绘到可见区域即可。本文先讲为什么要做这件事,再给工具轮廓,然后落代码,最后看实际投影效果。 外汇与贵金属波动受消息与流动性切换影响大,叠加历史图表只作结构参照,不代表后市必然重复,交易仍需自担高风险。

把昨天的盘面投影到今天看什么

把前一交易日的价格投影到当前图表,最直接的好处是省去翻历史。支撑阻力不再是手画线,而是叠加层直接显示,交易者能立刻拿今天的价格去比对昨天的关键位。 高于前一天高点运行,往往意味着多头动能占优;跌破前一天低点,则偏空情绪可能发酵。这种对照不需要切周期,实时就能做。 2024年9月19日与20日的连续图表对比显示,前日画出的支撑阻力位在次日仍被价格测试并反应,说明投影对定位有意义。但纯手动叠加有个坑:识别出的支撑位不一定是最重要的,噪声会混进来。 不筛选次要水平,假信号概率会上升,止损和入场都可能放错地方。我们的工具只提取最有影响力的高低点再做投影,等于先降噪再叠加,分析准度自然高一点。

◍ 在 MetaEditor 里搭一个昨日投影脚本

从 MetaEditor 的「新建」入口选「脚本」类别,编辑器会直接生成 MQL5 脚本骨架。这一步不只是走流程,它决定后续编译环境按脚本而非 EA 或指标处理你的代码,少了这步容易在调用事件函数时踩坑。 脚本头部那几行 #property 不是装饰。copyright 和 link 标了作者身份,description 会在 MT5 加载时显示给使用者看;script_show_inputs 让输入面板在拖入图表时自动弹出,version 则方便你之后迭代。下面这段代码就是实际可用的属性与输入段。 输入参数段把「幽灵」效果的控制权交给使用者:GhostColor 默认 clrGray,LineStyle 用 STYLE_DOT 点线,LineWidth 为 2;ShowHighLow 默认开,ShiftBars 为 0 表示不偏移,ProjectForwardBars 默认 100 根——意味着昨天的形态会往前投影 100 根蜡烛。外汇与贵金属波动剧烈,这类叠加仅作视觉参照,实盘仍属高风险。 OnStart() 只做一件事:调 DrawGhostCandles()。后者先取当前周期 Period(),再用 iBarShift() 算昨今柱数,遍历昨天每根 K 线的 OHLC 投到今天;DrawGhostBar() 负责画高低线和开收矩形,DrawHorizontalLine() 单独标昨天高低位。模块化拆开,你改颜色或线宽不用动主循环。 把下面代码存成 .mq5 编译,拖到 EURUSD 的 H1 图表,可能看到昨日波幅以灰点线浮在当前价上方。若想验证投影逻辑,把 ProjectForwardBars 改成 20 看密度变化最直接。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//|                                                 Chart Projector.mq5 |
class=class="str">"cmt">//|                                       Christian Benjamin |
class=class="str">"cmt">//|                                         [MQL5官方文档] |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="macro">#class="kw">property copyright   "Christian Benjamin"
class="macro">#class="kw">property link        "[MQL5官方文档]
class="macro">#class="kw">property description "Script to overlay yesterday&class="macro">#x27;s price action with ghost effect. Projected onto current day&class="macro">#x27;s chart and beyond"
class="macro">#class="kw">property indicator_chart_window
class="macro">#class="kw">property strict
class="macro">#class="kw">property script_show_inputs
class="macro">#class="kw">property version "class="num">1.0"
class="kw">input class="type">color GhostColor = clrGray;        class=class="str">"cmt">// Color for ghost effect(can be transparent)
class="kw">input class="type">int LineStyle = STYLE_DOT;         class=class="str">"cmt">// Line style for ghost candlesticks
class="kw">input class="type">int LineWidth = class="num">2;                 class=class="str">"cmt">// Line width for ghost candlesticks
class="kw">input class="type">bool ShowHighLow = true;           class=class="str">"cmt">// Show high/low lines of yesterday
class="kw">input class="type">int ShiftBars = class="num">0;                 class=class="str">"cmt">// Number of bars to shift ghost forward/backward
class="kw">input class="type">int ProjectForwardBars = class="num">100;      class=class="str">"cmt">// Number of bars to project ghost pattern forward
class="type">void OnStart()
{
   DrawGhostCandles(); class=class="str">"cmt">// Call the function to draw ghost candles
}
class="type">void DrawGhostCandles()
{
   ENUM_TIMEFRAMES timeFrame = Period(); class=class="str">"cmt">// Get the current timeframe

常见问题

在代码里用昨天的高低收数据绘制水平线或色块,加载到当前周期即可叠加显示,重点看价格是否回到昨日关键位。
检查是否选对了品种和周期,以及代码里时间偏移是否算错;多数情况是昨日数据没取到或绘图对象被清掉。
可以,小布盯盘的AIGC已内置昨日投影诊断,打开对应品种页就能直接看到叠加层,不用自己写代码。
用iHigh按D1周期取昨根K线索引1的值,别用当前周期换算,能避开时区导致的偏移误差。
只看昨日高低点和收盘区,价格触到这些线时的反应比中间杂波更有参考价值,外汇贵金属波动大需谨慎。