チャート操作

ChartApplyTemplate

チャートに指定されたファイルから特定のテンプレートを適用します。コマンドは、チャートメッセージキューに追加され、以前の全てのコマンドの処理後に実行されます。

bool  ChartApplyTemplate(
long          chart_id,     // チャート識別子
const string  filename      // テンプレートファイル名
);

パラメータ

chart_id

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

filename

[in]  テンプレートを含むファイルの名称

戻り値

コマンドがチャートキューに追加された場合は true、そうでない場合は false。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

エキスパートアドバイザーは、接続されているチャートへの新しいテンプレートの読み込みが成功した場合には、アンロードされ、動作を継続することは出来ません。

チャートにテンプレートを適用する場合、セキュリティ上の理由のために取引権限が制限されることがあります。

ライブ取引許可は ChartApplyTemplate() 関数を使用してテンプレートを適用することによって開始したエキスパートアドバイザーには拡張することは出来ません。

ChartApplyTemplate() 関数を呼び出した MQL5 プログラムに取引権限がない場合は、テンプレートから起動されたエキスパートアドバイザーは、テンプレートの設定に関係なく取引することは出来ません。

ChartApplyTemplate() 関数を呼び出し MQL5 プログラムに取引権限がある場合でも、テンプレートの設定にそのような権限はなければ、テンプレートから起動されたエキスパートアドバイザーは、取引することが出来ません。

テンプレートの使用

MQL5 言語のリソースは、ChartSetInteger() 関数を使用して、色に関した複数のチャートのプロパティの設定を許可します。

  • チャートの背景色
  • 軸、スケールとOHLCラインの色
  • グリッドの色
  • ボリュームやポジションオープンレベルの色
  • アップバー、影と強気ローソク足の縁の色
  • ダウンバー、影や弱気ローソク足の縁の色
  • チャートの線と同時線の色
  • 強気ローソク足の実体の色
  • 弱気ローソク足の実体の色
  • 売値ラインの色
  • 買値ラインの色
  • 直近の約定価格(Last)の線の色
  • 逆指値(決済逆指値及び決済指値)レベルの色

また、チャートには、複数の グラフィカルオブジェクトと指標 が存在出来ます。全ての必要な指標とチャートを設定した後、テンプレートとして保存することが出来ます。このようなテンプレートは、任意のチャートに適用することが出来ます。

ChartApplyTemplate()関数は、以前に保存したテンプレートを使用するためにあり、任意のMQL5 プログラムで使用することが出来ます。テンプレートを格納するファイルへのパスは ChartApplyTemplate() の2 番目のパラメータとして受け渡しされます。テンプレートファイルは、次のルールに従って検索されます。

  • バックスラッシュ”\” セパレータ(”\\”として記述)がパスの先頭に配置されている場合、テンプレートは_terminal_data_directory\ MQL5 との相対パスで検索されます。
  • バックスラッシュがない場合、テンプレートは ChartApplyTemplate() を呼び出した実行可能な EX5 ファイルへの相対位置から検索されます。
  • テンプレートが上記の 2 つで見つからない場合は、検索が terminal_directory\Profiles\Templates\ で行われます。

ここで terminal_directory はメタトレーダー5クライアント端末が実行されているフォルダで terminal_data_directory が編集可能なファイルが保存されているフォルダで、その場所は、オペレーティングシステム、ユーザ名、及びコンピュータのセキュリティ設定に依存します。通常、これらは別々のフォルダですが、場合によって、同じフォルダであっても可能です。

terminal_data_directory と terminal_directory フォルダの場所は TerminalInfoString() 関数で習得出来ます。

//— 端末が起動されたディレクトリ
string terminal_path=TerminalInfoString(TERMINAL_PATH);
Print(“Terminal directory:”,terminal_path);
//— EAと指標を含むMQL5フォルダが配置されている端末のデータディレクトリ
string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
Print(“Terminal data directory:”,terminal_data_path);

例えば、

//— terminal_data_directory\MQL5\ でテンプレートを探す
ChartApplyTemplate(0,“\\first_template.tpl”))
//— directory_of_EX5_file\ に続いて terminal_data_directory\Profiles\Templates\でテンプレートを探す
ChartApplyTemplate(0,“second_template.tpl”))
//— directory_of_EX5_file\My_templates\ に続いて terminal_directory\Profiles\Templates\My_templates\ でテンプレートを探す
ChartApplyTemplate(0,“My_templates\\third_template.tpl”))

テンプレートは実行可能なEX5ファイルに含むことは出来ないのでリソースではありません。

例:

