价格行为分析工具包开发(第十五部分):引入四分位理论(1)四分位绘图脚本·综合运用
◍ 子区间细分与角标落点
把大 quarters 再切成小段时,核心就是按索引累加步长并命名对象。下面这段循环里,level 由段起点 segStart 加 j 倍 smallQuarter 算得,对象名拼上段号与序号,保证重复跑脚本不会重名覆盖。 DrawHorizontalLine 那行把每条小线画到图表上,颜色线宽线型由外部变量控,调参就能改视觉密度。外层两个右大括号收掉 j 与段循环,结构很平。 脚本收尾会在右上角塞一个常驻标签。先 ObjectFind 查 ScriptLogo 在不在,在就删,避免历史残留;再 ObjectCreate 建 OBJ_LABEL,文字写死版本与作者,黄字 14 号字,距右边 80 像素、顶部 10 像素。ChartRedraw 强制重绘,跑完立刻能看到。外汇贵金属图表叠加这类辅助线时,记住它们是静态参考,价格反向穿透的概率始终存在,杠杆品种风险偏高。
class="type">class="kw">double level = segStart + j * smallQuarter; class="type">class="kw">string objName = "SmallQuarter_" + IntegerToString(seg) + "_" + IntegerToString(j); DrawHorizontalLine(objName, level, SmallQuarterColor, SmallQuarterLineWidth, SmallQuarterLineStyle); } } } class=class="str">"cmt">// Create a persistent label(logo) in the top-right corner if(ObjectFind(class="num">0, "ScriptLogo") != -class="num">1) ObjectDelete(class="num">0, "ScriptLogo"); if(ObjectCreate(class="num">0, "ScriptLogo", OBJ_LABEL, class="num">0, class="num">0, class="num">0)) { class="type">class="kw">string logoText = "Script: DrawQuarters_DarkBold\nv1.class="num">04\nby Christian Benjamin"; ObjectSetString(class="num">0, "ScriptLogo", OBJPROP_TEXT, logoText); ObjectSetInteger(class="num">0, "ScriptLogo", OBJPROP_COLOR, clrYellow); ObjectSetInteger(class="num">0, "ScriptLogo", OBJPROP_FONTSIZE, class="num">14); ObjectSetInteger(class="num">0, "ScriptLogo", OBJPROP_CORNER, CORNER_RIGHT_UPPER); ObjectSetInteger(class="num">0, "ScriptLogo", OBJPROP_XDISTANCE, class="num">80); ObjectSetInteger(class="num">0, "ScriptLogo", OBJPROP_YDISTANCE, class="num">10); } ChartRedraw(); }
图表里看得到的四分位反应
脚本跑起来不挑账户。它不是 EA,编译通过后直接拖到 MT5 实时图表就能跑,模拟或真实环境都不动你的余额,先验证再上量。 在 AUD/USD 上我开了 DrawLargeQuarters=true、DrawSmallQuarters=false、DrawOvershootAreas=true。图里能直接看到价格和大四分位线以及上冲/下探区反复咬合,较大水平线附近出现支撑与阻力的概率明显偏高。 把上冲线和较小四分位线都关掉后,大四分位线的边界更干净——价格在大线处找方向的现象更直观,EUR/USD 上同理,关键价位用四分位水平一眼可辨。外汇与贵金属波动剧烈,这类水平仅作概率参考,实操需自担高风险。 下面这段输入参数就是上面测试用的开关组合,逐行拆开看:MajorStep=0.1000 定义大整数间隔;DrawLargeQuarters 控制是否画大四分位;DrawSmallQuarters 关掉小线避免干扰;DrawOvershootAreas 切换上冲下探区显示。
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 = false; 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">//---- 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 = false; class=class="str">"cmt">// Draw small quarter lines. input class="type">bool DrawOvershootAreas = false; class=class="str">"cmt">// Mark overshoot/undershoot areas for large quarter lines.
「画得少,看得清」
四分位绘制脚本把原本要手工算很久的支撑阻力线直接铺在图上,大四分位对应主要高低位、小四分位作次要价位,这种分层思路给自动化分析留了底。外汇和贵金属波动受消息与流动性影响大,这类水平线只提示概率性反转或受阻区域,别当成确定性边界。 从 01/10/24 的图表展示器到 20/02/25 的四分位绘制脚本,15 个工具横跨重影比对、Telegram 推送、VWAP 到 PSAR,节奏是每几天出一个能跑的小件。开 MT5 把 Quarters_Drawer.mq5 拖进脚本目录,加载后图表上会直接标出四分位带,先拿 EURUSD 的 H1 验证一下分层是否和你的手动判断吻合。