价格行为分析工具包开发(第一部分):图表投影仪(基础篇)
◍ 正文
价格行为分析工具包开发(第一部分):图表投影仪 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 看密度变化最直接。
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