//+——————————————————————+
//| スクリプトプログラムを開始する関数                        |
//+——————————————————————+
void OnStart()
{
//— \MQL5\Files にあるテンプレートを適用する例
if(FileIsExist(“my_template.tpl”))
{
Print(“The file my_template.tpl found in \Files'”);
//— テンプレートを適用する
if(ChartApplyTemplate(0,“\\Files\\my_template.tpl”))
{
Print(“The template ‘my_template.tpl’ applied successfully”);
//— チャートを再描画
ChartRedraw();
}
else
Print(“Failed to apply ‘my_template.tpl’, error code “,GetLastError());
}
else
{
Print(“File ‘my_template.tpl’ not found in “
+TerminalInfoString(TERMINAL_PATH)+“\\MQL5\\Files”);
}
}

参照

リソース

ChartSaveTemplate

チャートの設定を指定された名称のテンプレートに保存します。

bool  ChartSaveTemplate(
long          chart_id,     // チャート識別子
const string  filename      // テンプレートを保存するファイル名
);

パラメータ

chart_id

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

filename

[in]  テンプレートを保存するファイル名「.tpl」 拡張子は自動的にファイル名に追加されるので、指定する必要はありません。テンプレートは terminal_directory\Profiles\Templates\ に保存され、端末での手動適用のために使用することが出来ます。同名のテンプレートが既存する場合、このファイルの内容は上書きされます。

戻り値

成功の場合は true、それ以外の場合は false。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

テンプレートを使用すると、適用される指標やグラフィカルオブジェクトとチャートの設定を全て保存し、後に別のチャートに適用出来ます。

例:

//+——————————————————————+
//|                                       Test_ChartSaveTemplate.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                             https://www.MQL5.com |
//+——————————————————————+
#property copyright “Copyright 2011, MetaQuotes Software Corp.”
#property link     “https://www.mql5.com”
#property version   “1.00”
#property script_show_inputs
//— 入力パラメータ
input string               symbol=“GBPUSD”; // 新しいチャートのシンボル
input ENUM_TIMEFRAMES     period=PERIOD_H3; // 新しいチャートの時間軸
//+——————————————————————+
//| スクリプトプログラムを開始する関数                                          |
//+——————————————————————+
void OnStart()
{
//— 最初のチャートに指標を取り付ける
int handle;
//— 指標を使用に向けて準備する
if(!PrepareZigzag(NULL,0,handle)) return; // 失敗に続く終了
//— チャートに指標を別ウィンドウで取り付ける
if(!ChartIndicatorAdd(0,1,handle))
{
PrintFormat(“Failed to attach to chart %s/%s an indicator with the handle=%d. Error code %d”,
_Symbol,
EnumToString(_Period),
handle,
GetLastError());
//— プログラム動作を終了する
return;
}
//— チャートを更新して指標を表示する
ChartRedraw();
//— ジグザグの最後の 2 つの切れ目を探す
double two_values[];
datetime two_times[];
if(!GetLastTwoFractures(two_values,two_times,handle))
{
PrintFormat(“Failed to find two last fractures in the Zigzag!”);
//— プログラム動作を終了する
return;
}
//— 標準偏差チャンネルを取り付ける
string channel=“StdDeviation Channel”;
if(!ObjectCreate(0,channel,OBJ_STDDEVCHANNEL,0,two_times[1],0))
{
PrintFormat(“Failed to create object %s. Error code %d”,
EnumToString(OBJ_STDDEVCHANNEL),GetLastError());
return;
}
else
{
//— チャンネルが作成されたので2 番目の点を定義する
ObjectSetInteger(0,channel,OBJPROP_TIME,1,two_times[0]);
//— チャンネルのツールヒントテキストを設定する
ObjectSetString(0,channel,OBJPROP_TOOLTIP,“Demo from MQL5 Help”);
//— チャートを更新する
ChartRedraw();
}
//— テンプレートに結果を保存する
ChartSaveTemplate(0,“StdDevChannelOnZigzag”);
//— 新しいチャートを開いて、保存されたテンプレートを適用する
long new_chart=ChartOpen(symbol,period);
//— グラフィックオブジェクトのツールヒントを有効にする
ChartSetInteger(new_chart,CHART_SHOW_OBJECT_DESCR,true);
if(new_chart!=0)
{
//— 保存されたテンプレートをチャートに適用する
ChartApplyTemplate(new_chart,“StdDevChannelOnZigzag”);
}
Sleep(10000);
}
//+——————————————————————+
//| ジグザグのハンドルを作成し、データの準備を整える        |
//+——————————————————————+
bool PrepareZigzag(string sym,ENUM_TIMEFRAMES tf,int &h)
{
ResetLastError();
//— ジグザグ指標は terminal_data_folder\MQL5\Examples に位置する必要がある
h=iCustom(sym,tf,“Examples\\Zigzag”);
if(h==INVALID_HANDLE)
{
PrintFormat(“%s: Failed to create the handle of the Zigzag indicator. Error code %d”,
__FUNCTION__,GetLastError());
return false;
}
//— 指標ハンドルを作成時には、値を計算するための時間が必要となる
int k=0; // 指標計算を待機する試みの回数
//— 各ループで50ミリ秒停止して計算を待機する
while(BarsCalculated(h)<=0)
{
k++;
//— 試みの回数を表示する
PrintFormat(“%s: k=%d”,__FUNCTION__,k);
//— 指標が計算されるまで 50 ミリ秒待機する
Sleep(50);
//— 100 回以上試みた場合は、何かがおかしい
if(k>100)
{
//— 問題を報告する
PrintFormat(“Failed to calculate the indicator for %d attempts!”);
//— プログラム動作を終了する
return false;
}
}
//— 指標が作成され、値が計算されて、準備が整う
return true;
}
//+——————————————————————+
//| ジグザグの最後の 2 つの切れ目を探して配列に書き込む    |
//+——————————————————————+
bool GetLastTwoFractures(double &get_values[],datetime &get_times[],int handle)
{
double values[];         // ジグザグの値の配列
datetime times[];       // 時間取得の配列
int size=100;           // 配列サイズ
ResetLastError();
//— 指標の最後の100 個の値を複製する
int copied=CopyBuffer(handle,0,0,size,values);
//— 複製された値の数をチェックする
if(copied<100)
{
PrintFormat(“%s: Failed to copy %d values of the indicator with the handle=%d. Error code %d”,
__FUNCTION__,size,handle,GetLastError());
return false;
}
//— 配列へのアクセスの順序を時系列のように定義する
ArraySetAsSeries(values,true);
//— 切れ目が見つかったバーの数を書く
int positions[];
//— 配列サイズを設定する
ArrayResize(get_values,3); ArrayResize(get_times,3); ArrayResize(positions,3);
//—カウンタ
int i=0,k=0;
//— 切れ目を探し始める
while(i<100)
{
double v=values[i];
//— 空の値には興味がない
if(v!=0.0)
{
//— バー番号を覚える
positions[k]=i;
//— 切れ目でのジグザグの値を覚える
get_values[k]=values[i];
PrintFormat(“%s: Zigzag[%d]=%G”,__FUNCTION__,i,values[i]);
//— カウンタを増加する
k++;
//— 切れ目が 2 つ見つかったら、ループから出る
if(k>2) break;
}
i++;
}
//— 配列へのアクセスの順序を時系列のように定義する
ArraySetAsSeries(times,true);   ArraySetAsSeries(get_times,true);
if(CopyTime(_Symbol,_Period,0,size,times)<=0)
{
PrintFormat(“%s: Failed to copy %d values from CopyTime(). Error code %d”,
__FUNCTION__,size,GetLastError());
return false;
}
//— 最後の 2 つの折れ目が発生したバーのオープン時間を開く
get_times[0]=times[positions[1]];// 最後から2 番目の値が初めの折れ目として書かれる
get_times[1]=times[positions[2]];// 最後から3 番目の値が2 番目の折れ目になる
PrintFormat(“%s: first=%s,  second=%s”,__FUNCTION__,TimeToString(get_times[1]),TimeToString(get_times[0]));
//— 成功
return true;
}

参照

ChartApplyTemplate()、リソース

ChartWindowFind

この関数は指標が描画されるサブウィンドウの数を返します。この関数には 2 つのバージョンがあります。

1. 指標の指定された「短縮名」(短縮名はサブウィンドウの左側上部に表示されています)を検索し、成功した場合にはサブウィンドウ番号を返します。

int  ChartWindowFind(
long    chart_id,                  // チャート識別子
string  indicator_shortname       // 短縮名 INDICATOR_SHORTNAMEを参照

2. この関数はカスタム指標から呼び出される必要があります。指標が位置するサブウィンドウ番号が返されます。

int  ChartWindowFind();

パラメータ

chart_id

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

indicator_shortname

[in]  指標の短縮名

戻り値

サブウィンドウ番号(失敗の場合は -1 )

注意事項

関数の2 つ目のバージョン(パラメータなし)がスクリプトまたはエキスパートアドバイザーから呼び出された場合、関数は-1を返します。

指標の短縮名と iCustom() や IndicatorCreate() 関数で指標が作成された時に指定されるファイル名を混同しないでください。指標の短縮名が明示的に設定されていない場合、コンパイル時に指標のソースコードを含むファイルの名称が指定されます。

IndicatorSetString()関数でINDICATOR_SHORTNAME プロパティに設定される指標の短縮名を正しく形成することは重要です。 ChartIndicatorDelete() 関数によってチャートから削除される指標は短縮名によって識別されるので、短縮名に指標の全ての入力パラメータの値を含むようお勧めします。

例:

#property script_show_inputs
//— 入力パラメータ
input string   shortname=“MACD(12,26,9)”;
//+——————————————————————+
//| この指標のチャートウィンドウの番号を返す                                     |
//+——————————————————————+
int GetIndicatorSubWindowNumber(long chartID=0,string short_name=“”)
{
int window=-1;
//—
if((ENUM_PROGRAM_TYPE)MQL5InfoInteger(MQL5_PROGRAM_TYPE)==PROGRAM_INDICATOR)
{
//— 関数が指標から呼び出されているので名称は必須でない
window=ChartWindowFind();
}
else
{
//— 関数がエキスパートアドバイザーやスクリプトから呼び出されている
window=ChartWindowFind(0,short_name);
if(window==-1) Print(__FUNCTION__+“(): Error = “,GetLastError());
}
//—
return(window);
}
//+——————————————————————+
//| スクリプトプログラムを開始する関数                                          |
//+——————————————————————+
void OnStart()
{
//—
int window=GetIndicatorSubWindowNumber(0,shortname);
if(window!=-1)
Print(“Indicator “+shortname+” is in the window #”+(string)window);
else
Print(“Indicator “+shortname+” is not found. window = “+(string)window);
}

参照

ObjectCreate()、ObjectFind()

ChartTimePriceToXY

チャートの座標を時間/価格表現からX とYの座標に変換します。

bool  ChartTimePriceToXY(
long          chart_id,    // チャート識別子
int            sub_window,   // サブウィンドウ番号
datetime      time,         // チャートの時間
double        price,       // チャートの価格
int&          x,           // X 座標は時間
int&          y           // Y 座標は価格
);

パラメータ

chart_id

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

sub_window

[in]  チャートサブウィンドウの番号( 0 はメインチャートウィンドウ)

time

[in]  X 軸方向のピクセルの値が受け取られるチャートの時間値。原点はメインチャートウィンドウの左上隅にあります。

価格

[in]  Y 軸方向のピクセルの値が受け取られるチャートの価格値。原点はメインチャートウィンドウの左上隅にあります。

x

[out]  時間からXへの変換が受け取られる変数

y

[out] 価格からYへの変換が受け取られる変数

戻り値

成功の場合は true、それ以外の場合は false 。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

参照

ChartXYToTimePrice()

ChartXYToTimePrice

チャートの座標を X とY の座標から時間/価格表現に変換します。

bool  ChartXYToTimePrice(
long          chart_id,    // チャート識別子
int           x,           // チャートの X 座標
int            y,           // チャートの Y 座標
int&          sub_window,   // サブウィンドウ番号
datetime&     time,         // チャートの時間
double&        price       // チャートの価格
);

パラメータ

chart_id

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

x

[in]  X 座標

y

[in]  Y 座標

sub_window

[out]  チャートサブウィンドウの番号を示す変数( 0 はメインチャートウィンドウ)

time

[out]  X 軸方向のピクセルの値が受ケ取られるチャートの時間値原点はメインチャートウィンドウの左上隅にあります。

価格

[out]  Y 軸方向のピクセルの値が受ケ取られるチャートの価格値原点はメインチャートウィンドウの左上隅にあります。

戻り値

成功の場合は true、それ以外の場合は false 。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

例:

//+——————————————————————+
//| ChartEvent 関数                                                  |
//+——————————————————————+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//— チャートのイベントパラメータを表示する
Comment(__FUNCTION__,“: id=”,id,” lparam=”,lparam,” dparam=”,dparam,” sparam=”,sparam);
//— チャートのマウスクリックイベント?
if(id==CHARTEVENT_CLICK)
{
//— 変数を準備する
int      x     =(int)lparam;
int      y     =(int)dparam;
datetime dt    =0;
double   price =0;
int      window=0;
//— X とYの座標を日付/時間的に変更する
if(ChartXYToTimePrice(0,x,y,window,dt,price))
{
PrintFormat(“Window=%d X=%d  Y=%d  =>  Time=%s  Price=%G”,window,x,y,TimeToString(dt),price);
//— 逆変換を実行する:(X,Y) => (Time,Price)
if(ChartTimePriceToXY(0,window,dt,price,x,y))
PrintFormat(“Time=%s  Price=%G  =>  X=%d  Y=%d”,TimeToString(dt),price,x,y);
else
Print(“ChartTimePriceToXY return error code: “,GetLastError());
//— 行を削除する
ObjectDelete(0,“V Line”);
ObjectDelete(0,“H Line”);
//— 十字線の水平線と垂直線を作成します。
ObjectCreate(0,“H Line”,OBJ_HLINE,window,dt,price);
ObjectCreate(0,“V Line”,OBJ_VLINE,window,dt,price);
ChartRedraw(0);
}
else
Print(“ChartXYToTimePrice return error code: “,GetLastError());
Print(“+————————————————————–+”);
nbsp;   }
}

参照

ChartTimePriceToXY()

ChartOpen

指定された銘柄と期間で新しいチャートを開きます。

long  ChartOpen(
string          symbol,    // 銘柄名
ENUM_TIMEFRAMES  period      // 期間
);

パラメータ

symbol

[in]  チャートシンボル( NULL はエキスパートアドバイザーがに接続されている現在のチャートのシンボル)

period

[in]  チャート期間(時間軸)。ENUM_TIMEFRAMES のいずれかの値。(0 は現在のチャート期間)

戻り値

成功した場合は開かれたチャートのID、その他の場合は 0 。

注意事項

端末内に同時に開いているチャートの数は CHARTS_MAXを 超えることは出来ません。

ChartFirst

クライアント端末の最初のチャートのIDを返します。

long  ChartFirst();

戻り値

チャート識別子

 

ChartNext

指定されたチャートの次のチャート識別子を返します。

long  ChartNext(
long  chart_id      // チャート識別子
);

パラメータ

chart_id

[in]  チャート識別子。0 は、現在のチャートを意味せず、「1 番目のチャート識別子を返す」という意味です。

戻り値

Chart ID。これがチャートリストの最後である場合は -1。

例:

//— チャート識別子の変数
long currChart,prevChart=ChartFirst();
int i=0,limit=100;
Print(“ChartFirst =”,ChartSymbol(prevChart),” ID =”,prevChart);
while(i<limit)// チャートは 100 以上は開かれていないはず
{
currChart=ChartNext(prevChart); // 前のチャート識別子を使用して、新しいチャート識別子を取得する
if(currChart<0) break;         // チャートリストの終わりに達した
Print(i,ChartSymbol(currChart),” ID =”,currChart);
prevChart=currChart;// ChartNext() のために現在のチャート識別子を保存する
i++;// カウンタを増加させることを忘れない
}

ChartClose

指定されたチャートを閉じます。

bool  ChartClose(
long  chart_id=0      // チャート識別子
);

パラメータ

chart_id=0

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

戻り値

成功の場合は true、それ以外の場合は false

ChartSymbol

指定されたチャートの銘柄名を返します。

string  ChartSymbol(
long  chart_id=0      // チャート識別子
);

パラメータ

chart_id=0

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

戻り値

チャートが存在しない場合は空の文字列が返されます。

参照

ChartSetSymbolPeriod

ChartPeriod

指定されたチャートの時間軸期間を返します。

ENUM_TIMEFRAMES  ChartPeriod(
long  chart_id=0      // チャート識別子
);

パラメータ

chart_id=0

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

戻り値

ENUM_TIMEFRAMES のうちの 1 つの値(チャートが存在しない場合は 0 )

ChartRedraw

この関数は指定されたチャートの強制再描画を呼び出します。

void  ChartRedraw(
long  chart_id=0      // チャート識別子
);

パラメータ

chart_id=0

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

注意事項

通常 object propertiesが更新された後で使用されます。

参照

オブジェクト関数

ChartSetDouble

指定されたチャートのプロパティに値を設定します。チャートプロパティは double 型でなければなりません。コマンドは、チャートメッセージキューに追加され、以前の全てのコマンドの処理後に実行されます。

bool  ChartSetDouble(
long    chart_id,    // チャート識別子
int    prop_id,      // プロパティ識別子
double  value        // 値
);

パラメータ

chart_id

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

prop_id

[in]  チャートプロパティ識別子。ENUM_CHART_PROPERTY_DOUBLE の値の 1 つ (読み込み専用のプロパティを除いて)。

value

[in] プロパティ値

戻り値

コマンドがチャートキューに追加された場合は true、そうでない場合は false。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

これは非同期関数です。つまり、この関数は、指定されたチャートのキューに正常に追加されたコマンドの実行を待たずに、すぐに制御を返します。プロパティは、チャートキューから適切なコマンドが処理された後にのみ変更されます。チャートキューからコマンドをすぐに実行するには ChartRedraw関数を呼び出します。

複数のチャートプロパティをすぐに一度に変更したい場合は、対応する関数( ChartSetString、 ChartSetDouble、ChartSetString)を1つのコードブロックで実行してからChartRedrawを一回呼び出す必要があります。

コマンドの実行結果を確認するには、関数を使用して、指定されたチャートプロパティ(ChartGetInteger、 ChartGetDouble、ChartSetString)をリクエストしますl。ただし、これらは同期関数であり、実行結果を待つことに注意してください。

ChartSetInteger

指定されたチャートのプロパティに値を設定します。チャートプロパティは datetime、int、 bool または char型でなければなりません。コマンドは、チャートメッセージキューに追加され、以前の全てのコマンドの処理後に実行されます。

bool  ChartSetInteger(
long  chart_id,    // チャート識別子
int    prop_id,      // プロパティ識別子
long  value        // 値
);

 

bool  ChartSetInteger(
long  chart_id,    // チャート識別子
int    prop_id,      // プロパティ識別子
int    sub_window,   // サブウィンドウ番号
long  value        // 値
);

パラメータ

chart_id

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

prop_id

[in]  チャートプロパティ識別子。ENUM_CHART_PROPERTY_INTEGER の値の 1 つ (読み込み専用のプロパティを除いて)。

sub_window

[in]  チャートサブウィンドウの番号。最初のケースの場合、初期値は0(メインチャートウィンドウ)です。プロパティのほとんどは、サブウィンドウの番号を必要としません。

value

[in]  プロパティ値

戻り値

コマンドがチャートキューに追加された場合は true、そうでない場合は false。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

これは非同期関数です。つまり、この関数は、指定されたチャートのキューに正常に追加されたコマンドの実行を待たずに、すぐに制御を返します。プロパティは、チャートキューから適切なコマンドが処理された後にのみ変更されます。チャートキューからコマンドをすぐに実行するには ChartRedraw関数を呼び出します。

複数のチャートプロパティをすぐに一度に変更したい場合は、対応する関数( ChartSetString、 ChartSetDouble、ChartSetString)を1つのコードブロックで実行してからChartRedrawを一回呼び出す必要があります。

コマンドの実行結果を確認するには、関数を使用して、指定されたチャートプロパティ(ChartGetInteger、 ChartGetDouble、ChartSetString)をリクエストしますl。ただし、これらは同期関数であり、実行結果を待つことに注意してください。

例:

//+——————————————————————+
//| エキスパート初期化関数                                               |
//+——————————————————————+
void OnInit()
{
//— チャートウィンドウでのマウス移動イベントの有効化
ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
//— チャートプロパティを強制的に更新して、イベント処理の準備を整える
ChartRedraw();
}
//+——————————————————————+
//| MouseState                                                       |
//+——————————————————————+
string MouseState(uint state)
{
string res;
res+=“\nML: “   +(((state& 1)== 1)?“DN”:“UP”);   // 左
res+=“\nMR: “   +(((state& 2)== 2)?“DN”:“UP”);   // 右
res+=“\nMM: “   +(((state&16)==16)?“DN”:“UP”);   // 中央
res+=“\nMX: “   +(((state&32)==32)?“DN”:“UP”);   // 初めのXキー
res+=“\nMY: “   +(((state&64)==64)?“DN”:“UP”);   // 2番目のXキー
res+=“\nSHIFT: “+(((state& 4)== 4)?“DN”:“UP”);   // shiftキー
res+=“\nCTRL: “ +(((state& 8)== 8)?“DN”:“UP”);   // Ctrlキー
return(res);
}
//+——————————————————————+
//| ChartEvent関数                                                   |
//+——————————————————————+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
if(id==CHARTEVENT_MOUSE_MOVE)
Comment(“POINT: “,(int)lparam,“,”,(int)dparam,“\n”,MouseState((uint)sparam));
}

ChartSetString

指定されたチャートのプロパティに値を設定します。チャートプロパティは string 型でなければなりません。コマンドは、チャートメッセージキューに追加され、以前の全てのコマンドの処理後に実行されます。

bool  ChartSetString(
long  chart_id,        // チャート識別子
int  prop_id,          // プロパティ識別子
string  str_value      // 値
);

パラメータ

chart_id

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

prop_id

[in]  チャートプロパティ識別子。値は ENUM_CHART_PROPERTY_STRING のいずれかです(読み込み専用のプロパティ以外)。

str_value

[in]  プロパティ値の文字列文字列の長さは2045文字を超えることは出来ません。(余分な文字は切り捨てられます)。

戻り値

コマンドがチャートキューに追加された場合は true、そうでない場合は false。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

ChartSetString はコメントをチャートに出力するのに Comment 関数の代わりに使用することが出来ます。

これは非同期関数です。つまり、この関数は、指定されたチャートのキューに正常に追加されたコマンドの実行を待たずに、すぐに制御を返します。プロパティは、チャートキューから適切なコマンドが処理された後にのみ変更されます。チャートキューからコマンドをすぐに実行するには ChartRedraw関数を呼び出します。

複数のチャートプロパティをすぐに一度に変更したい場合は、対応する関数( ChartSetString、 ChartSetDouble、ChartSetString)を1つのコードブロックで実行してからChartRedrawを一回呼び出す必要があります。

コマンドの実行結果を確認するには、関数を使用して、指定されたチャートプロパティ(ChartGetInteger、 ChartGetDouble、ChartSetString)をリクエストしますl。ただし、これらは同期関数であり、実行結果を待つことに注意してください。

例:

void OnTick()
{
//—
double Ask,Bid;
int Spread;
Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
Spread=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
string comment=StringFormat(“Printing prices:\nAsk = %G\nBid = %G\nSpread = %d”,
Ask,Bid,Spread);
ChartSetString(0,CHART_COMMENT,comment);
}

参照

コメント、ChartGetString

ChartGetDouble

指定されたチャートの対応するプロパティの値を返します。チャートプロパティは double 型でなければなりません。この関数の呼び出し方は 2 つあります。

1. 直接プロパティ値を返します。

double  ChartGetDouble(
long  chart_id,          // チャート識別子
int  prop_id,          // プロパティ識別子
int  sub_window=0     // サブウィンドウ番号(必要に応じて)
);

2. 関数の成功に応じて、true または false を返します。成功した場合、プロパティの値は、参照によって渡された目的変数double_varに配置されます。

bool  ChartGetDouble(
long    chart_id,        // チャート識別子
int    prop_id,        // プロパティ識別子
int    sub_window,     // サブウィンドウ番号
double& double_var      // チャートのプロパティのターゲット変数
);

パラメータ

chart_id

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

prop_id

[in]  チャートプロパティ識別子。値は ENUM_CHART_PROPERTY_DOUBLE のいずれかです。

sub_window

[in]  チャートサブウィンドウの番号。最初のケースの場合、初期値は0(メインチャートウィンドウ)です。プロパティのほとんどは、サブウィンドウの番号を必要としません。

double_var

[out]  要求されたプロパティの double 型のターゲット変数

戻り値

double 型の値

2 番目の呼び方では、指定されたプロパティが利用可能であり、その値がdouble_var 変数に置かれている場合には、trueを返します。そうでない場合は falseを返します。エラーについての追加情報を取得するには、GetLastError()関数を呼び出します。

注意事項

この関数は同期型です。つまり、呼び出し前にチャートキューに追加されたすべてのコマンドの実行を待機します。

例:

void OnStart()
{
double priceMin=ChartGetDouble(0,CHART_PRICE_MIN,0);
double priceMax=ChartGetDouble(0,CHART_PRICE_MAX,0);
Print(“CHART_PRICE_MIN =”,priceMin);
Print(“CHART_PRICE_MAX =”,priceMax);
}

ChartGetInteger

指定されたチャートの対応するプロパティの値を返します。チャートプロパティは datetime、int または bool 型でなければなりません。この関数の呼び出し方は 2 つあります。

1. 直接プロパティ値を返します。

long  ChartGetInteger(
long  chart_id,          // チャート識別子
int  prop_id,          // プロパティ識別子
int  sub_window=0     // サブウィンドウ番号(必要に応じて)
);

2. 関数の成功に応じて、true または false を返します。成功した場合、プロパティの値は、参照によって渡された目的変数long_varに配置されます。

bool  ChartGetInteger(
long    chart_id,        // チャート識別子
int    prop_id,        // プロパティ識別子
int    sub_window,     // サブウィンドウ番号
long&  long_var       // チャートのプロパティのターゲット変数
);

パラメータ

chart_id

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

prop_id

[in]  チャートプロパティ識別子。値は ENUM_CHART_PROPERTY_INTEGER のいずれかです。

sub_window

[in]  チャートサブウィンドウの番号。最初のケースの場合、初期値は0(メインチャートウィンドウ)です。プロパティのほとんどは、サブウィンドウの番号を必要としません。

long_var

[out]  要求されたプロパティの long 型のターゲット変数

戻り値

long 型の値

2 番目の呼び方では、指定されたプロパティが利用可能であり、その値がlong_var変数に置かれている場合には、trueを返します。そうでない場合は falseを返します。エラーについての追加情報を取得するには、GetLastError()関数を呼び出します。

注意事項

この関数は同期型です。つまり、呼び出し前にチャートキューに追加されたすべてのコマンドの実行を待機します。

例:

void OnStart()
{
int height=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
int width=ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
Print(“CHART_HEIGHT_IN_PIXELS =”,height,“pixels”);
Print(“CHART_WIDTH_IN_PIXELS =”,width,“pixels”);
}

ChartGetString

指定されたチャートの対応するプロパティの値を返します。チャートプロパティは string 型でなければなりません。この関数の呼び出し方は 2 つあります。

1. 直接プロパティ値を返します。

string  ChartGetString(
long  chart_id,          // チャート識別子
int  prop_id           // プロパティ識別子
);

2. 関数の成功に応じて、true または false を返します。成功した場合、プロパティの値は、参照によって渡された目的変数string_varに配置されます。

bool  ChartGetString(
long    chart_id,        // チャート識別子
int    prop_id,        // プロパティ識別子
string& string_var     // プロパティのターゲット変数 property
);

パラメータ

chart_id

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

prop_id

[in]  チャートプロパティ識別子。値は ENUM_CHART_PROPERTY_STRING のいずれかです。

string_var

[out]  要求されたプロパティの string 型のターゲット変数

戻り値

string 型の値

2 番目の呼び方では、指定されたプロパティが利用可能であり、その値が string_var 変数に置かれている場合には、trueを返します。そうでない場合は falseを返します。エラーについての追加情報を取得するには、GetLastError()関数を呼び出します。

注意事項

ChartGetString は Comment または ChartSetString 関数を使用してチャートにプロットされたコメントを読むために使用されます。

この関数は同期型です。つまり、呼び出し前にチャートキューに追加されたすべてのコマンドの実行を待機します。

例:

void OnStart()
{
ChartSetString(0,CHART_COMMENT,“Test comment.\nSecond line.\nThird!”);
ChartRedraw();
Sleep(1000);
string comm=ChartGetString(0,CHART_COMMENT);
Print(comm);
}

参照

コメント、ChartSetString

ChartNavigate

チャート内の指定された位置を基準に指定された足数によって指定されたチャートのシフトを実行します。

bool  ChartNavigate(
long                  chart_id,    // チャート識別子
ENUM_CHART_POSITION  position,    // 位置
int                  shift=0      // シフト値
);

パラメータ

chart_id

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

position

[in]  シフトを実行するチャートの位置ENUM_CHART_POSITION のいずれかの値を持ちます。

shift=0

[in]  チャートをシフトするバーの数正の値は(チャートの最後に向けた)右シフトを意味し、負の値は(グラフの先頭に向けた)左シフトを意味します。ゼロの値はチャートの端に移動するために使用することが出来ます。

戻り値

成功の場合は true、それ以外の場合は false

例:

//+——————————————————————+
//| スクリプトプログラムを開始する関数                                          |
//+——————————————————————+
void OnStart()
{
//— 現在のチャートのハンドルを取得
long handle=ChartID();
string comm=“”;
if(handle>0) // 成功した場合、追加的にチャートを設定する
{
//— オートスクロールを無効にする
ChartSetInteger(handle,CHART_AUTOSCROLL,false);
//— チャートの右の境界からのシフトを設定する
ChartSetInteger(handle,CHART_SHIFT,true);
//— ローソク足を描画する
ChartSetInteger(handle,CHART_MODE,CHART_CANDLES);
//— ティックボリュームの表示モードを設定する
ChartSetInteger(handle,CHART_SHOW_VOLUMES,CHART_VOLUME_TICK);

//— Comment() に出力するテキストを準備する
comm=“Scroll 10 bars to the right of the history start”;
//— コメントを表示する
Comment(comm);
//— 履歴開始の右に10足分スクロールする
ChartNavigate(handle,CHART_BEGIN,10);
//— チャート上で最初に見えるバーの番号を得る(番号付けは時系列と同様)
long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
//— 改行文字を追加する
comm=comm+“\r\n”;
//— コメントに追加する
comm=comm+“The first bar on the chart is number “+IntegerToString(first_bar)+“\r\n”;
//— コメントを表示する
Comment(comm);
//— 5秒待ってチャートの動きを見る
Sleep(5000);

//— コメントテキストに追加する
comm=comm+“\r\n”+“Scroll 10 bars to the left of the right chart border”;
Comment(comm);
//— チャートの右の境界の左に10足分スクロールする
ChartNavigate(handle,CHART_END,-10);
//— チャート上で最初に見えるバーの番号を得る(番号付けは時系列と同様)
first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
comm=comm+“\r\n”;
comm=comm+“The first bar on the chart is number “+IntegerToString(first_bar)+“\r\n”;
Comment(comm);
//— 5秒待ってチャートの動きを見る
Sleep(5000);

//— チャートのスクロールの新しいブロック
comm=comm+“\r\n”+“Scroll 300 bars to the right of the history start”;
Comment(comm);
//— 履歴開始の右に 300 足分スクロールする
ChartNavigate(handle,CHART_BEGIN,300);
first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
comm=comm+“\r\n”;
comm=comm+“The first bar on the chart is number “+IntegerToString(first_bar)+“\r\n”;
Comment(comm);
//— 5秒待ってチャートの動きを見る
Sleep(5000);

//— チャートのスクロールの新しいブロック
comm=comm+“\r\n”+“Scroll 300 bars to the left of the right chart border”;
Comment(comm);
//— チャートの右の境界の左に 300 足分スクロールする
ChartNavigate(handle,CHART_END,-300);
first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
comm=comm+“\r\n”;
comm=comm+“The first bar on the chart is number “+IntegerToString(first_bar)+“\r\n”;
Comment(comm);
}
}

ChartID

現在のチャートの ID を返します。

long  ChartID();

戻り値

long 型の値

ChartIndicatorAdd

指定されたチャートウィンドウに指定されたハンドルと指標を追加します。指標とチャートは同一のシンボルと時間軸に生成されるべきです。

bool  ChartIndicatorAdd(
long  chart_id,                // チャート識別子
int  sub_window               // サブウィンドウ番号
int  indicator_handle         // 指標ハンドル
);

パラメータ

chart_id

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

sub_window

[in]  チャートサブウィンドウの番号( 0 はメインチャートウィンドウ)新しいウィンドウで指標を追加するには、パラメータは、CHART_WINDOWS_TOTALに等しく、最後の既存のウィンドウの指標より 1 大きくなければなりません。パラメータの値が CHART_WINDOWS_TOTALよりも大きい場合、新しいウィンドウが作成されず、表示が追加されません。

indicator_handle

[in]  指標ハンドル

戻り値

成功の場合は true、それ以外の場合は false。エラー情報を取得するには、GetLastError() 関数が呼ばれます。エラー 4114 は、チャートとコメントを追加した指標の記号または時間軸が異なることを意味します。

注意事項

サブウィンドウに描画されるべき指標がメインチャートウィンドウに適応されると、指標はリスト内には存在しても表示されないことがあります (例えば、内蔵された iMACD または #property indicator_separate_window プロパティの指定されたカスタム指標) これは、指標の規模は価格チャートの規模とは異なり、適用された指標の値は、価格チャートの表示範囲に収まらないことを意味します。この場合、GetLastError() はエラーが存在しないことを示すゼロコードを返します。このような「見えない」指標の値は、データウィンドウに表示し、他のMQL5アプリケーションから受け取ることが出来ます。

例:

#property description “Expert Advisor demonstrating the work with ChartIndicatorAdd() function.”
#property description “After launching on the chart (and receiving the error in Journal), open”
#property description “the Expert Advisor’s properties and specify correct <symbol> and <period> parameters.”
#property description “MACD indicator will be added on the chart.”
 
//— 入力パラメータ
input string         symbol=“AUDUSD”;   // 銘柄名
input ENUM_TIMEFRAMES period=PERIOD_M12; // 時間軸
input int   fast_ema_period=12;         // MACDが高速期間
input int   slow_ema_period=26;         // MACDが低速期間
input int     signal_period=9;           // シグナル期間
input ENUM_APPLIED_PRICE apr=PRICE_CLOSE; // MACD計算に使用する値の型
 
int indicator_handle=INVALID_HANDLE;
//+——————————————————————+
//| エキスパート初期化に使用される関数                                        |
//+——————————————————————+
int OnInit()
{
//—
indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
//— チャートに指標を追加しようとする
if(!AddIndicator())
{
//— AddIndicator() 関数が、チャートに指標を追加することを拒否した
int answer=MessageBox(“Do you want to add MACD on the chart anyway?”,
“Incorrect symbol and/or time frame for adding the indicator”,
MB_YESNO // 「はい(Y)」 と 「いいえ(N)」 ボタンが表示される
);
//— ユーザが ChartIndicatorAdd() の不正な使用方法を主張する場合
if(answer==IDYES)
{
//— まず、操作ログにこのことを記載する
PrintFormat(“Attention! %s: Trying to add MACD(%s/%s) indicator on %s/%s chart. Receiving error 4114”,
__FUNCTION__,symbol,EnumToString(period),_Symbol,EnumToString(_Period));
//— 新たなサブウィンドウの数を受け取り指標を追加しようとする
int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
//— 試んでエラーを発生する
if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
PrintFormat(“Failed to add MACD indicator on %d chart window. Error code  %d”,
subwindow,GetLastError());
}
}
//—
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| エキスパートティック関数                                                 |
//+——————————————————————+
void OnTick()
{
// エキスパートアドバイザーは何もしない
}
//+——————————————————————+
//| チェックしてチャートに指標を追加する関数                                     |
//+——————————————————————+
bool AddIndicator()
{
//— 表示メッセージ
string message;
//— 指標シンボルとチャートシンボルが一致するかどうかを確認する
if(symbol!=_Symbol)
{
message=“Displaying the use of Demo_ChartIndicatorAdd() function:”;
message=message+“\r\n”;
message=message+“Unable to add the indicator calculated on another symbol on the chart.”;
message=message+“\r\n”;
message=message+“Specify the chart symbol in Expert Advisor’s property – “+_Symbol+“.”;
Alert(message);
//— 早期の終了。指標はチャート上に追加されない
return false;
}
//—指標とチャートの時間軸が一致しているかどうかを確認する
if(period!=_Period)
{
message=“Unable to add the indicator calculated on another time frame on the chart.”;
message=message+“\r\n”;
message=message+“Specify the chart time frame in Expert Advisor properties – “+EnumToString(_Period)+“.”;
Alert(message);
//— 早期の終了。指標はチャート上に追加されない
return false;
}
//— 全てのチェックが完了し、シンボルと指標時間軸はチャートに一致する
if(indicator_handle==INVALID_HANDLE)
{
Print(__FUNCTION__,”  Creating MACD indicator”);
indicator_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,apr);
if(indicator_handle==INVALID_HANDLE)
{
Print(“Failed to create MACD indicator. Error code “,GetLastError());
}
}
//— エラーコードをリセットする
ResetLastError();
//— 指標をチャートに適用する
Print(__FUNCTION__,”  Adding MACD indicator on the chart”);
Print(“MACD is generated on “,symbol,“/”,EnumToString(period));
//— MACD指標が付加された新たなサブウィンドウの番号を受け取る
int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
PrintFormat(“Adding MACD indicator on %d chart window”,subwindow);
if(!ChartIndicatorAdd(0,subwindow,indicator_handle))
{
PrintFormat(“Failed to add MACD indicator on %d chart window. Error code  %d”,
subwindow,GetLastError());
}
//— 指標が正常に追加された
return(true);
}

参照

ChartIndicatorDelete(), ChartIndicatorName(), ChartIndicatorsTotal(), iCustom(), IndicatorCreate()

ChartIndicatorDelete

指定された名称の指標を指定されたチャートウィンドウから削除します。

bool  ChartIndicatorDelete(
long          chart_id,              // チャート識別子
int            sub_window             // サブウィンドウ番号
const string  indicator_shortname   // 指標短縮名
);

パラメータ

chart_id

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

sub_window

[in]  チャートサブウィンドウの番号。( 0 はメインチャートウィンドウ)

const indicator_shortname

[in] IndicatorSetString() 関数で INDICATOR_SHORTNAMEプロパティに設定した指標の短縮名指標の短縮名を取得するには ChartIndicatorName() 関数が呼ばれます。

戻り値

指標の削除が成功した場合は true、その他の場合は false。エラーの詳細を取得するにはGetLastError() 関数を使用します。

注意事項

同一の短縮名を持つ指標がチャートサブウィンドウに 2 つ存在する場合、行の最初のものは削除されます。

このチャート上の他の指標が削除される指標の値に基づいている場合は、そのような指標も削除されます。

iCustom() 及び IndicatorCreate() 関数を使用して指標を作成する際、指標の短縮名とファイル名を混同しないでください。指標の短縮名が明示的に設定されていない場合、指標のソースコードを含むファイルの名称は、コンパイル時に指定されます。

指標のチャートからの削除は、その演算部が端末のメモリから削除されることを意味するものではありません。指標ハンドルを解除するには IndicatorRelease() 関数が使用されます。

指標の短縮名は正しく形成されなければなりません。短縮名は IndicatorSetString() 関数を使用してINDICATOR_SHORTNAMEプロパティに書かれます。ChartIndicatorDelete() 関数によってチャートから削除される指標は短縮名によって識別されるので、短縮名に指標の全ての入力パラメータの値を含むようお勧めします。

初期化の失敗後に指標を削除する例:

//+——————————————————————+
//|                                    Demo_ChartIndicatorDelete.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                             https://www.MQL5.com |
//+——————————————————————+
#property copyright “Copyright 2011, MetaQuotes Software Corp.”
#property link     “https://www.mql5.com”
#property version   “1.00”
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//— ヒストグラムをプロットする
#property indicator_label1 “Histogram”
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1 clrRed
#property indicator_style1 STYLE_SOLID
#property indicator_width1  1
//— 入力パラメータ
input int     first_param=1;
input int     second_param=2;
input int     third_param=3;
input bool     wrong_init=true;
//— 指標バッファ
double         HistogramBuffer[];
string         shortname;
//+——————————————————————+
//| カスタム指標を初期化する関数                                            |
//+——————————————————————+
int OnInit()
{
int res=INIT_SUCCEEDED;
//— HistogramBuffer 配列を指標バッファに関係づける
SetIndexBuffer(0,HistogramBuffer,INDICATOR_DATA);
//— 入力パラメータに基づいて、指標短縮名を構築する
shortname=StringFormat(“Demo_ChartIndicatorDelete(%d,%d,%d)”,
first_param,second_param,third_param);
IndicatorSetString(INDICATOR_SHORTNAME,shortname);
//— 指標の強制終了が設定されている場合、ゼロ以外の値を返す
if(wrong_init) res=INIT_FAILED;
return(res);
}
//+——————————————————————+
//| カスタム指標の反復関数                                                |
//+——————————————————————+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//— ループを操作するための開始位置
int start=prev_calculated-1;
if(start<0) start=0;
//— 指標バッファに値を記入する
for(int i=start;i<rates_total;i++)
{
HistogramBuffer[i]=close[i];
}
//— 次の呼び出しのために prev_calculated の値を返す
return(rates_total);
}
//+——————————————————————+
//| Deinit イベントハンドラ                                                |
//+——————————————————————+
void OnDeinit(const int reason)
{
PrintFormat(“%s: Deinitialization reason code=%d”,__FUNCTION__,reason);
if(reason==REASON_INITFAILED)
{
PrintFormat(“An indicator with a short name %s (file %s) deletes itself from the chart”,shortname,__FILE__);
int window=ChartWindowFind();
bool res=ChartIndicatorDelete(0,window,shortname);
//— ChartIndicatorDelete() 呼び出しの結果を分析する
if(!res)
{
PrintFormat(“Failed to delete indicator %s from window #%d. Error code %d”,
shortname,window,GetLastError());
}
}
}

参照

ChartIndicatorAdd(), ChartIndicatorName(), ChartIndicatorsTotal(), iCustom(), IndicatorCreate(), IndicatorSetString()

ChartIndicatorGet

指定されたチャート]ウィンドウで指定された短縮名を持つ指標ハンドルを返します。

