#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()句柄末端
}
|