wangdehang 发表于 2022-12-13 10:14:16

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

MT4越来越花哨了,MT4图表上面都可以显示图片了,甚至还可以玩俄罗斯方块和扫雷了。
我今天教大家如何自定义图表背景图片,我通过一个指标例子告诉大家怎么写代码,这个指标的功能就是在MT4任意一个图表上面显示一张图片,点击图片就会切换到另一张,用的是两张图片随意切换。
显示图片的原理是创建label对象,过去label对象只能显示文字,可以设置大小,位置,颜色等,自从MT4升级到build600之后,label对象开始可以显示图片了,而且还做成了按钮,可以实现按下按钮显示一张图片,抬起按钮显示另一张图片。
指标程序代码如下:
我写了尽可能详细的注释,有一点MQL4基础的,通过看注释应该就能够明白这是怎么实现的,有不明白的,可以单独来问我。
注意:直接复制下面的代码后,还需要准备两张图片,分别命名为p11w.bmp和\p12w.bmp并存放到MT4的数据文件夹\MQL4\Images下面,你的指标才可能正常运行。
//+------------------------------------------------------------------+

//|                                             自定义图表背景图片.mq4 |

//|               Copyright 2015, MetaQuotes Software Corp. |

//|                                                               QQ:80364276 |

//+------------------------------------------------------------------+

#property copyright "Copyright 2015, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#property strict

#property indicator_chart_window

string label_name="p11w_label";          // 设定OBJ_BITMAP_LABEL对象的名称

string p11w      ="\\Images\\p11w.bmp";// 指定图片文件的路径,位于MT4的数据文件夹\MQL4\Images\p11w.bmp

string p12w      ="\\Images\\p12w.bmp";// 指定图片文件的路径,位于MT4的数据文件夹\MQL4\Images\p12w.bmp



//+------------------------------------------------------------------+

//| 自定义指标初始化函数                                             |

//+------------------------------------------------------------------+

int OnInit()

{

//--- 首选在图上搜索是否有我们创建的对象,如果没有,那么就创建

   if(ObjectFind(0,label_name)<0)

   {

      //--- 生成图像标签对象

      bool created=ObjectCreate(0,label_name,OBJ_BITMAP_LABEL,0,0,0);

      if(created)

      {

         //--- 设置对象的位置,在左上角,意思就是对象的(0,0)坐标在左上角

         ObjectSetInteger(0,label_name,OBJPROP_CORNER,CORNER_LEFT_UPPER);

         //--- 设置对象的x,y坐标

         ObjectSetInteger(0,label_name,OBJPROP_XDISTANCE,0);

         ObjectSetInteger(0,label_name,OBJPROP_YDISTANCE,0);

         //--- 重置错误代码为0

         ResetLastError();

         //--- 设置这个图像标签对象被按下的时候显示的图片为p11w

         bool set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,0,p11w);

         //--- 重置错代码为0   

         ResetLastError();

         //--- 设置这个图像标签对象被松开按键的时候显示的图片为p12w

         set=ObjectSetString(0,label_name,OBJPROP_BMPFILE,1,p12w);

         //--- 发送一个命令,让图表上面这个对象自动立即重绘

         ChartRedraw(0);

      }

      else

      {

         //--- 如果对象创建失败,给出提醒

         PrintFormat("创建图像标签对象失败,错误代码 %d",GetLastError());

      }

   }



//---

   return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

{

//---



//--- return value of prev_calculated for next call

   return(rates_total);

}

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{

//--- 卸载指标的时候,清除这个对象。

   ObjectDelete(0,label_name);

}

pxyhub 发表于 2022-12-14 12:10:29


没显示!!!!!~~~~ 为什么呢?
图片是有的:
C:\Program Files (x86)\MetaTrader 4\MQL4\Images\p11w.bmp
C:\Program Files (x86)\MetaTrader 4\MQL4\Images\p12w.bmp

pxyhub 发表于 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

pxyhub 发表于 2022-12-14 18:41:22

这是网上抄的,一字不差!

qwe11 发表于 2022-12-14 18:45:39

正常运行

ken138888 发表于 2022-12-15 06:59:59

发个效果图看一下

pxyhub 发表于 2022-12-15 18:13:47


成了,楼主的不行!

ken138888 发表于 2022-12-16 19:57:06

好像很厉害的样子

dongxu64 发表于 2022-12-22 09:16:04

留着慢慢学习。

小朋友你要去哪 发表于 2023-1-13 06:57:39

这个是前置图片,把K线都挡完了,我发的那才叫背景图

linxu 发表于 2024-11-11 20:56:50

pxyhub 发表于 2022-12-15 18:13
成了,楼主的不行!

怎么成的?发个代码呗

奔赴魔方量化 发表于 2026-4-16 09:19:51

marco699 发表于 2026-4-18 01:38:37

优质代码,谢谢分享
页: [1]
查看完整版本: Mql4语言编程教程--如何自定义图表背景图片