int  ChartIndicatorGet(
long          chart_id,              // チャート識別子
int            sub_window             // サブウィンドウ番号
const string  indicator_shortname   // 指標短縮名
);

パラメータ

chart_id

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

sub_window

[in]  チャートサブウィンドウの番号( 0 はメインチャートウィンドウ)

const indicator_shortname

[in] IndicatorSetString() 関数を使用して INDICATOR_SHORTNAME プロパティに設定された指標の短縮名指標の短縮名を取得するには ChartIndicatorName() 関数が使用されます。

戻り値

成功した場合は指標ハンドル、そうでない場合は INVALID_HANDLEを返します。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

指標を作成する場合はIndicatorSetString() 関数を使用して INDICATOR_SHORTNAME プロパティに書かれる短縮名を形成するようお気をつけください。指標は ChartIndicatorGet() 関数で短縮名によって識別されるので、.短縮名に指標の全ての入力パラメータの値を含むようお勧めします。

指標を識別するためのあと 1 つの方法は、IndicatorParameters() 関数を使用して、指定されたハンドルのパラメータリストを取得し、その後、取得された値を分析することです。

例:

//+——————————————————————+
//| スクリプトプログラムを開始する関数                                          |
//+——————————————————————+
void OnStart()
{
//— チャート上のウィンドウの数(少なくとも1つのメインウィンドウは常に存在する)
int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
//— 全てのウィンドウをチェックする
for(int w=0;w<windows;w++)
{
//— このウィンドウ/サブウィンドウ内の指標の数
int total=ChartIndicatorsTotal(0,w);
//— ウィンドウ内の全ての指標をみる
for(int i=0;i<total;i++)
{
//— 指標の短縮名を取得する
string name=ChartIndicatorName(0,w,i);
//— 指標ハンドルを取得する
int handle=ChartIndicatorGet(0,w,name);
//— ログに加える
PrintFormat(“Window=%d,  index=%d,  name=%s,  handle=%d”,w,i,name,handle);
//— 不要になった指標ハンドルは解放するべき
IndicatorRelease(handle);
}
}
}

