手工图表和交易工具包(第二部分)。 图表图形绘图工具(基础篇)
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 字符串就能换键位,外汇和贵金属图表对象多、叠加杂,改完前先在模拟盘验证快捷键冲突概率。
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 里看出层级变化。外汇与贵金属波动剧烈,参数微调后务必先在模拟盘验证画线表现。
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% 位置画辅助线。外汇与贵金属波动跳变频繁,这类系数仅作参照网格,实际穿透概率随品种和周期变化,请先在策略测试器用历史数据核对再上真仓。
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 用逗号切分。外汇与贵金属杠杆高、滑点大,参数照搬不代表胜率,建议先在模拟盘验证再上实盘。 下面这段就是面板声明的核心代码,逐行都是可改的开关:
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