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

Easy Canvas (iCanvas) - MetaTrader 4 库 - MT4/MT5资源

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

Easy Canvas (iCanvas) - library for MetaTrader 4

Easy Canvas (iCanvas) - library for MetaTrader 4

该库和 iCanvas 类简化了使用 Canvas 编写程序的过程。

以下是使用该库的简单指标的示例。

在此示例中,指标主体不具有处理 OnChartEvent 事件的功能。但它也可能存在。

Easy Canvas (iCanvas) - library for MetaTrader 4

Easy Canvas (iCanvas) - library for MetaTrader 4

#财产指标图表窗口
#财产严格的
#包括<画布\iCanvas.mqh>//+------------------------------------------------------------------+
整数 初始化时()
  {
  事件集毫秒定时器30);
  图表集整数0,CHART_CROSSHAIR_TOOL,错误的);  // 关闭十字准线  返回初始化成功);
  }空白 解初始化常量 整数原因) {如果(原因<2){图表集整数0,CHART_CROSSHAIR_TOOL,真的);图表重绘();}}//+------------------------------------------------------------------+
空白  定时器()
  {
  静止的 整数X=0;
  静止的 整数Y=0;
  如果(X!=W.MouseX || Y!=W.MouseY)
     {
      画布.擦除(0);
      // 绘制一个模糊点      为了整数ix=-20;ix<=20;九++)为了整数iy=-20;iy<=20;iy++)
        {
        双倍的p=开方(ix*ix+iy*iy)/20.0;
        如果(p>1) p=1;
        乌查尔P=(乌查尔)圆形的((1.0-p)*255.0);
         Canvas.PixelSet(W.MouseX+ix,W.MouseY+iy,ARGB(P,100,0,200));
        }
      //  显示信息块      整数Y1=(整数)Canvas.Y(画布。关闭(W.MouseX));  // Y 坐标 - 鼠标指针位置的收盘价。      Canvas.FillRectangle(W.MouseX,Y1,W.MouseX+140,Y1+67,0xA0808080);
      Canvas.TextPosition(W.MouseX+5,Y1+2);
      Canvas.CurrentFont(“宋体”,14,16,清白);
      画布.Comm(“关闭=”+双精度转字符串(帆布。关闭(W.MouseX),_数字));
      画布.Comm(“酒吧=”+双精度转字符串(W.MouseBar,2));
      画布.Comm(字符串时间(W.MouseTime,TIME_DATE|TIME_SECONDS));
      画布.Comm(“子窗口=”+细绳(W.MouseSubWin));
      //  十字线      Canvas.LineHorizo​​ntal(0,W.宽度-1,W.MouseY,~W.Color);
      Canvas.LineVertical(W.MouseX,0,W.高度-1,~W.颜色);
      整数Ym=(W.MouseY>W.Height/2)?(W.MouseY-16):(W.鼠标Y+2);
      整数Xm=(W.MouseX< W.宽度/2)?(W.MouseX+4):(W.MouseX-105);
      帆布。文本输出(W.宽度-50,嗯,双精度转字符串(W.MousePrice,_数字),~W.颜色);
      帆布。文本输出(Xm,W.高度-16,字符串时间(W.MouseTime,TIME_DATE|TIME_SECONDS),~W.颜色);

      Canvas.Update();
      X=W.MouseX; Y=W.MouseY;
     }
  }//+------------------------------------------------------------------+
整数 计算时常量 整数费率_总计,
                常量 整数先前计算的,
                常量 整数开始,
                常量 双倍的&价格[])
  {
  返回(费率_总计);
  }

结构窗口: 

