ChartScreenShot

この関数は、指定された拡張子に応じてGIF、PNGまたはBMP形式で現在のチャートのスクリーンショットを提供します。

bool  ChartScreenShot(
  long            chart_id,                  // チャート識別子
  string          filename,                  // 銘柄名
  int              width,                      // 幅
  int              height,                    // 高さ
  ENUM_ALIGN_MODE  align_mode=ALIGN_RIGHT      // 整列の種類
  );

パラメータ

chart_id

[in]  チャート識別子。( 0 は現在のチャート)

filename

[in]  スクリーンショットファイル名。63 文字を超えることは出来ません。スクリーンショットファイルは \Files ディレクトリに置かれます。

[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()リソース