四分位看板:用图表按钮免改代码切换价位层(基础篇)
📊

四分位看板:用图表按钮免改代码切换价位层(基础篇)

(1/3)·还在反复进脚本改布尔开关?这篇基础篇把四分位线控制搬到了图表按钮上

案例拆解新手友好 第 1/3 篇
调一次四分位显示就要改代码重编译,是很多刚接触价格行为工具包的人都在忍的麻烦。其实把开关做成图表按钮,点一下就能换视图,根本不用碰源码。本篇先把这个看板的结构与逻辑拆给你看。

「四分位看板在 MT5 里的落点」

四分位理论做进 MT5 工具包时,核心不是画几条线,而是把价格区间按四分位切分后实时标注当前所处带位。2025 年 11 月 13 日发布的示例版本在 MetaTrader 5 环境跑通,基础看板不含指标堆叠,纯价格行为切片。 原文示例帖获 723 次查看、0 条评论,说明这类裸价格结构工具在发布初期讨论度低,但适合个人验证使用。 开 MT5 后可用自定义指标加载四分位看板,重点调一个参数:区间回溯根数。回溯太短噪声多,太长则带位钝化,倾向先用 200~300 根 H1 数据做初次观察。外汇与贵金属波动剧烈,四分位仅作概率参考,不构成方向承诺。

◍ 从改代码到点按钮:四分位开关的解放

四分位绘图脚本是整个价格区间划分体系的第一块拼图,它负责在 MT5 图表上自动落线,并用一组布尔开关控制每类级别的显隐。最早的做法是在输入参数里硬改:把 DrawSmallQuarters 设为 true 才出小四分位线,把 DrawLargeQuarters 设为 false 就隐藏大四分位线,上冲/下探区域同理。 这种改参流程对实盘很磨人——你盯着 EURUSD 或 XAUUSD 这类高波动品种,想临时只看大四分位线,就得停下手去调代码重加载。外汇与贵金属杠杆高、跳空频繁,图表干扰线多一分,误读价位的概率就大一分。 后来的看板工具把这套布尔逻辑搬到了图表按钮上。不用再碰 DrawSmallQuarters 这类字段,直接在图面点一下就能翻转开关,一键只看大线或全量显示,操作链路从「改代码—编译—重载」缩成「点一下」。下面这三行就是原脚本的默认输入,注意小四分位默认是关的,大四分位和上冲区默认开:

MQL5 / C++
<span class="keyword">input</span> <span class="keyword">class="type">bool</span>&nbsp;&nbsp; <span style="background-class="type">class="kw">color:rgb(class="num">216, class="num">232, class="num">194);">DrawLargeQuarters</span>&nbsp;&nbsp;= <span class="macro">true</span>;&nbsp;&nbsp;&nbsp;&nbsp; <span class="comment">class=class="str">"cmt">// Draw intermediate large quarter lines.</span>
<span class="keyword">input</span> <span class="keyword">class="type">bool</span>&nbsp;&nbsp; <span style="background-class="type">class="kw">color:rgb(class="num">222, class="num">188, class="num">133);">DrawSmallQuarters&nbsp;</span>&nbsp;= <span class="macro">false</span>;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">class=class="str">"cmt">// Draw small quarter lines.</span>
<span class="keyword">input</span> <span class="keyword">class="type">bool</span>&nbsp;&nbsp; <span style="background-class="type">class="kw">color:rgb(class="num">249, class="num">204, class="num">202);">DrawOvershootAreas</span> = <span class="macro">true</span>;&nbsp;&nbsp;&nbsp;&nbsp; <span class="comment">class=class="str">"cmt">// Mark overshoot/undershoot areas for large quarter lines.</span>

四分位看板的四个图表按钮怎么用

这套 EA 把价位显示做成图表按钮,不用去参数面板改布尔值。四个按钮分别是:大四分位线、小四分位线、上冲/下探、趋势方向,点一下切换对应价位显隐,文字激活是绿色、关掉是红色,状态一眼能看清。 趋势方向按钮顺手做了个轻量分析:按一下就用 50 周期 SMA 和当前价比,直接告诉你偏多、偏空还是横盘,按钮同样变色提示。外汇和贵金属波动大、杠杆高,这种一键判断只是快速参考,真下单前最好自己再核对一下周期和价位。 想验证很简单,挂上 EA 点几下按钮,看绿红切换和 SMA 方向是否跟图表对得上就行。

