
MQL4MQL5 テクニカル指標
iCustom()
- できること
- カスタムインジケーターの値を取得する
- 対応
- MQL4・MQL5
iCustom() とは
Indicators フォルダにあるカスタムインジケーター(自作・配布・市販のもの)の値を取得する関数です。インジケーターのパラメーターを順番どおりに渡し、取得したいバッファの番号を指定します。
iCustom() の書式と引数
MQL4 の場合MT4
double iCustom(
string symbol,
int timeframe,
string name,
...,
int mode,
int shift
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
timeframe | int | 必須 | 時間足。0 または PERIOD_CURRENT でチャートの時間足。 |
name | string | 必須 | インジケーターのファイル名(拡張子なし)。Indicators フォルダの中のサブフォルダにあるときは "フォルダ名\ファイル名"。 |
mode | int | 必須 | 取得するバッファの番号(0 から)。 |
shift | int | 必須 | 値を取得するバーの位置。0 が現在(未確定)のバー、1 がひとつ前の確定したバー。 |
戻り値(MQL4)
指定したバッファの値。値がないバーでは EMPTY_VALUE(2147483647)が返ることがあります。
MQL5 の場合MT5
int iCustom(
string symbol,
ENUM_TIMEFRAMES period,
string name,
...
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
period | ENUM_TIMEFRAMES | 必須 | 時間足。PERIOD_CURRENT でチャートの時間足。 |
name | string | 必須 | インジケーターのファイル名(拡張子なし)。Indicators フォルダの中のサブフォルダにあるときは "フォルダ名\ファイル名"。 |
戻り値(MQL5)
インジケーターのハンドル。失敗したら INVALID_HANDLE。値は CopyBuffer(ハンドル, バッファ番号, …) で読みます。
iCustom() の使い方(コード例)
MQL4
// "MyArrow" インジケーター(パラメーター:期間=14)の0番バッファ(買いサイン)を確定足で読む
double buy = iCustom(_Symbol, 0, "MyArrow", 14, 0, 1);
if(buy != 0 && buy != EMPTY_VALUE)
Print("買いサイン 価格=", buy);MQL5
int hCustom = INVALID_HANDLE;
int OnInit()
{
// "MyArrow" インジケーター(パラメーター:期間=14)
hCustom = iCustom(_Symbol, PERIOD_CURRENT, "MyArrow", 14);
if(hCustom == INVALID_HANDLE)
{
Print("インジケーターを読み込めません error=", GetLastError());
return INIT_FAILED;
}
return INIT_SUCCEEDED;
}
void OnTick()
{
double buy[];
if(CopyBuffer(hCustom, 0, 1, 1, buy) < 1) return; // 0番バッファ・確定足
if(buy[0] != 0 && buy[0] != EMPTY_VALUE)
Print("買いサイン 価格=", buy[0]);
}OnTick()・OnStart() などの関数の中に書いて使う例です。MetaEditor でコンパイルできることを確認済みです。
iCustom() の注意点
- 「...」の部分には、インジケーターのパラメーター(input 変数)を上から順番に、型を合わせて渡します。省略すると既定値が使われますが、途中だけを省略することはできません。
- 矢印のサイン系インジケーターは、サインのないバーで 0 か EMPTY_VALUE を返します。「値が 0 でも EMPTY_VALUE でもない」ことを条件にします。
- バッファ番号は、データウィンドウの表示順や、インジケーターのソースの SetIndexBuffer() の番号で確認します。
- ファイル名が違う、コンパイルされていない(.ex4 / .ex5 がない)と読み込めません。
MQL4 と MQL5 の違い
MQL4 は iCustom(…, パラメーター, バッファ番号, shift) で値を直接取得します。MQL5 は iCustom(…, パラメーター) でハンドルを作り、CopyBuffer() でバッファ番号と位置を指定して読みます。