结构体窗户
  {
  长的              图表ID;    // 当前窗口标识符  单位              颜色;      // 窗口背景颜色  整数               宽度;      // 窗口宽度  整数               高度;      // 窗口高度  整数               高度[];    // 子窗口高度  整数               左栏;    // 窗口中最左边的栏的编号  双倍的            右栏;  // 窗口中最右边的栏的编号  双倍的            总条数;  // 窗口中的最大条数  整数               风中酒吧;  // 窗口中可见条的数量  双倍的            Y_分钟;      // 窗口内价格的最小值  双倍的            Y_最大;      // 窗口内价格的最大值  双倍的            dy_pix;      // 一个像素的价格变化  整数               dx_像素;      // 改变每个像素的条数  整数               鼠标X;      // 鼠标指针当前位置的X坐标  整数               鼠标Y;      // 鼠标指针当前位置的Y坐标  双倍的            鼠标栏;    // 鼠标指针当前条形位置  双倍的            鼠标价格;  // 鼠标指针的当前价格  日期时间          鼠标时间;  // 鼠标指针当前时间  整数               鼠标子Win;// 鼠标指针所在的子窗口号  整数               Windows总计;// 子窗口总数,包括主窗口  整数               子温;      // 当前子窗口  日期时间          时间[];      // 窗口中所有可见柱的开盘时间数组  };

iCanvas 类:

班级画布:民众画布
  {私人的:
  日期时间          T[1];
  双倍的            普[1];
  布尔值              FullWinCanvW;// 按宽度使用全窗口画布  布尔值              FullWinCanvH;// 按高度使用全窗口画布
民众:
                     iCanvas(长的图表 ID=0,整数X位置=0,整数y位置=0,细绳姓名=“i画布”,整数宽度=0,整数高度=0,ENUM_COLOR_FORMAT格式CF=COLOR_FORMAT_ARGB_NORMALIZE,整数子温=-1);
                    ~iCanvas() { 销毁();图表重绘();};
  双倍的            X(双倍的酒吧){返回((双倍的)W.Left_bar-bar)*W.dx_pix;};//由柱编号表示的 X 坐标。条形编号必须为双精度类型,否则,条形将被解释为时间。  双倍的            X(日期时间时间);                                        //时间的X坐标。  双倍的            Y(双倍的价格) {如果(W.dy_pix==0) W.dy_pix=1;返回((W.Y_max-价格)/W.dy_pix); };//价格的Y坐标。  双倍的            价格(整数y)     {返回(W.Y_max-y*(W.Y_max-W.Y_min)/W.高度);};      // Y 坐标的价格  双倍的            酒吧(整数x) {返回((双倍的)W.Left_bar+1-(双倍的)x/(双倍的)W.dx_pix);};  // 坐标 X 的柱数                                                                        日期时间          时间位置(整数x);                                                          // 坐标X的时间  双倍的            关闭(整数x)     {复制关闭_象征,_时期,整数(条(x)),1,Pr);返回普[0];};
  双倍的            打开(整数x)      {复制打开_象征,_时期,整数(条(x)),1,Pr);返回普[0];};
  双倍的            高的(整数x)      {高复制_象征,_时期,整数(条(x)),1,Pr);返回普[0];};
  双倍的            低的(整数x)       {低拷贝_象征,_时期,整数(条(x)),1,Pr);返回普[0];};
  布尔值              FullWinCanvWidth()  {返回FullWinCanvW;};                              // 按宽度使用全窗口画布    布尔值              FullWinCanvHeight() {返回FullWinCanvH;};                              // 按高度使用全窗口画布    空白              通讯(细绳文本) {文本输出(TextPosX,TextPosY,文本,TextColor); TextPosY+=StepTextLine;};// 打印注释  空白              文本位置(整数x,整数y) {TextPosX=x; TextPosY=y;};                                    // 设置注释输出的 XY 位置(以像素为单位)  空白              当前字体(细绳字体名称=《快递新》,整数尺寸=18,整数线步=20,颜色清除=clr暗兰花,双倍的传输=1.0);  // 设置注释的字体选项。 LineStep - 行之间的步长。 transp - 透明度从 0 到 1                                                                                                                                          空白              文本位置(双倍的x,双倍的y);// 设置输出注释的XY位置占窗口宽度和高度的百分比  空白              线(双倍的x1,双倍的y1,双倍的x2,双倍的y2,常量 单位清除);
  整数               文本PosX;      // 注释文本的 X 位置  整数               文本位置;      // 注释文本的位置Y  整数               步骤文本行;  // 注释行间距  单位              文本颜色;    // 评论的字体颜色  ENUM_PROGRAM_TYPE程序类型;
  整数               子温;
  长的              处理;
  };

如果整个窗口不需要 Canvas 类的实例,则可以将其删除和(或)将其更改为部分窗口。

删除画布;
画布=新的iCanvas(0,0,“i画布”,300,0);          // 仅创建 300 像素宽的窗口的左栏。调整窗口大小是受控的
// Canvas= new iCanvas(0,0,"iCanvas",0,300);       // 仅创建高度为 300 像素的窗口的顶栏。调整窗口大小是受控的
// Canvas= new iCanvas(200,100,"iCanvas",300,300); // 创建一个 300x300 像素的正方形,起点为 (200,100)。窗口大小调整不受控制。

您还可以创建该类的新实例并在创建时初始化它们。

iCanvas C2(300,200,“画布2”,200,150,COLOR_FORMAT_XRGB_NOALPHA,1);

重要提示:由于默认情况下使用的是带有透明度的颜色格式COLOR_FORMAT_ARGB_NORMALIZE,那么在指定颜色时,必须考虑到透明度的高字节。

如果您使用颜色名称,例如 clrRed,则颜色将绝对透明,因为透明度字节将为 0。

因此,您必须使用 ColorToARGB 函数(例如 ColorToARGB (clrRed))

或使用非零透明度显式指定颜色:

-例如,0xFFAABBCC(十六进制颜色表示),

FF - 透明度字节,

AA - 是红色字节,

BB - 是绿色字节,

CC - 是蓝色字节。

P.S.:该库是为 MQL5 开发的,并从 MQL5 代码移植。因此,对于 MQL4 来说它并不是最佳的。

MQL5 版本要快得多。


附件下载

📎 test_icanvas.mq4 (5.49 KB)

📎 sine.mq4 (10.36 KB)

📎 icanvas.mqh (45.81 KB)

Source: MQL5 #23840

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