<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iCustom アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/icustom/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/icustom/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 03:43:44 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>iCustom アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/icustom/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4】iCustom関数の使い方を徹底解説！カスタムインジケーターをEAから呼び出す方法とサンプルコード</title>
		<link>https://mql-programing.com/archives/13043/%e3%80%90mql4%e3%80%91icustom%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%82%a4%e3%83%b3%e3%82%b8/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 16 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA自動売買]]></category>
		<category><![CDATA[iCustom]]></category>
		<category><![CDATA[カスタムインジケーター]]></category>
		<category><![CDATA[サンプルコード]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13043</guid>

					<description><![CDATA[<p>「お気に入りのインジケーターを使って自動売買したい！」——そんな夢を叶えてくれるのが、MQL4のiCustom関数です。 iCustom関数を使えば、MT4のIndicatorsフォルダにあるカスタムインジケーターの値を [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13043/%e3%80%90mql4%e3%80%91icustom%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%82%a4%e3%83%b3%e3%82%b8/">【MQL4】iCustom関数の使い方を徹底解説！カスタムインジケーターをEAから呼び出す方法とサンプルコード</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>「お気に入りのインジケーターを使って自動売買したい！」——そんな夢を叶えてくれるのが、MQL4の<strong>iCustom関数</strong>です。</p>
<p>iCustom関数を使えば、MT4の<strong>Indicatorsフォルダにあるカスタムインジケーターの値をEA（エキスパートアドバイザー）から自由に取得</strong>できます。つまり、チャート上で矢印やラインを表示するインジケーターのシグナルを、そのまま自動売買のロジックに組み込めるのです。</p>
<p>この記事では、iCustom関数の基本的な構文から、実践的なサンプルコードまで、初心者にもわかりやすく解説していきます。</p>
<h2><span id="toc1">iCustom関数とは？</span></h2>
<p>iCustom関数は、<strong>指定したカスタムインジケーターの計算結果（バッファの値）を取得する</strong>MQL4の組み込み関数です。</p>
<p>MT4にはiMA（移動平均線）やiRSI（RSI）など、標準インジケーター用の関数が用意されていますが、自作のインジケーターやネットで配布されているインジケーターにはこうした専用関数がありません。そこで活躍するのがiCustom関数です。</p>
<p>iCustom関数を利用すると、Indicatorsフォルダに保存されているあらゆるカスタムインジケーターの値を取得できます。これにより、インジケーターのシグナルをEAのエントリー条件・決済条件として使うことが可能になります。</p>
<h2><span id="toc2">iCustom関数の構文（シンタックス）</span></h2>
<p>iCustom関数の基本構文は以下の通りです。</p>
<pre><code class="language-mql4">double iCustom(
    string symbol,      // 通貨ペア（NULLで現在のチャート）
    int    timeframe,    // 時間足（0で現在の時間足）
    string name,         // カスタムインジケーター名
    ...                  // インジケーターの入力パラメーター（可変）
    int    mode,         // バッファ番号（0〜7）
    int    shift         // 取得するバーの位置（0が最新）
);
</code></pre>
<p>各パラメーターの意味を詳しく見ていきましょう。</p>
<h3><span id="toc3">① symbol（通貨ペア）</span></h3>
<p>値を取得したい通貨ペアを文字列で指定します。現在のチャートの通貨ペアを指定する場合は <code>NULL</code> または <code>_Symbol</code> を使います。別の通貨ペアを指定したい場合は <code>"USDJPY"</code> のように気配値表示ウィンドウの表記通りに記述します。</p>
<h3><span id="toc4">② timeframe（時間足）</span></h3>
<p>時間軸の種類を指定します。現在のチャートの時間足を使う場合は <code>0</code> または <code>PERIOD_CURRENT</code> を指定します。別の時間足を指定する場合は、以下の定数を使います。</p>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; margin: 16px 0;">
<tr style="background-color: #f0f0f0;">
<th>定数</th>
<th>値</th>
<th>意味</th>
</tr>
<tr>
<td>PERIOD_M1</td>
<td>1</td>
<td>1分足</td>
</tr>
<tr>
<td>PERIOD_M5</td>
<td>5</td>
<td>5分足</td>
</tr>
<tr>
<td>PERIOD_M15</td>
<td>15</td>
<td>15分足</td>
</tr>
<tr>
<td>PERIOD_M30</td>
<td>30</td>
<td>30分足</td>
</tr>
<tr>
<td>PERIOD_H1</td>
<td>60</td>
<td>1時間足</td>
</tr>
<tr>
<td>PERIOD_H4</td>
<td>240</td>
<td>4時間足</td>
</tr>
<tr>
<td>PERIOD_D1</td>
<td>1440</td>
<td>日足</td>
</tr>
<tr>
<td>PERIOD_W1</td>
<td>10080</td>
<td>週足</td>
</tr>
<tr>
<td>PERIOD_MN1</td>
<td>43200</td>
<td>月足</td>
</tr>
</table>
<h3><span id="toc5">③ name（インジケーター名）</span></h3>
<p>カスタムインジケーター名を文字列で指定します。指定するカスタムインジケーターの.ex4ファイルが、MQL4\Indicatorsフォルダまたはそのサブフォルダに保存されている必要があります。</p>
<p>サブディレクトリに配置されている場合は、&#8221;サブディレクトリ名\\カスタムインジケータ名&#8221;で指定します。</p>
<pre><code class="language-mql4">// Indicatorsフォルダ直下の場合
iCustom(NULL, 0, "MyIndicator", ...);

// サブフォルダ「Examples」内の場合
iCustom(NULL, 0, "Examples\\MyIndicator", ...);
</code></pre>
<h3><span id="toc6">④ &#8230;（インジケーターの入力パラメーター）</span></h3>
<p>カスタムインジケータの入力パラメータです。渡された入力パラメータの順序は、カスタムインジケータの宣言順に対応する必要があります。ここが一番混乱しやすいポイントです。</p>
<p>パラメーターを省略した場合は、インジケーター側のデフォルト値が使用されます。ただし、<strong>途中のパラメーターだけを省略することはできません</strong>。変更したいパラメーターより前のパラメーターは、すべてデフォルト値であっても記述する必要があります。</p>
<h3><span id="toc7">⑤ mode（バッファ番号）</span></h3>
<p>取得したいインジケーターバッファのインデックス番号（0〜7）を指定します。最初のバッファはmode=0です。</p>
<p>例えば、ボリンジャーバンドのようなインジケーターなら：</p>
<ul>
<li>バッファ0：ミドルバンド</li>
<li>バッファ1：アッパーバンド</li>
<li>バッファ2：ロワーバンド</li>
</ul>
<p>のように対応します。バッファ番号の確認方法は後述します。</p>
<h3><span id="toc8">⑥ shift（バーの位置）</span></h3>
<p>カスタムインジケーターの値を取得したいバーの位置を指定します。現在のバーであれば「0」、1本前のバーであれば「1」、2本前のバーであれば「2」と記述します。</p>
<p>EA内では、確定した値を使うため <code>shift=1</code>（1本前の確定バー）を指定するのが一般的です。</p>
<h2><span id="toc9">バッファ番号の調べ方</span></h2>
<p>iCustom関数を使ううえで最も重要なのが、<strong>正しいバッファ番号を知ること</strong>です。バッファ番号を間違えると、まったく違う値を取得してしまいます。</p>
<h3><span id="toc10">方法1：チャート上でマウスカーソルを合わせる</span></h3>
<p>チャート上にセットしたインジケーターのラインや矢印にマウスカーソルをのせて、Value1やValue2などという表示がでれば、iCustomでEA化できます。</p>
<h3><span id="toc11">方法2：データウィンドウで確認する</span></h3>
<p>MT4の<strong>「表示」→「データウィンドウ」</strong>を開くと、各インジケーターのバッファ値が一覧で表示されます。上から順に0, 1, 2&#8230;のバッファ番号に対応しています。</p>
<h3><span id="toc12">方法3：ソースコードを確認する</span></h3>
<p>インジケーターの.mq4ファイルがある場合は、<code>SetIndexBuffer()</code> や <code>SetIndexLabel()</code> の記述からバッファ番号を確認できます。</p>
<pre><code class="language-mql4">// ソースコードの例
SetIndexBuffer(0, UpperBuffer);  // バッファ0 → アッパーライン
SetIndexBuffer(1, LowerBuffer);  // バッファ1 → ロワーライン
SetIndexBuffer(2, BuySignal);    // バッファ2 → 買いシグナル
SetIndexBuffer(3, SellSignal);   // バッファ3 → 売りシグナル
</code></pre>
<h2><span id="toc13">基本的な使い方：サンプルコード</span></h2>
<p>ここからは、実際のサンプルコードを使って使い方を解説します。</p>
<h3><span id="toc14">サンプル1：移動平均線カスタムインジケーターの値を取得</span></h3>
<p>まずは、最もシンプルな例です。カスタムインジケーター「MyMA」の値を取得してチャートにコメント表示します。</p>
<pre><code class="language-mql4">void OnTick()
{
    // MyMAインジケーターの値を取得（期間20、バッファ0、1本前のバー）
    double ma_value = iCustom(NULL, 0, "MyMA", 20, 0, 1);
    
    // チャートにコメント表示
    Comment("MyMA(20)の値: ", DoubleToString(ma_value, Digits));
}
</code></pre>
<h3><span id="toc15">サンプル2：ボリンジャーバンドカスタムインジケーターの複数バッファを取得</span></h3>
<p>iCustom関数でボリンジャーバンドの値を取得する例です。</p>
<pre><code class="language-mql4">void OnTick()
{
    // Bandsインジケーターの各バンドを取得
    int period = 20;
    double deviation = 2.0;
    
    double upper = iCustom(NULL, 0, "Bands", period, 0, deviation, 1, 0);  // アッパーバンド（バッファ1）
    double lower = iCustom(NULL, 0, "Bands", period, 0, deviation, 2, 0);  // ロワーバンド（バッファ2）
    
    Comment("Upper: ", upper, "\nLower: ", lower);
}
</code></pre>
<h3><span id="toc16">サンプル3：矢印シグナルインジケーターでEA化する</span></h3>
<p>これが最も実践的な使い方です。買い矢印・売り矢印を表示するインジケーターのシグナルを使って自動売買するEAのサンプルです。</p>
<pre><code class="language-mql4">#property strict

// --- 入力パラメーター ---
input double Lots       = 0.01;    // ロット数
input int    MagicNumber = 12345;  // マジックナンバー
input int    StopLoss    = 50;     // ストップロス（pips）
input int    TakeProfit  = 100;    // テイクプロフィット（pips）

void OnTick()
{
    // --- カスタムインジケーターのシグナル取得 ---
    // 買いシグナル（バッファ0）と売りシグナル（バッファ1）を1本前のバーから取得
    double buySignal  = iCustom(NULL, 0, "MySignalIndicator", 0, 1);
    double sellSignal = iCustom(NULL, 0, "MySignalIndicator", 1, 1);
    
    // --- 現在のポジション数をカウント ---
    int buyCount = 0, sellCount = 0;
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
        if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
        if(OrderType() == OP_BUY)  buyCount++;
        if(OrderType() == OP_SELL) sellCount++;
    }
    
    // --- 買いエントリー ---
    // シグナルが EMPTY_VALUE でなければ矢印が出現している
    if(buySignal != EMPTY_VALUE && buySignal != 0 && buyCount == 0)
    {
        double sl = Ask - StopLoss * Point * 10;
        double tp = Ask + TakeProfit * Point * 10;
        int ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, sl, tp,
                               "iCustom Buy", MagicNumber, 0, clrBlue);
        if(ticket < 0)
            Print("買い注文エラー: ", GetLastError());
    }
    
    // --- 売りエントリー ---
    if(sellSignal != EMPTY_VALUE &#038;&#038; sellSignal != 0 &#038;&#038; sellCount == 0)
    {
        double sl = Bid + StopLoss * Point * 10;
        double tp = Bid - TakeProfit * Point * 10;
        int ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, sl, tp,
                               "iCustom Sell", MagicNumber, 0, clrRed);
        if(ticket < 0)
            Print("売り注文エラー: ", GetLastError());
    }
}
</code></pre>
<p>ポイントは、<strong>矢印が表示されていないバーでは <code>EMPTY_VALUE</code>（空の値）が返される</strong>という点です。矢印系のシグナルインジケーターをEA化する場合、この <code>EMPTY_VALUE</code> との比較がエントリー判定の基本パターンになります。</p>
<h2><span id="toc17">iCustom関数を使う際の注意点</span></h2>
<h3><span id="toc18">1. .ex4ファイルが必要</span></h3>
<p>iCustom関数が参照するのは、コンパイル済みの<strong>.ex4ファイル</strong>です。ソースコード（.mq4）だけではなく、必ずコンパイルして.ex4ファイルを生成しておきましょう。</p>
<h3><span id="toc19">2. バッファレスインジケーターには使えない</span></h3>
<p>オシレーター系のインジケーターの場合はバッファが不可欠なので問題ないのですが、メインチャートに表示される矢印系のインジケーターの場合にはバッファで処理していないことがあります。「バッファでシグナルを処理するようにプログラミングしていないこと」、これがiCustomでインジケーターをEA化できない原因です。バッファレスインジケーターはiCustomではEA化できません。</p>
<h3><span id="toc20">3. パラメーターの順序と型に注意</span></h3>
<p>入力パラメーターは<strong>インジケーターのソースコードで宣言された順番通り</strong>に指定する必要があります。順番を間違えたり、型が合わないと正しい値が返りません。</p>
<h3><span id="toc21">4. パフォーマンスを意識する</span></h3>
<p>iCustom関数は呼び出すたびに計算が実行されるため、ティックごとに何度も呼び出すとパフォーマンスが低下します。新しいバーが確定したタイミングでのみ呼び出し、データをキャッシュすると処理速度を改善できます。</p>
<pre><code class="language-mql4">// 新しいバーの判定例
static datetime lastBarTime = 0;
if(Time[0] != lastBarTime)
{
    lastBarTime = Time[0];
    // ここでiCustomを呼び出す
    double signal = iCustom(NULL, 0, "MyIndicator", 0, 1);
}
</code></pre>
<h3><span id="toc22">5. バッファ番号は0〜7の範囲</span></h3>
<p>MT4ではインジケーターバッファのインデックスは<strong>0〜7</strong>の8個までです。バッファが8個を超えるインジケーターの場合、すべての値をiCustomで取得できるとは限りません。</p>
<h2><span id="toc23">まとめ</span></h2>
<p>iCustom関数は、カスタムインジケーターのシグナルをEAに組み込むための必須関数です。この記事のポイントをまとめます。</p>
<ul>
<li><strong>iCustom関数</strong>を使えば、Indicatorsフォルダにあるカスタムインジケーターの値をEAから取得できる</li>
<li>パラメーターは「通貨ペア → 時間足 → インジケーター名 → <strong>入力パラメーター</strong> → バッファ番号 → バー位置」の順に指定する</li>
<li><strong>バッファ番号</strong>の確認は、データウィンドウやソースコードから行う</li>
<li>矢印シグナル系のインジケーターは <code>EMPTY_VALUE</code> との比較でシグナル判定する</li>
<li><strong>バッファレスインジケーター</strong>（バッファを使わずオブジェクトで描画するもの）には使えない</li>
<li>パフォーマンスのため、新しいバー確定時にのみ呼び出す工夫をすると良い</li>
</ul>
<p>まずは簡単なインジケーターから試して、iCustom関数の使い方に慣れていきましょう。シグナルインジケーターをEA化できるようになれば、自動売買の幅が大きく広がりますよ！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13043/%e3%80%90mql4%e3%80%91icustom%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%82%a4%e3%83%b3%e3%82%b8/">【MQL4】iCustom関数の使い方を徹底解説！カスタムインジケーターをEAから呼び出す方法とサンプルコード</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
