<?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>ボリンジャーバンド アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/%E3%83%9C%E3%83%AA%E3%83%B3%E3%82%B8%E3%83%A3%E3%83%BC%E3%83%90%E3%83%B3%E3%83%89/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/ボリンジャーバンド/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 02:36:28 +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>ボリンジャーバンド アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/ボリンジャーバンド/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4入門】iBands関数でボリンジャーバンドを使いこなそう！引数・使い方・サンプルコード徹底解説</title>
		<link>https://mql-programing.com/archives/12997/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91ibands%e9%96%a2%e6%95%b0%e3%81%a7%e3%83%9c%e3%83%aa%e3%83%b3%e3%82%b8%e3%83%a3%e3%83%bc%e3%83%90%e3%83%b3%e3%83%89%e3%82%92%e4%bd%bf%e3%81%84%e3%81%93%e3%81%aa/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[iBands]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[ボリンジャーバンド]]></category>
		<category><![CDATA[インジケーター関数]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=12997</guid>

					<description><![CDATA[<p>ボリンジャーバンドは、移動平均線を中心に「価格の散らばり具合（標準偏差）」を帯（バンド）として表示するテクニカル指標です。MQL4には、このボリンジャーバンドの値をプログラムから簡単に取得できるiBands関数が用意され [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/12997/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91ibands%e9%96%a2%e6%95%b0%e3%81%a7%e3%83%9c%e3%83%aa%e3%83%b3%e3%82%b8%e3%83%a3%e3%83%bc%e3%83%90%e3%83%b3%e3%83%89%e3%82%92%e4%bd%bf%e3%81%84%e3%81%93%e3%81%aa/">【MQL4入門】iBands関数でボリンジャーバンドを使いこなそう！引数・使い方・サンプルコード徹底解説</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>ボリンジャーバンドは、移動平均線を中心に「価格の散らばり具合（標準偏差）」を帯（バンド）として表示するテクニカル指標です。MQL4には、このボリンジャーバンドの値をプログラムから簡単に取得できる<strong>iBands関数</strong>が用意されています。</p>
<p>この記事では、iBands関数の引数の意味をひとつずつ丁寧に解説し、基本的な使い方から逆張りEAのサンプルコード、さらに応用テクニックやよくある間違いまで、徹底的にまとめました。ボリンジャーバンドをEAやインジケーターで活用したい方は、ぜひ最後まで読んでみてください。</p>
<h2><span id="toc1">ボリンジャーバンドとは？</span></h2>
<p>ボリンジャーバンドは、アメリカの投資家ジョン・ボリンジャー氏が考案したテクニカル指標で、以下の<strong>3本のライン</strong>で構成されます。</p>
<ul>
<li><strong>ミドルバンド（中間線）</strong>：単純移動平均線（SMA）そのもの</li>
<li><strong>アッパーバンド（上方バンド）</strong>：ミドルバンド ＋ 標準偏差 × n</li>
<li><strong>ロワーバンド（下方バンド）</strong>：ミドルバンド − 標準偏差 × n</li>
</ul>
<p>ここで「n」は標準偏差の倍率で、一般的には<strong>2σ（シグマ）</strong>がよく使われます。統計的には、価格が±2σの範囲に収まる確率は約95.4%とされています。この性質を利用して、バンドの上端・下端にタッチしたら逆張りする戦略や、バンドをブレイクした方向に順張りする戦略などに活用されます。</p>
<h2><span id="toc2">iBands関数の基本構文</span></h2>
<p>MQL4でボリンジャーバンドの値を取得するには、組み込み関数<code>iBands</code>を使います。基本構文は以下のとおりです。</p>
<pre><code class="language-mql4">double iBands(
   string       symbol,           // ① 通貨ペア名
   int          timeframe,        // ② 時間足
   int          period,           // ③ 計算期間
   double       deviation,        // ④ 標準偏差の倍率
   int          bands_shift,      // ⑤ インジケーターのシフト数
   int          applied_price,    // ⑥ 適用価格
   int          mode,             // ⑦ ライン種類
   int          shift             // ⑧ シフト数（何本前のバーか）
);</code></pre>
<p>戻り値は<strong>double型</strong>で、指定した条件のボリンジャーバンドの値（価格）が返されます。引数が8つあるため少し多く感じますが、ひとつずつ見ていけば難しくありません。</p>
<h2><span id="toc3">各引数の詳細解説</span></h2>
<h3><span id="toc4">① symbol（通貨ペア名）</span></h3>
<p>計算対象の通貨ペアを文字列で指定します。現在のチャートの通貨ペアを使いたい場合は<code>NULL</code>または<code>Symbol()</code>を指定します。</p>
<pre><code class="language-mql4">// 現在のチャートの通貨ペアを使う場合
iBands(NULL, ...)
iBands(Symbol(), ...)

// 別の通貨ペアを指定する場合
iBands("USDJPY", ...)</code></pre>
<h3><span id="toc5">② timeframe（時間足）</span></h3>
<p>計算に使う時間足を指定します。現在のチャートの時間足を使う場合は<code>0</code>または<code>PERIOD_CURRENT</code>を指定します。</p>
<table>
<thead>
<tr>
<th>定数</th>
<th>値</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td>PERIOD_CURRENT</td>
<td>0</td>
<td>現在のチャートの時間足</td>
</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>
</tbody>
</table>
<h3><span id="toc6">③ period（計算期間）</span></h3>
<p>移動平均線の計算に使うバーの本数を指定します。一般的には<strong>20</strong>がよく使われます。期間を短くするとバンドが価格に敏感に反応し、長くすると滑らかになります。</p>
<h3><span id="toc7">④ deviation（標準偏差の倍率）</span></h3>
<p>バンドの幅を決める標準偏差の倍率です。一般的には<strong>2.0</strong>が使われます。1.0を指定すれば±1σ、3.0なら±3σのバンドが取得できます。</p>
<h3><span id="toc8">⑤ bands_shift（インジケーターのシフト数）</span></h3>
<p>ボリンジャーバンド全体を左右にずらす本数です。通常は<strong>0</strong>を指定します。正の値を指定するとバンドが右（未来方向）にずれます。特殊な用途でない限り0で問題ありません。</p>
<h3><span id="toc9">⑥ applied_price（適用価格）</span></h3>
<p>計算に使う価格の種類を指定します。通常は<strong>PRICE_CLOSE（終値）</strong>を使います。</p>
<table>
<thead>
<tr>
<th>定数</th>
<th>値</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td>PRICE_CLOSE</td>
<td>0</td>
<td>終値</td>
</tr>
<tr>
<td>PRICE_OPEN</td>
<td>1</td>
<td>始値</td>
</tr>
<tr>
<td>PRICE_HIGH</td>
<td>2</td>
<td>高値</td>
</tr>
<tr>
<td>PRICE_LOW</td>
<td>3</td>
<td>安値</td>
</tr>
<tr>
<td>PRICE_MEDIAN</td>
<td>4</td>
<td>中間価格 (High+Low)/2</td>
</tr>
<tr>
<td>PRICE_TYPICAL</td>
<td>5</td>
<td>典型的な価格 (High+Low+Close)/3</td>
</tr>
<tr>
<td>PRICE_WEIGHTED</td>
<td>6</td>
<td>加重終値 (High+Low+Close+Close)/4</td>
</tr>
</tbody>
</table>
<h3><span id="toc10">⑦ mode（ライン種類）</span></h3>
<p>取得したいラインを指定します。<strong>iBands関数は1回の呼び出しで1本のラインの値しか返さない</strong>ため、3本すべてを取得するには3回呼び出す必要があります。</p>
<table>
<thead>
<tr>
<th>定数</th>
<th>値</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td>MODE_MAIN</td>
<td>0</td>
<td>ミドルバンド（中間線・移動平均線）</td>
</tr>
<tr>
<td>MODE_UPPER</td>
<td>1</td>
<td>アッパーバンド（上方バンド）</td>
</tr>
<tr>
<td>MODE_LOWER</td>
<td>2</td>
<td>ロワーバンド（下方バンド）</td>
</tr>
</tbody>
</table>
<h3><span id="toc11">⑧ shift（シフト数）</span></h3>
<p>何本前のバーの値を取得するかを指定します。<strong>0が現在のバー</strong>（まだ確定していないバー）、1が1本前の確定済みバー、2が2本前…という意味です。</p>
<p>EA（自動売買）で売買判断に使う場合は、確定済みの値である<strong>shift=1</strong>を使うのが一般的です。shift=0は現在足の値なのでティックごとに変動し、判断がブレやすくなるためです。</p>
<h2><span id="toc12">基本的な使用例</span></h2>
<p>まずは最もシンプルな例として、現在のチャートで期間20・偏差2.0のボリンジャーバンド3本の値を取得してみましょう。</p>
<pre><code class="language-mql4">void OnTick()
{
   // 1本前の確定足でボリンジャーバンドの値を取得
   double upper = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
   double middle = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_MAIN,  1);
   double lower = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_LOWER, 1);

   // ログに出力して確認
   Print("Upper: ", upper, " | Middle: ", middle, " | Lower: ", lower);
}</code></pre>
<p>このコードでは、3つのiBands呼び出しで<code>mode</code>引数だけを変えて、上方バンド・中間線・下方バンドの3つの値をそれぞれ取得しています。それ以外の引数はすべて同じ値を指定します。</p>
<h2><span id="toc13">実践サンプル：ボリンジャーバンド逆張りEA</span></h2>
<p>ここでは、ボリンジャーバンドの±2σを使ったシンプルな逆張りEAを作ってみましょう。ロジックは以下のとおりです。</p>
<ul>
<li><strong>買いエントリー</strong>：1本前の終値がロワーバンド（-2σ）を下回ったら買い</li>
<li><strong>売りエントリー</strong>：1本前の終値がアッパーバンド（+2σ）を上回ったら売り</li>
<li><strong>決済</strong>：ミドルバンドに到達したら決済</li>
</ul>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| ボリンジャーバンド逆張りEA                                         |
//+------------------------------------------------------------------+
#property strict

// 入力パラメーター
input int    BB_Period    = 20;     // ボリンジャーバンドの期間
input double BB_Deviation = 2.0;    // 標準偏差の倍率
input double Lots         = 0.1;    // ロット数
input int    Slippage     = 3;      // スリッページ
input int    MagicNumber  = 12345;  // マジックナンバー

//+------------------------------------------------------------------+
//| OnTick関数                                                        |
//+------------------------------------------------------------------+
void OnTick()
{
   // ボリンジャーバンドの各ラインを取得（1本前の確定足）
   double upper  = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_UPPER, 1);
   double middle = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_MAIN,  1);
   double lower  = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_LOWER, 1);

   // 1本前の終値
   double prevClose = Close[1];

   // 現在のポジション数を確認
   int buyCount  = CountOrders(OP_BUY);
   int sellCount = CountOrders(OP_SELL);

   // --- エントリーロジック ---
   // 買いエントリー：終値がロワーバンドを下回った
   if(buyCount == 0 && prevClose < lower)
   {
      int ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0,
                             "BB Buy", MagicNumber, 0, clrBlue);
      if(ticket < 0)
         Print("Buy OrderSend Error: ", GetLastError());
   }

   // 売りエントリー：終値がアッパーバンドを上回った
   if(sellCount == 0 &#038;&#038; prevClose > upper)
   {
      int ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0,
                             "BB Sell", MagicNumber, 0, clrRed);
      if(ticket < 0)
         Print("Sell OrderSend Error: ", GetLastError());
   }

   // --- 決済ロジック：ミドルバンドに到達したら決済 ---
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;

      // 現在のバーのミドルバンドを取得（決済判断用）
      double currentMiddle = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_MAIN, 0);

      if(OrderType() == OP_BUY && Bid >= currentMiddle)
      {
         if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clrBlue))
            Print("Buy OrderClose Error: ", GetLastError());
      }
      else if(OrderType() == OP_SELL && Ask <= currentMiddle)
      {
         if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clrRed))
            Print("Sell OrderClose Error: ", GetLastError());
      }
   }
}

