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


该库和 iCanvas 类简化了使用 Canvas 编写程序的过程。
以下是使用该库的简单指标的示例。
在此示例中,指标主体不具有处理 OnChartEvent 事件的功能。但它也可能存在。

#财产指标图表窗口 #财产严格的 #包括<画布\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.LineHorizontal(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小时后评论,即可解锁附件下载
立即登录