<?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>iCCI アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/icci/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/icci/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 02:58:00 +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>iCCI アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/icci/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4】iCCI関数の使い方を徹底解説！CCI（商品チャネル指数）でトレンド転換を捉えるEAを作ろう</title>
		<link>https://mql-programing.com/archives/13025/%e3%80%90mql4%e3%80%91icci%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%81cci%ef%bc%88%e5%95%86%e5%93%81%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Fri, 10 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[インジケーター関数]]></category>
		<category><![CDATA[iCCI]]></category>
		<category><![CDATA[CCI]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13025</guid>

					<description><![CDATA[<p>CCI（商品チャネル指数）は、相場の「買われすぎ・売られすぎ」を数値で判断できる人気のオシレーター系インジケーターです。MQL4ではiCCI関数を使うことで、EA（自動売買）の中から簡単にCCIの値を取得できます。 この [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13025/%e3%80%90mql4%e3%80%91icci%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%81cci%ef%bc%88%e5%95%86%e5%93%81%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab/">【MQL4】iCCI関数の使い方を徹底解説！CCI（商品チャネル指数）でトレンド転換を捉えるEAを作ろう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>CCI（商品チャネル指数）は、相場の「買われすぎ・売られすぎ」を数値で判断できる人気のオシレーター系インジケーターです。MQL4では<strong>iCCI関数</strong>を使うことで、EA（自動売買）の中から簡単にCCIの値を取得できます。</p>
<p>この記事では、iCCI関数の基本的な使い方からパラメータの意味、そしてCCIのクロスを利用した実践的なEAの作成方法まで、ステップバイステップで解説していきます。</p>
<h2><span id="toc1">CCI（商品チャネル指数）とは？</span></h2>
<p>CCIは1980年にドナルド・ランバート氏が開発した<strong>モメンタム系オシレーター</strong>です。もともとは商品先物市場向けに作られましたが、現在ではFXや株式など幅広い市場で使われています。</p>
<p>CCIの特徴は、RSIやストキャスティクスのように0〜100の範囲に収まるのではなく、<strong>上下に制限なく動く</strong>点です。一般的には以下の基準で判断します。</p>
<ul>
<li><strong>+100を上回る</strong>：買われすぎ（上昇トレンドが強い）</li>
<li><strong>-100を下回る</strong>：売られすぎ（下降トレンドが強い）</li>
<li><strong>0ライン</strong>：トレンドの方向転換の目安</li>
</ul>
<h3><span id="toc2">CCIの計算式</span></h3>
<p>CCIの計算式は以下の通りです。</p>
<pre><code class="language-mql4">CCI = (TP - MA) / (0.015 × MD)

// TP（ティピカルプライス）= (高値 + 安値 + 終値) / 3
// MA = TPの単純移動平均（期間N）
// MD = TPと移動平均の平均偏差
// 0.015 = CCI値の約70〜80%が±100以内に収まるように設定された定数
</code></pre>
<p>計算式を覚える必要はありませんが、TPをベースにしていることは頭に入れておきましょう。iCCI関数の<code>applied_price</code>パラメータに関わってきます。</p>
<h2><span id="toc3">iCCI関数の構文</span></h2>
<p>MQL4でCCIの値を取得するには、<strong>iCCI関数</strong>を使います。構文は以下の通りです。</p>
<pre><code class="language-mql4">double iCCI(
   string       symbol,          // 通貨ペア名
   int          timeframe,       // 時間足
   int          period,          // 平均期間
   int          applied_price,   // 適用価格
   int          shift            // シフト（何本前の足か）
);
</code></pre>
<h3><span id="toc4">パラメータ一覧</span></h3>
<table>
<thead>
<tr>
<th>パラメータ</th>
<th>型</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>symbol</td>
<td>string</td>
<td>通貨ペア名。現在のチャートなら<code>NULL</code>または<code>Symbol()</code></td>
</tr>
<tr>
<td>timeframe</td>
<td>int</td>
<td>時間足。<code>0</code>で現在のチャートの時間足。<code>PERIOD_H1</code>など定数も使用可能</td>
</tr>
<tr>
<td>period</td>
<td>int</td>
<td>CCIの計算期間。一般的には<strong>14</strong>や<strong>20</strong>がよく使われる</td>
</tr>
<tr>
<td>applied_price</td>
<td>int</td>
<td>計算に使う価格の種類</td>
</tr>
<tr>
<td>shift</td>
<td>int</td>
<td>何本前のローソク足のCCI値を取得するか。0が現在の足、1が1本前の確定足</td>
</tr>
</tbody>
</table>
<h3><span id="toc5">applied_price（適用価格）の定数一覧</span></h3>
<p>CCIの計算に使用する価格タイプを指定します。デフォルトのCCIではティピカルプライスが使われます。</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>中央値（高値+安値）/ 2</td>
</tr>
<tr>
<td>PRICE_TYPICAL</td>
<td>5</td>
<td>ティピカルプライス（高値+安値+終値）/ 3</td>
</tr>
<tr>
<td>PRICE_WEIGHTED</td>
<td>6</td>
<td>加重終値（高値+安値+終値×2）/ 4</td>
</tr>
</tbody>
</table>
<p>チャート上にCCIインジケーターを表示して比較する場合は、<strong>applied_priceを同じ設定にしないと値がずれる</strong>ので注意してください。標準のCCIは<code>PRICE_TYPICAL</code>を使用しています。</p>
<h2><span id="toc6">基本的な使い方</span></h2>
<p>まずは最もシンプルな使い方を見てみましょう。1本前の確定足のCCI値を取得してコメントに表示する例です。</p>
<pre><code class="language-mql4">void OnTick()
{
   // 1本前の確定足のCCI（期間14、ティピカルプライス）を取得
   double cciValue = iCCI(NULL, 0, 14, PRICE_TYPICAL, 1);
   
   // チャート上にCCI値を表示
   Comment("CCI(14) = ", DoubleToString(cciValue, 2));
}
</code></pre>
<p><strong>ポイント：</strong>shiftに<code>1</code>を指定して確定足の値を使うのが基本です。<code>0</code>（現在の足）はティックごとに値が変動するため、売買シグナルの判定には向きません。</p>
<h2><span id="toc7">CCIクロスで売買するEAを作ろう</span></h2>
<p>ここからが本番です。CCIが<strong>-100を下から上にクロスしたら買い</strong>、<strong>+100を上から下にクロスしたら売り</strong>、<strong>0ラインクロスで決済</strong>するEAを作成します。</p>
<h3><span id="toc8">トレードロジックの整理</span></h3>
<ul>
<li><strong>買いエントリー</strong>：CCI（1本前）が-100以上 かつ CCI（2本前）が-100未満 → -100を上抜け</li>
<li><strong>売りエントリー</strong>：CCI（1本前）が+100以下 かつ CCI（2本前）が+100超 → +100を下抜け</li>
<li><strong>買いポジション決済</strong>：CCIが0を下回った時</li>
<li><strong>売りポジション決済</strong>：CCIが0を上回った時</li>
</ul>
<h3><span id="toc9">完全なEAコード</span></h3>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| CCI Cross EA                                                       |
//+------------------------------------------------------------------+
#property strict

// 入力パラメータ
input int    CCI_Period      = 14;            // CCI期間
input double LotSize         = 0.1;           // ロットサイズ
input int    StopLoss        = 100;           // ストップロス（pips）
input int    TakeProfit      = 200;           // テイクプロフィット（pips）
input int    MagicNumber     = 20240101;      // マジックナンバー

//+------------------------------------------------------------------+
//| Expert tick function                                               |
//+------------------------------------------------------------------+
void OnTick()
{
   // CCI値を取得（確定足を使用）
   double cci1 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, 1); // 1本前
   double cci2 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, 2); // 2本前
   
   // 現在のポジション状態を確認
   int buyCount  = CountPositions(OP_BUY);
   int sellCount = CountPositions(OP_SELL);
   
   // --- 決済ロジック ---
   // 買いポジション保有中：CCIが0を下回ったら決済
   if(buyCount > 0 && cci1 < 0)
   {
      ClosePositions(OP_BUY);
   }
   
   // 売りポジション保有中：CCIが0を上回ったら決済
   if(sellCount > 0 && cci1 > 0)
   {
      ClosePositions(OP_SELL);
   }
   
   // --- エントリーロジック ---
   // ポジションがない場合のみエントリー
   if(buyCount == 0 && sellCount == 0)
   {
      // 買いシグナル：CCIが-100を下から上にクロス
      if(cci2 < -100 &#038;&#038; cci1 >= -100)
      {
         double sl = (StopLoss > 0)   ? Ask - StopLoss * Point * 10 : 0;
         double tp = (TakeProfit > 0)  ? Ask + TakeProfit * Point * 10 : 0;
         
         int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, 30, sl, tp,
                                "CCI Buy", MagicNumber, 0, clrBlue);
         if(ticket < 0)
            Print("Buy OrderSend error: ", GetLastError());
      }
      
      // 売りシグナル：CCIが+100を上から下にクロス
      if(cci2 > 100 && cci1 <= 100)
      {
         double sl = (StopLoss > 0)   ? Bid + StopLoss * Point * 10 : 0;
         double tp = (TakeProfit > 0)  ? Bid - TakeProfit * Point * 10 : 0;
         
         int ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, 30, sl, tp,
                                "CCI Sell", MagicNumber, 0, clrRed);
         if(ticket < 0)
            Print("Sell OrderSend error: ", GetLastError());
      }
   }
}

//+------------------------------------------------------------------+
//| 指定タイプのポジション数をカウント                                    |
//+------------------------------------------------------------------+
int CountPositions(int type)
{
   int count = 0;
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == type)
            count++;
      }
   }
   return count;
}

