针对控制台类型图表文本输出优化的显示 - MetaTrader 5 库




该库包含两种类型的显示。第一个,标签显示,基于CChartObjectLabel。第二个,CanvasDisplay,是基于CCanvas的。显示器针对渲染频率进行了优化。除了演示显示 Demo.mq5 工作的主要 EA 交易之外,还有两个变体 CanvasVsLabelsTester.mq5,专门在测试器中按价格变动执行测量。以及万能的画布与标签.mq5,它在测试器和图表上执行测量。这些测量结果可以相互比较。有关比较显示速度的更多详细信息,请参阅链接画布与标签。
//+------------------------------------------------------------------+ //|ChartDisplayDemo.mq5 | //|版权所有 2021,© Cyberdev | //| https://www.mql5.com/en/users/cyberdev/seller | //+------------------------------------------------------------------+ #财产版权 “版权所有 2021,© Cyberdev。” #财产关联 “https://www.mql5.com/en/users/cyberdev/seller” #财产版本 “1.00” //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ #包括“cyberdev\ChartDisplay.mqh” //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ 枚举输出类型{ ot画布,// 帆布 ot标签 // 标签};//+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ 输入OutType outType = otLabels;// outType - 显示类型 输入 整数n 行 =50;// nLines - 显示屏上的行数 输入 布尔值优化更新=错误的;// optimiseUpdate - 标签优化 输入 整数宽度=406;// bWidth - 显示宽度 输入 整数lY_距离 =14;// lY_Dist - 线之间的距离 输入 布尔值回来=错误的;// back - 标签的背景 //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+字符串*显示; CChart 图表;//+------------------------------------------------------------------+ //|专家初始化功能| //+------------------------------------------------------------------+ 整数 初始化时() { 图表.附加(图表ID()); 图表.显示网格(错误的); 图表.颜色背景(C'194,231,197'); Chart.ColorBarUp(clr道奇蓝); Chart.ColorBarDown(clr蓝紫); Chart.ColorCandleBull(clr道奇蓝); Chart.ColorCandleBear(clr蓝紫); Chart.ColorForeground(黑色); 转变(输出类型){ 案件ot画布: 显示 =新的画布显示(); 休息; 案件ot标签: 显示 =新的标签显示(); 休息; 默认: 返回 初始化失败; } 如果((outType == otLabels && 返回 && !动态转换(显示).createExt(nLines,10,10, bWidth, lY_Dist)) || !display.create(nLines,10,15, bWidth, lY_Dist)) 返回 初始化失败; 返回(初始化成功); }//+------------------------------------------------------------------+ //|专家反初始化函数| //+------------------------------------------------------------------+ 空白 解初始化(常量 整数原因) { 如果(检查指针(显示)==POINTER_DYNAMIC) 删除展示; Chart.Detach(); }//+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ #定义连接(_rate) \ (“打开: ”+双精度转字符串(费率[_rate].open, 数字) + \ “; 高的: ”+双精度转字符串(rates[_rate].high, 数字) + \ “; 低的: ”+双精度转字符串(费率[_rate].low,数字) + \ “; 关闭: ”+双精度转字符串(rates[_rate].close, 数字) +“。”) //+------------------------------------------------------------------+ //|专家勾选功能| //+------------------------------------------------------------------+ 空白 勾选() { Mql费率费率[]; 整数数字 = (整数)符号信息整数(_象征,SYMBOL_DIGITS); 静止的 日期时间时间=0; 日期时间c时间; 静止的 布尔值第一次运行 =真的; 布尔值触发=错误的; 如果(复制率(无效的,PERIOD_CURRENT,0,2,费率)!=2) 返回; 显示.setText(连接(1)); c时间 = 费率[0]。时间; 如果(cTime != 时间) { 如果(!firstRun) { 显示.push(); 显示.setText(连接(0)); } 时间=c时间; 第一次运行 =错误的; 触发=真的; } 如果(outType == otLabels && 优化更新) { 如果(已触发) 显示.更新(); 别的 动态转换 (显示).updateOne(); } 别的 显示.更新(); }//+------------------------------------------------------------------+
要更新顶行,您需要调用您正在使用的类的 setText 方法。要将文本移动到下面一行,可以使用push方法使用类被称为。要在显示器上显示添加/更新的文本,请使用任何类的 update 方法。除了这个方法之外,标签显示类有一个附加方法updateOne,可以加快显示速度2倍以上。仅当顶行需要更新时才调用它。如果调用了push方法,那么在它之后你应该调用更新方法而不是更新一。
和输出类型您可以选择显示类型帆布或者标签价值观。这n行更改设置通过推送方法滚动后将保存的行数。这优化更新如果尚未调用 Push 方法,则仅更新一行即可经济地更新参数,因此不需要更新其余行(见上文)。和宽度您可以设置显示的宽度(与使用背景的画布和标签相关)。随着lY_距离参数即可达到想要的字体大小。字体大小取自lY_距离,从中减去 fDec 系数设置的部分,这允许更改实际行高,而不是字体大小,而不考虑行之间的距离。这后退参数启用背景标签模式。
因此,可以以 5 种不同的模式在图表中显示信息。
在 outType 中使用背景:标签模式提供的负载与使用其他附加图表对象的负载大致相同。也就是说,它稍微增加了将文本输出到显示器所需的时间。
附件下载
📎 chartdisplay.mqh (12.77 KB)
📎 demo.mq5 (9.48 KB)
📎 chartdisplay.mqh (12.97 KB)
📎 canvasvslabels.mq5 (15.2 KB)
📎 canvasvslabelstester.mq5 (13.6 KB)
Source: MQL5 #33898
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
