欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

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

author emer | 583 人阅读 | 0 人评论 |

Display optimised for console-type chart text output - library for MetaTrader 5

Display optimised for console-type chart text output - library for MetaTrader 5

Display optimised for console-type chart text output - library for MetaTrader 5

Display optimised for console-type chart text output - library for MetaTrader 5

该库包含两种类型的显示。第一个,标签显示,基于CChartObjectLabel。第二个,CanvasDisplay,是基于CCanvas的。显示器针对渲染频率进行了优化。除了演示显示 Demo.mq5 工作的主要 EA 交易之外,还有两个变体 CanvasVsLabelsTester.mq5,专门在测试器中按价格变动执行测量。以及万能的画布与标签.mq5,它在测试器和图表上执行测量。这些测量结果可以相互比较。有关比较显示速度的更多详细信息,请参阅链接画布与标签

Display optimised for console-type chart text output - library for MetaTrader 5

Display optimised for console-type chart text output - library for MetaTrader 5

//+------------------------------------------------------------------+
//|ChartDisplayDemo.mq5 |
//|版权所有 2021,© Cyber​​dev |
//| https://www.mql5.com/en/users/cyberdev/seller |
//+------------------------------------------------------------------+
#财产版权 “版权所有 2021,© Cyber​​dev。”
#财产关联      “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

    🔐
    请登录后参与评论
    注册满12小时后评论,即可解锁附件下载
    立即登录