点数图指标·综合运用
(3/3)·从绘制逻辑到标准信号,一篇补齐前两部分未覆盖的落地用法与收尾要点
键盘事件驱动的重绘与清屏逻辑
在 MT5 自定义指标里,OnChartEvent 能截获图表按键消息。上面这段把键盘 'C'(键码 67)和 'R'(键码 82)做成了手动控制开关:按 C 直接把 CandlesBufferOpen 整段置 0 并立刻 ChartRedraw,相当于清空重画;按 R 则重新跑拷贝、计算列数、上色、定尺寸、反转数组、画水平线一整套流程。 注意清空循环用的是 Bars(Symbol(),PERIOD_CURRENT) 取当前周期总柱数,x 从 0 跑到这个数把缓冲写 0。若你改了指标周期,这套上限会跟着变,不必硬编码。 R 键里 FuncCopy 返回 -1 会弹 Alert 提示拷贝失败,其余函数返回值(如 ColorCalculate、z、Turn)虽被接收却没做错误分支。实盘加载时若发现按 R 没反应,优先查 FuncCopy 是否拿到数据,而不是怀疑绘图函数。外汇与贵金属波动快,这类手动重绘仅作辅助验证,杠杆品种高风险,按键误操作也可能让你误判图形。
class="type">void OnChartEvent(const class="type">int id, const class="type">long &lparam, const class="type">class="kw">double &dparam, const class="type">class="kw">string &sparam) { class=class="str">"cmt">//--- if(id==CHARTEVENT_KEYDOWN) { class=class="str">"cmt">//--- class="num">67 - The "C" key code clears the indicator buffer if(lparam==class="num">67) { for(class="type">int x=class="num">0; x<Bars(Symbol(),PERIOD_CURRENT); x++) CandlesBufferOpen[x]=class="num">0; ChartRedraw(); } class=class="str">"cmt">// class="num">82 - The "R" key code redraws the indicator if(lparam==class="num">82) { class=class="str">"cmt">//--- Start the copying function class="type">int ErrorCopy=FuncCopy(History); class=class="str">"cmt">//--- In case of error, print the message if(ErrorCopy==-class="num">1) Alert("Failed to copy data."); class=class="str">"cmt">//--- Call the function for calculating the number of columns Columns=FuncCalculate(History); class=class="str">"cmt">//--- Call the function for coloring columns class="type">int ColorCalculate=FuncColor(Columns); class=class="str">"cmt">//--- Call the function for determining column sizes class="type">int z=FuncDraw(History); class=class="str">"cmt">//--- Start the function for array reversal class="type">int Turn=FuncTurnArray(Columns); class=class="str">"cmt">//--- Start the function for drawing horizontal lines class="type">int Horizontal=FuncDrawHorizontal(true); } } }
◍ 给 C 和 R 键挂上清理重绘逻辑
在 MT5 指标或脚本里,给键盘事件绑定次级动作能省掉手动刷新图形的麻烦。原文仅留了一行注释,说明要为 "C" 键接「清空」、"R" 键接「重绘」两类行为,这属于交互层的基础设施,没它就得每次去对象列表里删。 具体实现时,通常在 OnChartEvent 里捕获 id==CHARTEVENT_KEYDOWN,再按参数 key 判断是 'C' 还是 'R'。清理倾向用 ObjectsDeleteAll 配合 ChartRedraw,重绘则直接 ChartRedraw 强制刷新。外汇与贵金属图表波动快,这类热键能降低误看旧图形的概率,但高频重绘本身也有轻微卡顿风险,实盘前先在模拟盘验证。
class=class="str">"cmt">// +++ Secondary actions for the "С" key - clear and the "R" key - redraw +++
「点数图里的标准形态与信号判定」
点数图分析分两条路:看形态,或者看支撑阻力线。后者在理想状态下都用 45 度角画线,但挂到 MT5 主图用日本烛形承载时,画线角度会随主图缩放变形,实际标出来未必是严格的 45 度,验证时别死磕角度。 双顶和双底是最基础的翻转信号。双顶表现为价格先拉出 X 列、回落出 O 列、再上冲并超过前高 X 列一格值,倾向给出买入信号;双底完全反过来,下滑出 O 列、反弹 X 列、再出新 O 列且比前一 O 列低一格,可能触发卖出信号。 三顶和三底不常见但信号更强,本质是双顶底的重复确认。价格同一价位碰两次后向上突破即三顶买入;同一价位碰两次后向下破位即三底卖出。对称三角形突破、牛熊弹射器,逻辑都类似——向上破平等边或三角上沿偏买入,向下破则偏卖出,外汇与贵金属杠杆高,这类破位假突破概率不低。
- 度趋势线本身是一条动态支撑或阻力。线被下破通常转卖出倾向,被上破转买入倾向。把上述形态套进开头提到的指标图,能在实时点数图里直接对照标出的形态区块。
记住这一条就够了
点数图没有被时代淘汰,在 MT5 里用方块代替 X/O 的改良指标虽不能在策略测试器里跑回测,但生成的图形对支撑阻力识别依旧够准。 把这份 apfd.mq5 稍作改动就能套到 Renko 上,或者合并成带菜单的单一文件;想直接画在主图窗口也得再动几行坐标代码,社区里就有人提过这种需求。 外汇和贵金属波动大、杠杆高,这类图表只帮你过滤时间噪音看价格本身,信号误判风险始终在,实盘前务必在模拟盘验过。