「四分位EA的面板与开关逻辑怎么搭」

这套EA把易用性放在第一位:输入参数只暴露价位间距和配色,核心算法不碰;全局布尔变量当功能开关,大四分位线默认开、小四分位线默认关,想改显示逻辑直接翻这几个变量就行。 界面从一块背景面板起手,用矩形标签模拟,位置由 PanelX=10、PanelY=10、PanelWidth=250 定死,按钮高 30、间距 5,全部相对面板定位。四个按钮分别切大四分位、小四分位、上冲区和趋势评论,激活显绿、未激活显红,单次点击即反转状态。 事件处理只监听图表点击,靠按钮名匹配功能。市场剧烈波动时这种轻量架构不容易卡,但外汇和贵金属本身高杠杆高风险,按钮再顺手也只是辅助,别当成方向依据。 四分位线绘制前先清旧线,主水平线恒显,附加线随开关走;趋势评论用指定周期 SMA 对比现价,高于 SMA 偏多、低于偏空、贴近则横盘,文本贴按钮下方动态刷。下面这段输入与全局定义,复制进 MT5 就能改参数验证。

MQL5 / C++
class="macro">#class="kw">property copyright "Christian Benjamin"
class="macro">#class="kw">property link      "[MQL5官方文档]
class="macro">#class="kw">property version   "class="num">1.0"
class="macro">#class="kw">property strict
class=class="str">"cmt">//---- Input parameters for drawing levels ----------------------------
input class="type">class="kw">double MajorStep = class="num">0.1000;   class=class="str">"cmt">// Difference between major whole numbers
class=class="str">"cmt">//---- Color settings ---------------------------------------------------
input class="type">class="kw">color  MajorColor           = 0x2F4F4F; class=class="str">"cmt">// Dark Slate Gray for major lines.
input class="type">class="kw">color  LargeQuarterColor    = 0x8B0000; class=class="str">"cmt">// Dark Red for large quarter lines.
input class="type">class="kw">color  SmallQuarterColor    = 0x00008B; class=class="str">"cmt">// Dark Blue for small quarter lines.
input class="type">class="kw">color  OvershootColor       = clrRed;   class=class="str">"cmt">// Red for overshoot/undershoot lines.
class=class="str">"cmt">//---- Line styles and thickness settings -----------------------------
input ENUM_LINE_STYLE MajorLineStyle        = STYLE_SOLID;
input class="type">int    MajorLineWidth                = class="num">4;
input ENUM_LINE_STYLE LargeQuarterLineStyle = STYLE_DOT;
input class="type">int    LargeQuarterLineWidth         = class="num">3;
input ENUM_LINE_STYLE OvershootLineStyle   = STYLE_DASH;
input class="type">int    OvershootLineWidth            = class="num">1;
input ENUM_LINE_STYLE SmallQuarterLineStyle = STYLE_SOLID;
input class="type">int    SmallQuarterLineWidth         = class="num">1;
class=class="str">"cmt">//---- Panel and button settings --------------------------------------
input class="type">int PanelX      = class="num">10;
input class="type">int PanelY      = class="num">10;
input class="type">int PanelWidth  = class="num">250;
input class="type">int ButtonHeight = class="num">30;
input class="type">int ButtonSpacing= class="num">5;
class=class="str">"cmt">//---- Global toggle variables ----------------------------------------
class="type">bool g_DrawLargeQuarters  = true;
class="type">bool g_DrawSmallQuarters  = false;

◍ 面板按钮怎么驱动价位线刷新

把季度位画线做成可交互面板,核心不在画多少条线,而在点击按钮时状态变量如何翻转并触发重绘。下面这段里 g_DrawOvershootAreas 默认开、g_DrawTrendDirection 默认关,意味着载入指标时只显示刺穿区,趋势方向注释要手动点开才跑。 CreatePanel() 用 OBJ_RECTANGLE_LABEL 在左上角距边 PanelX/PanelY 处生成底板,文本塞了四个换行当占位,边框设 BORDER_RAISED 做出微凸质感;若你改 CORNER_RIGHT_UPPER 就能挪到右上,避开自带工具栏。 OnChartEvent 里 CHARTEVENT_OBJECT_CLICK 分支靠 sparam 比对按钮名:点 BUTTON_LARGE 就把 g_DrawLargeQuarters 取反,随后 UpdateButtonColors 改色、DrawQuarterLines 重画;点 BUTTON_TREND 同理,开状态时调 UpdateTrendComment 写方向文字,关时 DeleteTrendComment 清掉。外汇与贵金属波动大,这类面板只是辅助定位,信号失效概率不低。 DrawQuarterLines 先删旧线,取 SYMBOL_BID 做锚,用 MathFloor(price/MajorStep)*MajorStep 落到大周期下沿;g_DrawLargeQuarters 为真时以 MajorStep/4.0 为步长循环 i=1..3 插三条大季度分位线。开 MT5 把 MajorStep 调成 0.005 或 0.01,黄金和欧美会给出完全不同的网格密度,自己跑一遍最直观。