//+------------------------------------------------------------------+
//| 指定タイプのポジションを全て決済                                      |
//+------------------------------------------------------------------+
void ClosePositions(int type)
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == type)
         {
            double closePrice = (type == OP_BUY) ? Bid : Ask;
            if(!OrderClose(OrderTicket(), OrderLots(), closePrice, 30, clrYellow))
               Print("OrderClose error: ", GetLastError());
         }
      }
   }
}
</code></pre>
<h3><span id="toc10">コードのポイント解説</span></h3>
<p><strong>① MagicNumberの活用</strong></p>
<p>MagicNumberを使うことで、このEAが出した注文だけを識別できます。手動注文や他のEAの注文を誤って決済してしまう事故を防げます。</p>
<p><strong>② 確定足（shift=1, 2）でクロスを検出</strong></p>
<p>2本前と1本前の確定足を比較してクロスを検出しています。現在の足（shift=0）を使うと、ティックごとに値が変わるためシグナルが不安定になります。</p>
<p><strong>③ 決済を逆方向ではなく0ラインで行う</strong></p>
<p>CCIが0ラインをクロスした時点で決済することで、利益の取りこぼしを減らす設計になっています。もちろん、SL/TPによる自動決済も併用しています。</p>
<h2><span id="toc11">応用テクニック：マルチタイムフレーム分析</span></h2>
<p>iCCI関数の第2引数（timeframe）を変えるだけで、<strong>上位足のCCIをフィルターとして使う</strong>ことができます。例えば、日足のCCIの方向に合わせてエントリーを絞り込む手法です。</p>
<pre><code class="language-mql4">// 上位足（日足）のCCIでトレンド方向を判定
double cciDaily = iCCI(NULL, PERIOD_D1, 14, PRICE_TYPICAL, 1);