参照

ChartIndicatorAdd()、ChartIndicatorName()、ChartIndicatorsTotal()、IndicatorParameters()

ChartIndicatorName

指定されたチャートウィンドウの指標リスト内の番号で指標の短縮名を返します。

string  ChartIndicatorName(
long  chart_id,      // チャート識別子
int  sub_window     // サブウィンドウ番号
int  index         // チャートサブウィンドウに追加された指標のリストに内の指標のインデックス
);

パラメータ

chart_id

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

sub_window

[in]  チャートサブウィンドウの番号。( 0 はメインチャートウィンドウ)

index

[in]  指標のリストに内の指標のインデックスインデックスの命数は、ゼロで始まります。すなわち、リストの最初の指標が 0 のインデックスを持ちます。リスト内の指標の数を得るためには ChartIndicatorsTotal() 関数が使用されます。

戻り値

IndicatorSetString() 関数でINDICATOR_SHORTNAME プロパティに設定した指標の短縮名。エラーの詳細を取得するには GetLastError() 関数を使用します。

注意事項

iCustom() 及び IndicatorCreate() 関数を使用して指標を作成する際、指標の短縮名とファイル名を混同しないでください。指標の短縮名が明示的に設定されていない場合、コンパイル時に指標のソースコードを含むファイルの名称が指定されます。

