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()资源