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

Easy Canvas - MetaTrader 5 库

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

Easy Canvas - library for MetaTrader 5

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

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

Easy Canvas - library for MetaTrader 5

#财产指标图表窗口
#包括<画布\iCanvas.mqh>整数 初始化时()
  {
  事件集毫秒定时器33);
  图表集整数0,图表显示,真的);
  图表集整数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));
      Canvas.FillRectangle(W.MouseX,Y1,W.MouseX+140,Y1+67,0xA0808080);
      帆布。文本输出(W.MouseX+5,Y1+2,“关闭=”+双精度转字符串(帆布。关闭(W.MouseX),_数字),0xFFFFFFFF);
      帆布。文本输出(W.MouseX+5,Y1+18,“酒吧=”+双精度转字符串(W.MouseBar,2),0xFFFFFFFF);
      帆布。文本输出(W.MouseX+5,Y1+34,字符串时间(W.MouseTime,TIME_DATE|TIME_SECONDS),0xFFFFFFFF);
      帆布。文本输出(W.MouseX+5,Y1+50,“子窗口=”+细绳(W.MouseSubWin),0xFFFFFFFF);
      //  十字线      Canvas.LineHorizo​​ntal(0,W.宽度-1,W.MouseY,~W.Color);
      Canvas.LineVertical(W.MouseX,0,W.高度-1,~W.颜色);
      整数Ym=(W.MouseY>16)?(W.MouseY-16):(W.鼠标Y+2);
      整数Xm=(W.MouseX<(W.宽度-140))?(W.MouseX+4):(W.MouseX-125);
      帆布。文本输出(W.宽度-76,嗯,双精度转字符串(W.MousePrice,_数字),~W.颜色);
      帆布。文本输出(Xm,W.高度-16,字符串时间(W.MouseTime,TIME_DATE|TIME_SECONDS),~W.颜色);

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

库特点:

窗口结构:

结构体窗户
  {
  单位              颜色;      // 窗口背景颜色  整数               宽度;      // 窗口宽度  整数               高度;      // 窗口高度  整数               左栏;    // 窗口中最左边的栏的编号  双倍的            右栏;  // 窗口中最右边的栏的编号  双倍的            总条数;  // 窗口中的最大条数  整数               风中酒吧;  // 窗口中可见条的数量  双倍的            Y_分钟;      // 窗口内价格的最小值  双倍的            Y_最大;      // 窗口内价格的最大值  双倍的            dy_pix;      // 一个像素的价格变化  整数               dx_像素;      // 改变每个像素的条数  整数               鼠标X;      // 鼠标指针当前位置的X坐标  整数               鼠标Y;      // 鼠标指针当前位置的Y坐标  双倍的            鼠标栏;    // 鼠标指针当前条形位置  双倍的            鼠标价格;  // 鼠标指针的当前价格  日期时间          鼠标时间;  // 鼠标指针当前时间  整数               鼠标子Win;// 鼠标指针所在的子窗口号  整数              Windows总计;// 子窗口总数,包括主窗口  整数               子温;      // 当前子窗口  日期时间          时间[];      // 窗口中所有可见柱的开盘时间数组  };
班级画布:民众画布
  {私人的:
  日期时间          T[1];
  双倍的            普[1];
  布尔值              FullWinCanvW;// 按宽度使用全窗口画布  布尔值              FullWinCanvH;// 按高度使用全窗口画布
民众:
                     iCanvas(整数X位置=0,整数y位置=0,细绳姓名=“i画布”,整数宽度=0,整数高度=0,ENUM_COLOR_FORMAT格式CF=COLOR_FORMAT_ARGB_NORMALIZE,整数子温=-1);
                    ~iCanvas() { 销毁();};
  双倍的            X(双倍的酒吧);
  双倍的            X(日期时间 时间){返回X((双倍的)天花板(W.Right_bar)+iBarShift无效的,0,时间));};
  双倍的            Y(双倍的价格)  {返回((W.Y_max-价格)/W.dy_pix); };
  双倍的            酒吧(整数x)       {返回((双倍的)W.Left_bar+1-(双倍的)x/(双倍的)W.dx_pix);};
  日期时间          时间位置(整数x)   {双倍的B=条(x);复制时间_象征,_时期,楼层(B),1,T);返回T[0]+整数((双倍的周期秒数()*(1-B+(整数)B));};
  双倍的            关闭整数x)     {复制关闭_象征,_时期,整数(条(x)),1,Pr);返回普[0];};
  双倍的            打开整数x)      {复制打开_象征,_时期,整数(条(x)),1,Pr);返回普[0];};
  双倍的            高的整数x)      {高复制_象征,_时期,整数(条(x)),1,Pr);返回普[0];};
  双倍的            低的整数x)       {低拷贝_象征,_时期,整数(条(x)),1,Pr);返回普[0];};
  布尔值              FullWinCanvWidth()  {返回FullWinCanvW;};// 按宽度使用全窗口画布    布尔值              FullWinCanvHeight() {返回FullWinCanvH;};// 按高度使用全窗口画布              ENUM_PROGRAM_TYPE程序类型;
  };


附件下载

📎 test_icanvas.mq5(6.64 KB)

📎 icanvas.mqh (31.88 KB)

Source: MQL5 #22164

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