//+------------------------------------------------------------------+
//| 指定タイプのポジション数をカウントする関数                          |
//+------------------------------------------------------------------+
int CountOrders(int orderType)
{
   int count = 0;
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == orderType)
         count++;
   }
   return count;
}</code></pre>
<p>このEAのポイントをまとめます。</p>
<ul>
<li><strong>エントリー判断はshift=1</strong>（確定足）を使い、値がブレないようにしています</li>
<li><strong>決済判断はshift=0</strong>（現在足）を使い、リアルタイムの価格とミドルバンドを比較しています</li>
<li><strong>CountOrders関数</strong>でポジション数を確認し、同方向に重複エントリーしないようにしています</li>
<li><strong>MagicNumber</strong>を使うことで、他のEAのポジションと区別しています</li>
</ul>
<h2><span id="toc14">応用テクニック</span></h2>
<h3><span id="toc15">複数のσを同時に使う</span></h3>
<p>ボリンジャーバンドの±1σ、±2σ、±3σを同時に取得すれば、より細かい分析が可能です。deviation引数を変えるだけで実現できます。</p>
<pre><code class="language-mql4">// ±1σ
double upper1 = iBands(NULL, 0, 20, 1.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower1 = iBands(NULL, 0, 20, 1.0, 0, PRICE_CLOSE, MODE_LOWER, 1);

// ±2σ
double upper2 = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower2 = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_LOWER, 1);

