价格行为分析工具包开发(第十五部分):引入四分位理论(1)四分位绘图脚本(基础篇)
「给MT5画一条四分位参考带」
在价格行为分析里,四分位把一段行情的高低区间切成四等份,用来观察价格落在哪个层级更容易出现反应。这套脚本的思路很简单:取一段K线的最高价与最低价,按 25% / 50% / 75% 三档画水平线,帮交易者在 MT5 图表上快速建立分层参考。 原文给出的示例发布于 2025-11-03,在 MetaTrader 5 栏目下获得 871 次查看、0 条评论,说明这类轻量脚本受众不小但互动偏低——多数人会直接下载跑,不会留言。 脚本核心是先算区间内极值,再用 ObjectCreate 画水平线。下面这段是原文 MQL5 脚本的绘图主干(已做中文逐行拆解):
class="type">class="kw">double hi = iHigh(NULL,class="num">0,iHighest(NULL,class="num">0,MODE_HIGH,bars,class="num">0)); class=class="str">"cmt">// 取指定根数 bars 内的最高价 class="type">class="kw">double lo = iLow(NULL,class="num">0,iLowest(NULL,class="num">0,MODE_LOW,bars,class="num">0)); class=class="str">"cmt">// 取指定根数 bars 内的最低价 class="type">class="kw">double q1 = lo + (hi-lo)*class="num">0.25; class=class="str">"cmt">// 下四分位:低值加区间的 class="num">25% class="type">class="kw">double q2 = lo + (hi-lo)*class="num">0.50; class=class="str">"cmt">// 中四分位:即区间中线 class="type">class="kw">double q3 = lo + (hi-lo)*class="num">0.75; class=class="str">"cmt">// 上四分位:低值加区间的 class="num">75% ObjectCreate(class="num">0,"Q1",OBJ_HLINE,class="num">0,class="num">0,q1); class=class="str">"cmt">// 创建名为 Q1 的水平线对象 ObjectCreate(class="num">0,"Q2",OBJ_HLINE,class="num">0,class="num">0,q2); class=class="str">"cmt">// 创建名为 Q2 的水平线对象 ObjectCreate(class="num">0,"Q3",OBJ_HLINE,class="num">0,class="num">0,q3); class=class="str">"cmt">// 创建名为 Q3 的水平线对象
◍ 四分位理论:250点增量的关键位画法
价格不管在趋势里还是盘整里,都会在某些区间反复折返,这是所有市场的共性。要把这种折返的边界量化出来,四分位理论给了一个很直接的标尺:重大波动往往落在两个“大四分位点”之间,且以 250 PIPs 为固定步长逐级推进。 这套框架由 Ilian Yotov 提出,他在外汇交易者圈子里因为 TraderTape.com 和日播节目《All Things Forex》被广泛认知。核心用途不是预测方向,而是把支撑阻力位用等分线标死,让你一眼看到潜在反转或延续区。 本篇是系列第一篇,只做一件事:用 MQL5 脚本自动把四分位水平线画到 MT5 图表上。外汇和贵金属杠杆高、滑点大,画线只是起点,真要下单还得结合当下波动率判断,胜率只是概率而非必然。后续我们会把这套线扩展成信号和高级分析工具。
把整数价位切成四瓣看价格停顿
四分位框架先把主要整数位之间的跨度定成“主步长”,EUR/USD 上就是 0.1000 这一段,比如 1.2000 到 1.3000。再把这段均分成四份,得到三条大四分位线,分别对应 1.2250、1.2500、1.2750,价格在这些位置附近容易出现暂停、反转或加速。 更细一层是每个 100 点区间还能切出小四分位线,但实战里核心还是盯大四分位线。每条大四分位线外侧会画一小段超调/欠调带,用来容纳价格短暂刺穿或没够到的毛刺,这类毛刺往往藏着修正或反转的早期信号。 这套画法在 MT5 里靠 Quarters Drawer 脚本落地,它用不同颜色和线型把主位、大四分位、小四分位分开画,加载后直接在图上标出关键区间。外汇和贵金属波动受杠杆与消息驱动,高风险,四分位只给概率上的支撑阻力参考,不构成方向保证。
「把四分位网格脚本拆开看参数与绘制逻辑」
脚本头部用 #property strict 强制编译检查,并声明版权与版本,避免 MT5 里同名脚本冲突。输入参数把控制权交给使用者:MajorStep 默认 0.1000,决定主区间间隔;三个布尔开关 DrawLargeQuarters、DrawSmallQuarters、DrawOvershootAreas 全为 true 时,大四分位、小四分位和超调区都会被画出。 颜色直接用十六进制写死:0x2F4F4F 是深石板灰(红47、绿79、蓝79),用作主线;0x8B0000 深红(红139)标大四分位;0x00008B 深蓝(蓝139)标小四分位;超调区用内置 clrRed,等价于 RGB(255,0,0)。改这些 input 颜色值,不用动核心函数就能换肤。 绘制水平线的函数先按名字查对象,存在就删,再建新线并横跨整个图表。OnStart 里先取交易品种和买价,取不到就退出;随后把现价按 MajorStep 向下取整得到下边界,加间隔得上边界,两条主线构成框架。 大四分位开启时,主区间被四等分画线,若同时开超调标记,每条大线上下再补线,提示价格可能短暂越界。小四分位则把主区间切十份再细分,形成密网格,对贵金属或外汇剥头皮的入场位参考更有用——但外汇/贵金属杠杆高,网格只是概率参考,不是支撑阻力铁律。 收尾处脚本在右上角贴带版本号的标签,并调用图表重绘,线条和标签立刻刷新。整套逻辑模块化,你拷到 MT5 脚本目录改 MajorStep 为 0.0500,就能看黄金 5 美金一格的细分效果。
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Quarters Drawer.mql5| class=class="str">"cmt">//| Copyright class="num">2025, 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 version "class="num">1.0" class="macro">#class="kw">property strict class=class="str">"cmt">//---- Input parameters ------------------------------------------------- input class="type">class="kw">double MajorStep = class="num">0.1000; class=class="str">"cmt">// Difference between major whole numbers. input class="type">bool DrawLargeQuarters = true; class=class="str">"cmt">// Draw intermediate large quarter lines. input class="type">bool DrawSmallQuarters = true; class=class="str">"cmt">// Draw small quarter lines. input class="type">bool DrawOvershootAreas = true; class=class="str">"cmt">// Mark overshoot/undershoot areas for large quarter lines. 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">//---- Group style and thickness settings -------------------------------