指標の短縮名は正しく形成されなければなりません。短縮名は IndicatorSetString() 関数を使用してINDICATOR_SHORTNAMEプロパティに書かれます。ChartIndicatorDelete() 関数によってチャートから削除される指標は短縮名によって識別されるので、短縮名に指標の全ての入力パラメータの値を含むようお勧めします。

参照

ChartIndicatorAdd()、ChartIndicatorDelete()、ChartIndicatorsTotal()、iCustom()、IndicatorCreate()、IndicatorSetString()

ChartIndicatorsTotal

指定されたチャートウィンドウに適用された全ての指標の数を返します。

int  ChartIndicatorsTotal(
long  chart_id,      // チャート識別子
int  sub_window     // サブウィンドウ番号
);

パラメータ

chart_id

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

sub_window

[in]  チャートサブウィンドウの番号。( 0 はメインチャートウィンドウ)

戻り値

指定されたチャートウィンドウの指標の数。エラーの詳細を取得するにはGetLastError() 関数を使用します。

注意事項

この関数は、チャートに接続された全ての指標を検索することが出来ます。チャートのウィンドウの数の合計は ChartGetInteger() 関数を使用してCHART_WINDOWS_TOTAL プロパティから得られます。

参照

ChartIndicatorAdd()、ChartIndicatorDelete()、iCustom()、IndicatorCreate()、IndicatorSetString()