// 現在の時間足のCCIでエントリータイミングを判定
double cciCurrent1 = iCCI(NULL, 0, 14, PRICE_TYPICAL, 1);
double cciCurrent2 = iCCI(NULL, 0, 14, PRICE_TYPICAL, 2);

// 日足CCIが0以上（上昇傾向）の時だけ買いエントリー
if(cciDaily > 0 && cciCurrent2 < -100 &#038;&#038; cciCurrent1 >= -100)
{
   // 買いエントリー処理
}

// 日足CCIが0以下（下降傾向）の時だけ売りエントリー
if(cciDaily < 0 &#038;&#038; cciCurrent2 > 100 && cciCurrent1 <= 100)
{
   // 売りエントリー処理
}
</code></pre>
<p>上位足のトレンド方向に逆らわないことで、ダマシのシグナルを大幅に減らすことが期待できます。</p>
<h2><span id="toc12">iCCI関数を使う際の注意点</span></h2>
<h3><span id="toc13">1. applied_priceの不一致に注意</span></h3>
<p>チャート上に表示しているCCIインジケーターと、iCCI関数で指定した<code>applied_price</code>が異なると、値がずれます。検証時は必ず同じ設定にしましょう。標準のCCIは<code>PRICE_TYPICAL</code>です。</p>
<h3><span id="toc14">2. レンジ相場での連続シグナルに注意</span></h3>
<p>CCIはモメンタム指標なので、レンジ相場では±100ラインを頻繁に行き来し、ダマシが多発します。移動平均線やADXなどのトレンドフィルターを組み合わせることをおすすめします。</p>
<h3><span id="toc15">3. 計算に必要なバー数</span></h3>
<p>CCIの計算には、指定した期間分のローソク足データが必要です。チャートのバー数が少ないと正確な値が得られません。バックテスト時は十分なヒストリカルデータを用意してください。</p>
<h2><span id="toc16">まとめ</span></h2>
<p>今回はMQL4の<strong>iCCI関数</strong>の使い方を、基本から実践的なEA作成まで解説しました。</p>
<ul>
<li><strong>iCCI関数</strong>は5つのパラメータでCCIの値を簡単に取得できる</li>
<li><strong>±100ラインのクロス</strong>をエントリーシグナルに、<strong>0ラインクロス</strong>を決済シグナルに使うのが王道的な手法</li>
<li><strong>確定足（shift=1以上）</strong>を使ってシグナル判定するのが安定した運用のコツ</li>
<li><strong>マルチタイムフレーム分析</strong>で上位足のトレンド方向にフィルターをかけると精度が向上する</li>
<li><strong>applied_price</strong>はチャート上のインジケーターと合わせることを忘れずに</li>
</ul>
<p>CCIはシンプルながら奥が深いインジケーターです。まずはサンプルEAをストラテジーテスターで動かしてみて、パラメータを変えながらCCIの振る舞いを体感してみてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13025/%e3%80%90mql4%e3%80%91icci%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%81cci%ef%bc%88%e5%95%86%e5%93%81%e3%83%81%e3%83%a3%e3%83%8d%e3%83%ab/">【MQL4】iCCI関数の使い方を徹底解説！CCI（商品チャネル指数）でトレンド転換を捉えるEAを作ろう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
