手工图表和交易工具包(第二部分)。 图表图形绘图工具(基础篇)
📘

手工图表和交易工具包(第二部分)。 图表图形绘图工具(基础篇)

第 1/3 篇

MT5 自带图形绘制工具能干啥

MT5 客户端的图表图形绘图工具,是手工交易里最容易被低估的一套武器。它不依赖指标计算,直接在价格图上画线段、矩形、通道、斐波那契,用来标关键位和形态边界。 官方在 2021 年 2 月 8 日发布的这篇工具包第二部分,累计浏览 3126、评论 16,说明手动画线派在 MT5 用户里一直有稳定需求。 和 EA 自动画图不同,手工图形工具的优势是可随时拖拽修正,适合价格行为交易者临场标止损区和突破位。外汇与贵金属杠杆高、波动突兀,画线仅作概率参考,不能当成入场保证。

◍ 键盘驱动的直线绘制工具包怎么工作

这个工具包的目标很直接:用键盘快捷键在 MT5 图表上快速画线,省去反复切鼠标菜单的麻烦。第一版没有图形界面,纯靠快捷键触发,但已经能把改图表层级(Z-索引)、切时间帧、切直线模式(射线或线段)这些操作压缩到一次按键里。 基点选取看鼠标位置:指针在价格上方就抓对应烛条的高点,在下方就抓低点。当前函数库能画的对象包括水平/垂直无终点线、常规趋势线(取离鼠标最近的两个极值点,可设线段或射线,线段还能用特殊模式把终点推到未来,长度=两极值点距离×EA参数里的系数)、带长度的水平级别(短线和延伸线,比率可配)、带水平标签的垂线、斐波那契扇形(VFan,级别参数可改)、以及一套三个对象的安德鲁草叉。 项目结构不复杂,五个文件放在 Include/Shortcuts 目录下:GlobalVariables.mqh、Graphics.mqh、Mouse.mqh、Shortcuts.mqh、Utilites.mqh。主文件 Shortcuts.mqh 里建了 CShortcuts 类实例,接你自己的 EA 只需包含并调用。前文讲过 Utilites.mqh,这一节重点在管绘图逻辑的 Graphics.mqh。 外汇和贵金属图表波动快,这类键盘画线在重要数据发布前后能省下关键几秒,但快捷键误触可能画错层,实盘前先在模拟盘跑熟。

「把对象前缀塞进数组更顺手」