ChartWindowOnDropped

エキスパートアドバイザーやスクリプトがドロップされたチャートサブウィンドウチャートの番号(インデックス)を返します。( 0 はメインチャートウィンドウ)

int  ChartWindowOnDropped();

戻り値

int 型の値

例:

  int myWindow=ChartWindowOnDropped();
int windowsTotal=ChartGetInteger(0,CHART_WINDOWS_TOTAL);
Print(“Script is running on the window #”+myWindow+
“. Total windows on the chart “+ChartSymbol()+“:”,windowsTotal);

参照

ChartPriceOnDropped、ChartTimeOnDropped、ChartXOnDropped、ChartYOnDropped

ChartPriceOnDropped

エキスパートアドバイザーやスクリプトがドロップされたチャート点の価格座標を返します。

double  ChartPriceOnDropped();

戻り値

double 型の値

例:

  double p=ChartPriceOnDropped();
Print(“ChartPriceOnDropped() = “,p);

参照

ChartXOnDropped、ChartYOnDropped

ChartTimeOnDropped

エキスパートアドバイザーやスクリプトがドロップされたチャート点の価格座標を返します。

datetime  ChartTimeOnDropped();

戻り値

datetime 型の値

例:

  datetime t=ChartTimeOnDropped();
Print(“Script was dropped on the “+t);