// ±3σ
double upper3 = iBands(NULL, 0, 20, 3.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower3 = iBands(NULL, 0, 20, 3.0, 0, PRICE_CLOSE, MODE_LOWER, 1);</code></pre>
<p>たとえば「±1σの範囲内ならレンジ相場と判断し取引を控える」「±3σにタッチしたら強い逆張りシグナル」といった使い方ができます。</p>
<h3><span id="toc16">バンド幅でボラティリティを判定する</span></h3>
<p>アッパーバンドとロワーバンドの差を計算すれば、バンド幅（ボラティリティの目安）が分かります。</p>
<pre><code class="language-mql4">double upper  = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower  = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_LOWER, 1);

// バンド幅を計算
double bandWidth = upper - lower;

// バンド幅をポイント単位に変換（通貨ペアの桁数に応じて調整）
double bandWidthPoints = bandWidth / Point;

// ボラティリティ判定の例
if(bandWidthPoints < 200)
{
   Print("スクイーズ状態（低ボラティリティ）：バンド幅 = ", bandWidthPoints, " points");
   // → この後のブレイクアウトに備える
}
else if(bandWidthPoints > 500)
{
   Print("エクスパンション状態（高ボラティリティ）：バンド幅 = ", bandWidthPoints, " points");
   // → トレンドフォロー戦略を検討
}</code></pre>
<p>バンドが極端に狭くなった状態（<strong>スクイーズ</strong>）は、その後大きなトレンドが発生する前兆とされています。バンドが急激に広がった状態（<strong>エクスパンション</strong>）はトレンドが発生中であることを示します。</p>
<h2><span id="toc17">よくある間違いと注意点</span></h2>
<h3><span id="toc18">shift=0は未確定の値</span></h3>
<p>最も多い間違いのひとつが、<code>shift=0</code>の値でエントリー判断をしてしまうことです。shift=0は現在のバー（まだローソク足が確定していない状態）の値なので、ティックが来るたびに値が変わります。</p>
<p>エントリー条件にはshift=1（確定済みのバー）を使うようにしましょう。バックテストとリアルトレードの結果が大きくずれる原因にもなります。</p>
<h3><span id="toc19">MODE定数の取り違え</span></h3>
<p>iBands関数のmode引数で使う定数と、iMACD関数などの他のインジケーター関数のmode定数は名前が似ていても意味が異なる場合があります。iBandsでは<code>MODE_MAIN</code>（0）、<code>MODE_UPPER</code>（1）、<code>MODE_LOWER</code>（2）の3つを使います。</p>
<p>特に<code>MODE_MAIN</code>はiMACD関数でも使われる定数ですが、iBandsではミドルバンド（移動平均線）を意味します。関数ごとにどの定数がどのラインを表すか確認しましょう。</p>
<h3><span id="toc20">マルチタイムフレームでの注意</span></h3>
<p>timeframe引数に現在のチャートと異なる時間足を指定すると、上位足のボリンジャーバンドを取得できます。しかし、いくつか注意点があります。</p>
<pre><code class="language-mql4">// 1時間足チャートで日足のボリンジャーバンドを取得
double dailyUpper = iBands(NULL, PERIOD_D1, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 1);</code></pre>
<ul>
<li>上位足のデータが十分にダウンロードされていないとエラーや不正確な値が返されることがあります</li>
<li>上位足のshift=0は上位足の現在のバーを指すため、確定タイミングがチャート時間足とは異なります</li>
<li>バックテストでは「全ティック」モデルを使わないとマルチタイムフレームの値が正しく取得できない場合があります</li>
</ul>
<h2><span id="toc21">まとめ</span></h2>
<p>この記事では、MQL4の<strong>iBands関数</strong>について、基本構文から各引数の詳細、実践的なEAサンプル、応用テクニックまで解説しました。最後にポイントを整理します。</p>
<ul>
<li>iBands関数は<strong>8つの引数</strong>を持ち、ボリンジャーバンドの値をdouble型で返す</li>
<li><strong>mode引数</strong>でMODE_MAIN（中間線）、MODE_UPPER（上方バンド）、MODE_LOWER（下方バンド）を切り替える</li>
<li>3本のラインを取得するには<strong>iBandsを3回呼び出す</strong>必要がある</li>
<li>エントリー判断には<strong>shift=1</strong>（確定足）を使うのが基本</li>
<li>deviation引数を変えることで、±1σ/±2σ/±3σなど複数のバンドを簡単に取得できる</li>
<li>バンド幅の計算で<strong>ボラティリティの判定</strong>（スクイーズ・エクスパンション）にも活用できる</li>
</ul>
<p>iBands関数はシンプルながらも応用範囲が広い関数です。まずは基本的な使い方をマスターし、他のテクニカル指標と組み合わせたり、エントリー条件を工夫したりして、自分だけのEA開発に挑戦してみてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/12997/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91ibands%e9%96%a2%e6%95%b0%e3%81%a7%e3%83%9c%e3%83%aa%e3%83%b3%e3%82%b8%e3%83%a3%e3%83%bc%e3%83%90%e3%83%b3%e3%83%89%e3%82%92%e4%bd%bf%e3%81%84%e3%81%93%e3%81%aa/">【MQL4入門】iBands関数でボリンジャーバンドを使いこなそう！引数・使い方・サンプルコード徹底解説</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
