MQL4プログラミングにおけるiCCI関数について(サンプルソースあり)

MQL4でiCCI関数を使用する方法について説明します。

iCCI関数は、Commodity Channel Index (CCI)の値を計算するために使用されます。基本的な使い方は以下の通りです。

double iCCI(
   string symbol,        // 通貨ペア
   int timeframe,        // タイムフレーム
   int period,           // 平均期間
   int applied_price,    // 適用価格タイプ
   int shift             // シフト
);

以下は、パラメータの説明を表にまとめたものです。

パラメータ説明
symbol分析する通貨ペア(例:EURUSD)。NULLを指定すると現在のチャートの通貨ペアが使用されます。
timeframeチャートの時間枠(例:PERIOD_H1, PERIOD_D1)。0を指定すると現在のチャートのタイムフレームが使用されます。
periodCCIの計算に使用する期間。通常は14が使用されます。
applied_price計算に使用する価格タイプ。以下のいずれかを指定します:
– PRICE_CLOSE: 終値
– PRICE_OPEN: 始値
– PRICE_HIGH: 高値
– PRICE_LOW: 安値
– PRICE_MEDIAN: 中央値 ((high + low) / 2)
– PRICE_TYPICAL: 典型的価格 ((high + low + close) / 3)
– PRICE_WEIGHTED: 加重終値 ((high + low + close + close) / 4)
shift現在のバーからのシフト(0が現在のバー、1が1つ前のバー、など)

使用例

void OnTick()
{
   double cci = iCCI(NULL, 0, 14, PRICE_TYPICAL, 0);
   
   if(cci > 100)
   {
      // CCIが100を超えた場合の処理
      Print("CCI is overbought: ", cci);
   }
   else if(cci < -100)
   {
      // CCIが-100を下回った場合の処理
      Print("CCI is oversold: ", cci);
   }
}

この例では、現在のチャートの通貨ペアとタイムフレームを使用し、期間14、典型的価格でCCIを計算しています。CCIが100を超えた場合は買われすぎ、-100を下回った場合は売られすぎと判断しています。iCCI関数は、トレンドの強さや方向性、そして潜在的な反転点を特定するのに役立ちます。ただし、他の指標や分析手法と組み合わせて使用することをお勧めします。

目次

EA使用時のサンプルソース

MQL4でiCCI関数を使用してEAを作成する例を示します。このEAは、CCIのクロスオーバーを使用して取引シグナルを生成します。

#property copyright "Copyright 2024, Your Name"
#property link      "https://www.example.com"
#property version   "1.00"
#property strict

input int CCIPeriod = 14;        // CCI期間
input int CCIOverBought = 100;   // 買われすぎのレベル
input int CCIOverSold = -100;    // 売られすぎのレベル
input double Lots = 0.1;         // 取引ロット数

int OnInit()
{
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
}

void OnTick()
{
   double cci_current = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, 0);
   double cci_previous = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, 1);
   
   if(!PositionSelect(Symbol()))
   {
      // 新規ポジションを開く
      if(cci_previous <= CCIOverSold && cci_current > CCIOverSold)
      {
         // 買いシグナル
         OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "CCI Buy", 0, 0, clrGreen);
      }
      else if(cci_previous >= CCIOverBought && cci_current < CCIOverBought)
      {
         // 売りシグナル
         OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "CCI Sell", 0, 0, clrRed);
      }
   }
   else
   {
      // 既存ポジションを管理
      if(OrderType() == OP_BUY && cci_current >= CCIOverBought)
      {
         // 買いポジションを閉じる
         OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrBlue);
      }
      else if(OrderType() == OP_SELL && cci_current <= CCIOverSold)
      {
         // 売りポジションを閉じる
         OrderClose(OrderTicket(), OrderLots(), Ask, 3, clrYellow);
      }
   }
}

このEAの動作は以下の通りです。

  1. CCIの現在値と1つ前の値を計算します。
  2. オープンポジションがない場合:
    • CCIが売られすぎレベル(-100)を下から上に突き抜けた場合、買いポジションを開きます。
    • CCIが買われすぎレベル(100)を上から下に突き抜けた場合、売りポジションを開きます。
  3. オープンポジションがある場合:
    • 買いポジションを持っていて、CCIが買われすぎレベルに達した場合、ポジションを閉じます。
    • 売りポジションを持っていて、CCIが売られすぎレベルに達した場合、ポジションを閉じます。

注意点:

  • このEAは基本的な例であり、実際のトレードには追加のリスク管理やフィルタリングが必要です。
  • パラメータ(CCIPeriod, CCIOverBought, CCIOverSold, Lots)は、バックテストと最適化を通じて調整する必要があります。
  • 実際の取引に使用する前に、デモ口座でテストし、パフォーマンスを評価することが重要です。

このEAは、CCIを使用した基本的なトレーディングアイデアを示していますが、実際のトレーディングに使用する前に、十分なテストと調整を行うことが重要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

池田 直哉 池田 直哉 メタプロアカデミー創業者・講師

オリジナルのEAを作ることができるようになるWebスクール【メタプロアカデミー】を運営しています。プログラミング未経験の方が最短1ヵ月で勝てるオリジナルEAが作れるようになります。

目次