参照

ChartXOnDropped、ChartYOnDropped

ChartXOnDropped

エキスパートアドバイザーやスクリプトがドロップされたチャートのポイントの X 座標を返します。

int  ChartXOnDropped();

戻り値

X 座標値

注意事項

X 軸方向は左から右です。

例:

  int X=ChartXOnDropped();
int Y=ChartYOnDropped();
Print(“(X,Y) = (“+X+“,”+Y+“)”);

参照

ChartWindowOnDropped、ChartPriceOnDropped、ChartTimeOnDropped

ChartYOnDropped

エキスパートアドバイザーやスクリプトがドロップされたチャート点の Y 座標を返します。

int  ChartYOnDropped();

戻り値

Y 座標値

注意事項

Y 軸方向は上から下です。

参照

ChartWindowOnDropped、ChartPriceOnDropped、ChartTimeOnDropped

ChartSetSymbolPeriod

指定されたチャートの銘柄値と期間を変更します。この関数は非同期的です。すなわち、コマンドを送信後に実行完了は待たれません。コマンドは、チャートメッセージキューに追加され、以前の全てのコマンドの処理後に実行されます。

bool  ChartSetSymbolPeriod(
long            chart_id,    // チャート識別子
string          symbol,      // 銘柄名
ENUM_TIMEFRAMES  period        // 期間
);

パラメータ

chart_id

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

symbol

[in]  チャートシンボル(NULL はエキスパートアドバイザーが接続されている現在のチャートのシンボル)

period

[in]  チャート期間(時間軸)。ENUM_TIMEFRAMES のいずれかの値。(0 は現在のチャート期間)

戻り値

コマンドがチャートキューに追加された場合は true、そうでない場合は false。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

銘柄/期間の変更はチャートに取り付けられたエキスパートアドバイザーの再初期化につながります。

同じシンボルと時間枠でのChartSetSymbolPeriodの呼び出しはチャートの更新に使われることができます(ターミナルのRefreshコマンドと同じ)。 チャートの更新によって、取り付けられているインディケータの再計算がトリガされます。 したがって、ティックがない場合でも(たとえば、週末に)チャート上のインディケータを計算することができます。

参照

ChartSymbol、ChartPeriod

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

Originally posted 2019-07-30 09:21:40.

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">