#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() ハンドラの終わり
}
|