第二版函数库比初版多出不少可配置项,原因是受影响的图表对象种类变多了。作者在全局头里用黄色高亮标出了所有新增片段,这些改动不只能调直线样式,还能控屏幕上其他图形对象的显示行为。 为了后续调用方便,对象前缀名被统一收进数组。比如作者打算以后加一个「删掉带级别的垂直线」这类复合对象的功能,届时直接遍历数组就能定位,比硬编码每个对象名省力。 当前全局设置文件里 VERSION 常量定为 2.0(注意不是 #property 而是宏定义,作者认为这样改起来更顺)。键盘映射也扩到了 11 个:U/D 切周期,T 趋势线,R 射线开关,Z 置顶图表,V 带短级别垂直线,S 短级别,L 长级别,H 水平线,I 垂直线,F 斐波那契扇,P 安德鲁音叉。 这套配置直接在 MT5 的 GlobalVariables.mqh 里改 input 字符串就能换键位,外汇和贵金属图表对象多、叠加杂,改完前先在模拟盘验证快捷键冲突概率。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//|                                                                  GlobalVariables.mqh |
class=class="str">"cmt">//|                     Copyright class="num">2020, MetaQuotes Software Corp. |
class=class="str">"cmt">//|                     [MQL5官方文档] |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="macro">#class="kw">property copyright "Copyright class="num">2020, MetaQuotes Software Corp."
class="macro">#class="kw">property link      "[MQL5官方文档]
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| File describing parameters available to the user                  |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="macro">#define VERSION class="num">2.0 class=class="str">"cmt">// Not class="macro">#class="kw">property but a constant. A bit more convenient.
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Key settings                                                      |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="kw">input class="type">class="kw">string  Keys="=== Key settings ===";
class="kw">input class="type">class="kw">string  Up_Key="U";                      class=class="str">"cmt">// Switch timeframe up
class="kw">input class="type">class="kw">string  Down_Key="D";                    class=class="str">"cmt">// Switch timeframe down
class="kw">input class="type">class="kw">string  Trend_Line_Key="T";              class=class="str">"cmt">// Trend line
class="kw">input class="type">class="kw">string  Switch_Trend_Ray_Key="R";        class=class="str">"cmt">// Indication of a trend line ray
class="kw">input class="type">class="kw">string  Z_Index_Key="Z";                 class=class="str">"cmt">// Indication of the chart on top
class="kw">input class="type">class="kw">string  Vertical_With_Short_Levels_Key="V";  class=class="str">"cmt">// Vertical segment
class="kw">input class="type">class="kw">string  Short_Level_Key="S";                 class=class="str">"cmt">// Short level
class="kw">input class="type">class="kw">string  Long_Level_Key="L";                  class=class="str">"cmt">// Extended level
class="kw">input class="type">class="kw">string  Simple_Horizontal_Line_Key="H";      class=class="str">"cmt">// Simple horizontal line
class="kw">input class="type">class="kw">string  Simple_Vertical_Line_Key="I";        class=class="str">"cmt">// Simple vertical line
class="kw">input class="type">class="kw">string  VFun_Key="F";                        class=class="str">"cmt">// Fibonacci fan
class="kw">input class="type">class="kw">string  Pitchfork_Key="P";                   class=class="str">"cmt">// Andrews&class="macro">#x27; pitchfork
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Color setting                                                    |

画线工具的配色与尺寸入口

在 MT5 自定义指标里,把外观参数全部用 input 暴露给用户,是降低后续调试成本的直接办法。下面这段声明把扇形线、安德鲁斯干草叉及其变体的颜色分开定义,互不干扰。 V 扇线用 LightGray,主干草叉用 Blue,Schiff 变体用 Red,反向干草叉用 Yellow——四种颜色变量各自独立,改一处不会影响其他画线。 尺寸部分更偏实用:短水准线长度锁在 12 根 bar,短水准线宽 1、长水准线宽 2,趋势线宽 2。线宽差一眼能区分主次,不需要靠颜色硬猜。 样式统一走 STYLE_SOLID,垂直带短水准线、短水准、长水准、7/8 水准目前全是实线。若你想在黄金 15 分钟图上突出 7/8 位,把对应 Style 改成 STYLE_DASH 就能立刻在 MT5 里看出层级变化。外汇与贵金属波动剧烈,参数微调后务必先在模拟盘验证画线表现。

MQL5 / C++
class="kw">input class="type">class="kw">string   Colors="=== Color Settings ===";
class="kw">input class="type">color     VFan_Color=clrLightGray;            class=class="str">"cmt">// Color of the fan lines
class="kw">input class="type">color     Pitchfork_Main_Color = clrBlue;     class=class="str">"cmt">// Andrews&class="macro">#x27; pitchfork class="type">color
class="kw">input class="type">color     Pitchfork_Shiff_Color = clrRed;     class=class="str">"cmt">// Schiff pitchfork class="type">color
class="kw">input class="type">color     Pitchfork_Reverce_Color = clrYellow;class=class="str">"cmt">// "Reverse" pitchfork class="type">color
class="kw">input class="type">class="kw">string   Dimensions="=== Size settings ===";
class="kw">input class="type">int      Short_Level_Length=class="num">12;     class=class="str">"cmt">// Short level length(bar)
class="kw">input class="type">int      Short_Level_Width=class="num">1;       class=class="str">"cmt">// Line width for the class="type">class="kw">short level
class="kw">input class="type">int      Long_Level_Width=class="num">2;        class=class="str">"cmt">// Line width for the class="type">long level
class="kw">input class="type">int      Vertical_With_Short_Levels_Width=class="num">1; class=class="str">"cmt">// Vertical line width with levels
class="kw">input class="type">int      Short_Level_7_8_Width=class="num">1;   class=class="str">"cmt">// Level class="num">7/class="num">8 line width
class="kw">input class="type">int      Short_Level_14_8_Width=class="num">1;  class=class="str">"cmt">// Level class="num">14/class="num">8 line width
class="kw">input class="type">int      Simple_Vertical_Width=class="num">1;   class=class="str">"cmt">// Simple vertical line width
class="kw">input class="type">int      Simple_Horizontal_Width=class="num">1; class=class="str">"cmt">// Simple horizontal line width
class="kw">input class="type">int      Trend_Line_Width=class="num">2;        class=class="str">"cmt">// Trend line width
class="kw">input class="type">class="kw">string   Styles="=== Display styles ===";
class="kw">input ENUM_LINE_STYLE       Vertical_With_Short_Levels_Style=STYLE_SOLID; class=class="str">"cmt">// Vertical Line style with levels
class="kw">input ENUM_LINE_STYLE       Short_Level_Style=STYLE_SOLID;       class=class="str">"cmt">// Short Level style
class="kw">input ENUM_LINE_STYLE       Long_Level_Style=STYLE_SOLID;        class=class="str">"cmt">// Long level style
class="kw">input ENUM_LINE_STYLE       Short_Level_7_8_Style=STYLE_SOLID;   class=class="str">"cmt">// Level class="num">7/class="num">8 style

◍ fork 类工具的线型与极值点窗口设定

在 MT5 自定义指标里,线型与极值点回看窗口是决定 fork 类图形观感与锚点稳定性的两块基础输入。下面这段声明把 Andrews 主 fork、Schiff fork、Reverse fork 全部设为 STYLE_SOLID,而短周期水平/垂直参考线用了 STYLE_DOT,实线主结构配点线辅参考,看图时主次分层更清楚。 Pitchfork 三个锚点的左右回看柱数默认都是 6/6/6,但第三点右侧只留 2 根(Pitchfork_Third_Point_Right_Bars=2)。这意味着第三点贴近当前 bar,fork 通道会随最新价微调;若你把第三点右移加到 6,通道对近期噪声的敏感会明显下降,但滞后也更大。 垂直短价位的系数给了 0.825(Vertical_Short_Level_Coefficient),它把某段波幅压缩到 82.5% 位置画辅助线。外汇与贵金属波动跳变频繁,这类系数仅作参照网格,实际穿透概率随品种和周期变化,请先在策略测试器用历史数据核对再上真仓。

MQL5 / C++
class="kw">input ENUM_LINE_STYLE Short_Level_14_8_Style=STYLE_DOT; class=class="str">"cmt">// Level class="num">14/class="num">8 style
class="kw">input ENUM_LINE_STYLE Simple_Vertical_Style=STYLE_DOT; class=class="str">"cmt">// Simple Vertical style
class="kw">input ENUM_LINE_STYLE Simple_Horizontal_Style=STYLE_DOT; class=class="str">"cmt">// Simple Horizontal style
class="kw">input ENUM_LINE_STYLE VFun_Levels_Style=STYLE_SOLID; class=class="str">"cmt">// Fan Style
class="kw">input ENUM_LINE_STYLE Trend_Line_Style=STYLE_SOLID; class=class="str">"cmt">// Trend line style
class=class="str">"cmt">//---
class="kw">input ENUM_LINE_STYLE Pitchfork_Main_Style = STYLE_SOLID; class=class="str">"cmt">// Andrews&class="macro">#x27; Pitchfork style
class="kw">input ENUM_LINE_STYLE Pitchfork_Shiff_Style = STYLE_SOLID; class=class="str">"cmt">// Schiff Pitchfork style
class="kw">input ENUM_LINE_STYLE Pitchfork_Reverce_Style = STYLE_SOLID; class=class="str">"cmt">// Reverse Pitchfork style
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Pitchfork extrema parameters                                      |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="kw">input class="type">class="kw">string Pitchforks="=== Pitchfork Extrema Parameters ===";
class=class="str">"cmt">//---
class="kw">input class="type">int Pitchfork_First_Point_Left_Bars=class="num">6; class=class="str">"cmt">// Pitchfork - 1st point, bars on the left
class="kw">input class="type">int Pitchfork_First_Point_Right_Bars=class="num">6; class=class="str">"cmt">// Pitchfork - 1st point, bars on the left
class=class="str">"cmt">//---
class="kw">input class="type">int Pitchfork_Second_Point_Left_Bars=class="num">6; class=class="str">"cmt">// Pitchfork - 2nd point, bars on the left
class="kw">input class="type">int Pitchfork_Second_Point_Right_Bars=class="num">6; class=class="str">"cmt">// Pitchfork - 2nd point, bars on the right
class=class="str">"cmt">//---
class="kw">input class="type">int Pitchfork_Third_Point_Left_Bars=class="num">6; class=class="str">"cmt">// Pitchfork - 3rd point, bars on the left
class="kw">input class="type">int Pitchfork_Third_Point_Right_Bars=class="num">2; class=class="str">"cmt">// Pitchfork - 3rd point, bars on the right
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Other parameters                                                  |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="kw">input class="type">class="kw">string Others="=== Other Parameters ===";
class="kw">input class="type">class="kw">double Vertical_Short_Level_Coefficient=class="num">0.825; class=class="str">"cmt">// Coefficient of vertical levels

「把参数面板吃透再画fork」

这套均线fork工具的输入参数直接决定图形形态,开MT5加载脚本前建议先把面板逐项过一遍。Long_Level_Multiplicator=2 表示多头基准线倍数取2倍,Trend_Length_Coefficient=4 控制趋势线向右侧延伸的K线系数,Is_Trend_Ray=false 时画的是线段而非射线。 Fractal_Size_Left 与 Fractal_Size_Right 都设为1,意味着极值判定只看左右各1根K线,属于最紧凑的分形定义,在M5黄金上容易出噪声信号。Pitchfork_Show_Main、Pitchfork_Show_Shiff、Pitchfork_Show_Reverce 三者默认全 true,会同时叠绘标准fork、 Schiff fork 和反向fork,图表可能偏乱。 VFun_Levels 里写死了 -1.5,-0.618,-0.236,0,0.236,0.382,0.618,0.786,0.886,0.942 这组扇位,覆盖了负向扩展与斐波那契密集区;Array_Delimiter 用逗号切分。外汇与贵金属杠杆高、滑点大,参数照搬不代表胜率,建议先在模拟盘验证再上实盘。 下面这段就是面板声明的核心代码,逐行都是可改的开关:

MQL5 / C++
class="kw">input class="type">class="kw">double Long_Level_Multiplicator=class="num">2; class=class="str">"cmt">// Multiplier for the class="type">long level
class="kw">input class="type">int Trend_Length_Coefficient=class="num">4; class=class="str">"cmt">// Coefficient for the trend line length
class="kw">input class="type">bool Is_Trend_Ray=class="kw">false; class=class="str">"cmt">// Trend line - ray
class="kw">input class="type">bool Is_Change_Timeframe_On_Create = true; class=class="str">"cmt">// Hide objects on higher timeframes? (true - hide, class="kw">false - show)
class="kw">input class="type">bool Is_Select_On_Create=true; class=class="str">"cmt">// Select upon creation
class="kw">input class="type">bool Is_Different_Colors=true; class=class="str">"cmt">// Change colors for times
class=class="str">"cmt">// Number of bars on the left and on the right
class=class="str">"cmt">// for trend line and fan extreme points
class="kw">input class="type">int Fractal_Size_Left=class="num">1; class=class="str">"cmt">// Size of the left fractal
class="kw">input class="type">int Fractal_Size_Right=class="num">1; class=class="str">"cmt">// Size of the right fractal
class="kw">input class="type">bool Pitchfork_Show_Main = true; class=class="str">"cmt">// Display Andrews&class="macro">#x27; pitchfork
class="kw">input class="type">bool Pitchfork_Show_Shiff = true; class=class="str">"cmt">// Display Schiff pitchfork
class="kw">input class="type">bool Pitchfork_Show_Reverce = true; class=class="str">"cmt">// Display "Reverse" pitchfork
class="kw">input class="type">bool Print_Warning_Messages=true; class=class="str">"cmt">// Display error messages
class="kw">input class="type">class="kw">string VFun_Levels="-class="num">1.5,-class="num">0.618,-class="num">0.236,"+
 " class="num">0,class="num">0.236,class="num">0.382,"+
 " class="num">0.618,class="num">0.786,class="num">0.886,class="num">0.942"; class=class="str">"cmt">// Fan levels
class="kw">input class="type">class="kw">string Array_Delimiter=","; class=class="str">"cmt">// Array elements separator

常见问题

有,按住快捷键配合方向可驱动直线工具直接落点,具体组合在参数面板的热键设置里查,比纯鼠标拖更跟手。
在工具属性里指定三个极值对应的K线窗口与偏移量,先框好主次支点再开画,线型选实线便于看清通道边界。
可以,小布能读取当前品种页面的图形对象并做AIGC诊断,打开对应品种页就能看到画线结构与突破提醒,不用自己逐个翻。
把同类线前缀收进数组,后续批量改色改宽或脚本遍历更顺,手画多了想复用模板时这一步最省事。
在绘图工具的属性或全局参数面板里改配色与线宽,建议拐点线用高对比色、通道线降透明度,避免满屏糊成一块。