MQL5 / C++
class="type">bool g_DrawOvershootAreas  = true;
class="type">bool g_DrawTrendDirection  = false;

class=class="str">"cmt">//---- Object names for panel and buttons -----------------------------
class="macro">#define PANEL_NAME       "LevelsPanel"
class="macro">#define BUTTON_LARGE     "btnLargeQuarters"
class="macro">#define BUTTON_SMALL     "btnSmallQuarters"
class="macro">#define BUTTON_OVERSHOOT "btnOvershoot"
class="macro">#define BUTTON_TREND     "btnTrendDirection"
class="macro">#define TREND_LABEL      "TrendDirectionLabel"
class="type">void CreatePanel()
  {
   if(ObjectCreate(class="num">0, PANEL_NAME, OBJ_RECTANGLE_LABEL, class="num">0, class="num">0, class="num">0))
     {
      ObjectSetInteger(class="num">0, PANEL_NAME, OBJPROP_CORNER, CORNER_LEFT_UPPER);
      ObjectSetInteger(class="num">0, PANEL_NAME, OBJPROP_XDISTANCE, PanelX);
      ObjectSetInteger(class="num">0, PANEL_NAME, OBJPROP_YDISTANCE, PanelY);
      ObjectSetInteger(class="num">0, PANEL_NAME, OBJPROP_COLOR, clrDarkGray);
      ObjectSetString(class="num">0, PANEL_NAME, OBJPROP_TEXT, "\n\n\n\n");
      ObjectSetInteger(class="num">0, PANEL_NAME, OBJPROP_BORDER_TYPE, BORDER_RAISED);
     }
  }
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)
  {
   if(id == CHARTEVENT_OBJECT_CLICK)
     {
      if(sparam == BUTTON_LARGE)
        {
         g_DrawLargeQuarters = !g_DrawLargeQuarters;
         UpdateButtonColors();
         DrawQuarterLines();
        }
      else if(sparam == BUTTON_TREND)
        {
         g_DrawTrendDirection = !g_DrawTrendDirection;
         UpdateButtonColors();
         if(g_DrawTrendDirection)
            UpdateTrendComment();
         else
            DeleteTrendComment();
        }
      class=class="str">"cmt">// Similar handling for other buttons...
     }
  }
class="type">void DrawQuarterLines()
  {
   DeleteQuarterLines();
   class="type">class="kw">double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   class="type">class="kw">double lowerMajor = MathFloor(currentPrice / MajorStep) * MajorStep;
   DrawHorizontalLine("MajorLower", lowerMajor, MajorColor, MajorLineWidth, MajorLineStyle);
   if(g_DrawLargeQuarters)
     {
      class="type">class="kw">double LQIncrement = MajorStep / class="num">4.0;
      for(class="type">int i = class="num">1; i < class="num">4; i++)
让小布替你跑这套
这些诊断与按钮化切换逻辑小布盯盘的 AIGC 已内置,打开对应品种页即可看到四分位层与趋势态的一键视图,不必自己搭 EA。

常见问题

它计算 50 周期 SMA 并与现价比较,按钮变色提示当前倾向上涨、下跌或横盘,属于概率性参考而非确定性信号。
可以,看板的四个按钮各自独立控制,关闭对应开关即不绘制该层,图表只留你聚焦的价位。
外汇贵金属杠杆高、波动突发行情多,四分位仅描述价位分布,实际突破可能受数据面驱动,请结合仓位管理。
能,小布盯盘对应品种页已内置类似按钮化四分位层与趋势判断,无需自行部署 EA 即可切换显示。
EA 用矩形标签模拟背景面板,统一容纳按钮形成结构化布局,宏定义保证对象命名一致、引用不冲突。