设为首页 收藏本站 切换语言

Mql4语言编程教程--如何自定义图表背景图片

| 发表于 2022-12-13 10:14:16 | 显示全部楼层 |复制链接
MT4越来越花哨了,MT4图表上面都可以显示图片了,甚至还可以玩俄罗斯方块和扫雷了。
我今天教大家如何自定义图表背景图片,我通过一个指标例子告诉大家怎么写代码,这个指标的功能就是在MT4任意一个图表上面显示一张图片,点击图片就会切换到另一张,用的是两张图片随意切换。
显示图片的原理是创建label对象,过去label对象只能显示文字,可以设置大小,位置,颜色等,自从MT4升级到build600之后,label对象开始可以显示图片了,而且还做成了按钮,可以实现按下按钮显示一张图片,抬起按钮显示另一张图片。
指标程序代码如下:
我写了尽可能详细的注释,有一点MQL4基础的,通过看注释应该就能够明白这是怎么实现的,有不明白的,可以单独来问我。
注意:直接复制下面的代码后,还需要准备两张图片,分别命名为p11w.bmp和\p12w.bmp并存放到MT4的数据文件夹\MQL4\Images下面,你的指标才可能正常运行。
  1. //+------------------------------------------------------------------+
  2. //|                                             自定义图表背景图片.mq4 |
  3. //|               Copyright 2015, MetaQuotes Software Corp. |
  4. //|                                                               QQ:80364276 |
  5. //+------------------------------------------------------------------+
  6. #property copyright "Copyright 2015, MetaQuotes Software Corp."
  7. #property link      "https://www.mql5.com"
  8. #property version   "1.00"
  9. #property strict
  10. #property indicator_chart_window
  11. string label_name="p11w_label";          // 设定OBJ_BITMAP_LABEL对象的名称
  12. string p11w      ="\\Images\\p11w.bmp";  // 指定图片文件的路径,位于MT4的数据文件夹\MQL4\Images\p11w.bmp
  13. string p12w      ="\\Images\\p12w.bmp";  // 指定图片文件的路径,位于MT4的数据文件夹\MQL4\Images\p12w.bmp
  14. //+------------------------------------------------------------------+
  15. //| 自定义指标初始化函数                                             |
  16. //+------------------------------------------------------------------+
  17. int OnInit()
  18.   {
  19.   //--- 首选在图上搜索是否有我们创建的对象,如果没有,那么就创建
  20.    if(ObjectFind(0,label_name)<0)
  21.      {
  22.       //--- 生成图像标签对象
  23.       bool created=ObjectCreate(0,label_name,OBJ_BITMAP_LABEL,0,0,0);
  24.       if(created)
  25.         {
  26.          //--- 设置对象的位置,在左上角,意思就是对象的(0,0)坐标在左上角
  27.          ObjectSetInteger(0,label_name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
  28.          //--- 设置对象的x,y坐标
  29.          ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,0);
  30.          ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,0);
  31.          //--- 重置错误代码为0
  32.          ResetLastError();
  33.          //--- 设置这个图像标签对象被按下的时候显示的图片为p11w
  34.          bool set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,0,p11w);
  35.          //--- 重置错代码为0   
  36.          ResetLastError();
  37.          //--- 设置这个图像标签对象被松开按键的时候显示的图片为p12w
  38.          set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,1,p12w);
  39.          //--- 发送一个命令,让图表上面这个对象自动立即重绘
  40.          ChartRedraw(0);
  41.         }
  42.       else
  43.         {
  44.          //--- 如果对象创建失败,给出提醒
  45.          PrintFormat("创建图像标签对象失败,错误代码 %d",GetLastError());
  46.         }
  47.      }
  48. //---
  49.    return(INIT_SUCCEEDED);
  50.   }
  51. //+------------------------------------------------------------------+
  52. //| Custom indicator iteration function                              |
  53. //+------------------------------------------------------------------+
  54. int OnCalculate(const int rates_total,
  55.                 const int prev_calculated,
  56.                 const datetime &time[],
  57.                 const double &open[],
  58.                 const double &high[],
  59.                 const double &low[],
  60.                 const double &close[],
  61.                 const long &tick_volume[],
  62.                 const long &volume[],
  63.                 const int &spread[])
  64.   {
  65. //---
  66. //--- return value of prev_calculated for next call
  67.    return(rates_total);
  68.   }
  69. //+------------------------------------------------------------------+
  70. void OnDeinit(const int reason)
  71.   {
  72. //--- 卸载指标的时候,清除这个对象。
  73.    ObjectDelete(0,label_name);
  74.   }
复制代码
如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论13

daerwushenn
DD
| 发表于 2022-12-13 20:04:35 | 显示全部楼层
越来越花哨
举报

点赞 评论 使用道具

pxyhub
C
| 发表于 2022-12-14 12:10:29 | 显示全部楼层
image.png
没显示!!!!!~~~~ 为什么呢?
图片是有的:
C:\Program Files (x86)\MetaTrader 4\MQL4\Images\p11w.bmp
C:\Program Files (x86)\MetaTrader 4\MQL4\Images\p12w.bmp
举报

点赞 评论 使用道具

pxyhub
C
| 发表于 2022-12-14 12:16:39 | 显示全部楼层
为什么显示了标签框,却加载不了图表呢?黑的。
图片是有的:
C:\Program Files (x86)\MetaTrader 4\MQL4\Images\p11w.bmp
C:\Program Files (x86)\MetaTrader 4\MQL4\Images\p12w.bmp
举报

点赞 评论 使用道具

daerwushen
DD
| 发表于 2022-12-14 17:12:05 | 显示全部楼层
好像行不通啊
举报

点赞 评论 使用道具

pxyhub
C
| 发表于 2022-12-14 18:41:22 | 显示全部楼层
这是网上抄的,一字不差!
举报

点赞 评论 使用道具

qwe11
CCC
| 发表于 2022-12-14 18:45:39 | 显示全部楼层
正常运行
举报

点赞 评论 使用道具

ken138888
B
| 发表于 2022-12-15 06:59:59 | 显示全部楼层
发个效果图看一下
举报

点赞 评论 使用道具

daerwushen
DD
| 发表于 2022-12-15 09:02:28 | 显示全部楼层
有人成功了吗
举报

点赞 评论 使用道具

pxyhub
C
| 发表于 2022-12-15 18:13:47 | 显示全部楼层
image.png
成了,楼主的不行!
举报

点赞 评论 使用道具

ken138888
B
| 发表于 2022-12-16 19:57:06 | 显示全部楼层
好像很厉害的样子
举报

点赞 评论 使用道具

dongxu64
DDD
| 发表于 2022-12-22 09:16:04 | 显示全部楼层
留着慢慢学习。
举报

点赞 评论 使用道具

小朋友你要去哪
DDD
| 发表于 2023-1-13 06:57:39 | 显示全部楼层
这个是前置图片,把K线都挡完了,我发的那才叫背景图 QQ截图20230113065723.png
举报

点赞 评论 使用道具

linxu
DDD
| 发表于 2024-11-11 20:56:50 | 显示全部楼层
pxyhub 发表于 2022-12-15 18:13
成了,楼主的不行!

怎么成的?发个代码呗
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)