MQL5参考图表操作ChartScreenShot 

ChartScreenShot

函数提供gif,png或bmp格式图表当前状态的屏幕截屏。

bool  ChartScreenShot(
   long             chart_id,                   // 图表 ID
   string           filename,                   // 交易品种名称
   int              width,                      // 宽度
   int              height,                     // 高度
   ENUM_ALIGN_MODE  align_mode=ALIGN_RIGHT      // 对齐类型
   );

参量

chart_id

[in]  图表 ID. 0 意味着当前图表。

filename

[in]  屏幕截图文件名。不能超过63个字符。屏幕截图文件位于directory \ Files。

width

[in]  屏幕截图宽度像素。

height

[in]  屏幕截图高度像素。

align_mode=ALIGN_RIGHT

[in]  屏幕截图的有限输出模式。ENUM_ALIGN_MODE枚举的值。ALIGN_RIGHT 表示右边距对齐(从末端输出)。ALIGN_LEFT 表示左对齐。

返回值

若成功返回true,否则false。

注释

如果需要从图表中的某一点截图,首先用ChartNavigate()函数定位图表。如果截图水平大小小于图表窗口,根据align_mode设置,会选择图表窗口的右边或者左边输出。

例如:

#property description "The Expert Advisor demonstrates how to create a series of screenshots of the current"
#property description "chart using the ChartScreenShot() function. For convenience, the file name is"
#property description "shown on the chart. The height and width of images is defined through macros."
 
#define        WIDTH  800     // 图像宽度,调用ChartScreenShot()
#define        HEIGHT 600     // 图像高度,调用ChartScreenShot()
 
//--- 输入参数
input int      pictures=5;    // 序列中的图像数量
int            mode=-1;       // -1 表示移到图表右边界,1 - 移到左边
int            bars_shift=300;// 使用ChartNavigate()滚动图表时的柱形数量
//+------------------------------------------------------------------+
//| 专家初始化函数                                                     |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- 禁止图表自动滚动
   ChartSetInteger(0,CHART_AUTOSCROLL,false);
//--- 设置图表右边界转移
   ChartSetInteger(0,CHART_SHIFT,true);
//--- 显示蜡烛图图表
   ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
//---
   Print("Preparation of the Expert Advisor is completed");
  }
//+------------------------------------------------------------------+
//| 专家订单号函数                                                     |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
//| ChartEvent 函数                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- 显示函数名称,调用时间和事件标识符
   Print(__FUNCTION__,TimeCurrent(),"   id=",id,"   mode=",mode);
//--- 处理 CHARTEVENT_CLICK 事件 ("鼠标点击图表")
   if(id==CHARTEVENT_CLICK)
     {
      //--- 从图表边界初始移动
      int pos=0;
      //--- 左侧图表边界操作
      if(mode>0)
        {
         //--- 滚动图表至左侧边界
         ChartNavigate(0,CHART_BEGIN,pos);
         for(int i=0;i<pictures;i++)
           {
            //--- 准备在图表上显示的文本和文件名
            string name="ChartScreenShot"+"CHART_BEGIN"+string(pos)+".gif";
            //--- 在图表上显示名称作为注释
            Comment(name);
            //--- 在terminal_directory\MQL5\Files\文件中保存图表截图
            if(ChartScreenShot(0,name,WIDTH,HEIGHT,ALIGN_LEFT))
               Print("We've saved the screenshot ",name);
            //---
            pos+=bars_shift;
            //--- 给予用户时间查看新的图表部分
            Sleep(3000);
            //--- 从当前位置bars_shift柱滚动图表到右侧
            ChartNavigate(0,CHART_CURRENT_POS,bars_shift);
           }
         //--- 改变模式到相反方向
         mode*=-1;
        }
      else // 图表右侧边界的操作
        {
         //--- 滚动图表至右侧边界
         ChartNavigate(0,CHART_END,pos);
         for(int i=0;i<pictures;i++)
           {
            //--- 准备在图表上显示的文本和文件名
            string name="ChartScreenShot"+"CHART_END"+string(pos)+".gif";
            //--- 在图表上显示名称作为注释
            Comment(name);
            //--- 在terminal_directory\MQL5\Files\文件中保存图表截图
            if(ChartScreenShot(0,name,WIDTH,HEIGHT,ALIGN_RIGHT))
               Print("We've saved the screenshot ",name);
            //---
            pos+=bars_shift;
            //--- 给予用户时间查看新的图表部分
            Sleep(3000);
            //--- 从当前位置bars_shift柱滚动图表到右侧
            ChartNavigate(0,CHART_CURRENT_POS,-bars_shift);
           }
         //--- 改变模式到相反方向
         mode*=-1;
        }
     }  // CHARTEVENT_CLICK 事件处理结束
//--- OnChartEvent()句柄末端  
  }

另见

ChartNavigate()资源