一目均衡表は「転換線」

「基準線」

「先行スパンA」

「先行スパンB」

「遅行スパン」という5本の線で構成されるテクニカル指標です。

裁量トレードでチャートに表示して見る分には便利ですが、EAやインジケーターの中でこの5本の値をコードから直接使いたい場合、

`iMA()`のような単純な書き方では取得できません。

この記事では、一目均衡表の5本の線をまとめて取得できる`iIchimoku()`関数の使い方を、

実際にMetaEditorでコンパイルできるサンプルコードとあわせて解説します。

iIchimoku関数の書式

double iIchimoku(
   string symbol,        //通貨ペア(NULLで現在のチャート)
   int    timeframe,     //時間足(0で現在のチャートの時間足)
   int    tenkan_sen,    //転換線の期間(標準9)
   int    kijun_sen,     //基準線の期間(標準26)
   int    senkou_span_b, //先行スパンBの期間(標準52)
   int    mode,          //取得する線の種類
   int    shift          //何本前の足を見るか(0=最新、1=1つ前の確定足)
   );

`iMA()`や`iATR()`と同じ「symbol, timeframe, …パラメーター…, shift」

という並びですが、一目均衡表は3つの期間(転換線・基準線・先行スパンB)を同時に指定する点と、

mode引数でどの線の値が欲しいかを選ぶ点が異なります。

mode引数で5本の線を使い分ける

mode引数には、以下のいずれかの定数を指定します。

  • MODE_TENKANSEN(値は1) — 転換線
  • MODE_KIJUNSEN(値は2) — 基準線
  • MODE_SENKOUSPANA(値は3) — 先行スパンA
  • MODE_SENKOUSPANB(値は4) — 先行スパンB
  • MODE_CHIKOUSPAN(値は5) — 遅行スパン

たとえば転換線と基準線の値をそれぞれ取得したい場合、mode引数だけを変えて2回関数を呼びます。

double tenkan = iIchimoku(NULL, 0, 9, 26, 52, MODE_TENKANSEN, 0);//転換線(最新)
double kijun  = iIchimoku(NULL, 0, 9, 26, 52, MODE_KIJUNSEN, 0);//基準線(最新)

`iMA()`のようにインジケーターごとに別の関数があるわけではなく、

1つの`iIchimoku()`をmode引数で使い分ける設計になっている点が最初の分かりにくさです。

5本すべて欲しい場合は5回呼び出す必要があります。

先行スパンはshift(何本前か)の解釈に注意

先行スパンA・Bは「未来方向に26本(基準線の期間分)ずれて表示される」線です。

`iIchimoku()`のshift引数は`iMA()`と同じく「何本前の確定足を見るか」

を指定するだけで、この未来へのずれ(表示上のシフト)は関数の内部で自動的に計算済みの値が返ってきます。

shift引数に自分で26を足す必要はありません。

//shift=0を指定すれば、チャート上で「現在の足の位置に表示されている」先行スパンAの値がそのまま返る
double senkouA = iIchimoku(NULL, 0, 9, 26, 52, MODE_SENKOUSPANA, 0);

`iMA()`などと同様、shift=0は「形成中の足」を基準にするため、

EAの判定に使う場合は`shift=1`(直近に確定した1本前の足)を指定するのが安全です。

実際に動くコード全体

一目均衡表の5本の線の値をすべて取得し、チャート左上に表示する、

実際にMetaEditorでコンパイルできるインジケーターです。

//+------------------------------------------------------------------+
//|                                              IchimokuValues.mq4   |
//|                     Copyright 2026, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 0

input int TenkanSen   = 9;//転換線の期間
input int KijunSen    = 26;//基準線の期間
input int SenkouSpanB = 52;//先行スパンBの期間
//このインジケーターはチャートに線を描かず、値をComment()で表示するだけなので、
//バッファ0個で問題ありません(線を描く場合は1以上が必要です)。

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   double tenkan  = iIchimoku(NULL, 0, TenkanSen, KijunSen, SenkouSpanB, MODE_TENKANSEN, 1);
   double kijun   = iIchimoku(NULL, 0, TenkanSen, KijunSen, SenkouSpanB, MODE_KIJUNSEN, 1);
   double senkouA = iIchimoku(NULL, 0, TenkanSen, KijunSen, SenkouSpanB, MODE_SENKOUSPANA, 1);
   double senkouB = iIchimoku(NULL, 0, TenkanSen, KijunSen, SenkouSpanB, MODE_SENKOUSPANB, 1);
   double chikou  = iIchimoku(NULL, 0, TenkanSen, KijunSen, SenkouSpanB, MODE_CHIKOUSPAN, 1);

   Comment(
      "転換線 = ", DoubleToString(tenkan, Digits), "\n",
      "基準線 = ", DoubleToString(kijun, Digits), "\n",
      "先行スパンA = ", DoubleToString(senkouA, Digits), "\n",
      "先行スパンB = ", DoubleToString(senkouB, Digits), "\n",
      "遅行スパン = ", DoubleToString(chikou, Digits), "\n",
      (tenkan > kijun ? "転換線が基準線の上(強気側)" : "転換線が基準線の下(弱気側)")
     );

   return(rates_total);
  }
//+------------------------------------------------------------------+
Copy

MetaEditorで実際に動かす手順

  1. MT4の「ツール」→「MetaQuotes Language Editor」でMetaEditorを開く
  2. 「ファイル」→「新規作成」→「インジケーター」を選び、名前を「IchimokuValues」にして作成する(中身は空のテンプレートで構いません)
  3. テンプレートの中身を全て削除し、上のコードを丸ごと貼り付ける
  4. F7キー(またはコンパイルボタン)でコンパイルし、「0 error(s), 0 warning(s)」になることを確認する
  5. MT4の「ナビゲーター」パネルからインジケーターを探し、チャートへドラッグ&ドロップする
  6. チャート左上に5本の線の値と強気/弱気の判定が表示されれば成功です

コピペしてコンパイルが通らないときに確認すること

  • 拡張子が「.mq4」になっているか
  • mode引数の定数名(MODE_TENKANSENなど)のスペルミスがないか(1文字でも違うと未定義識別子としてコンパイルエラーになります)
  • 先行スパンA・Bの値が0や極端な値のまま変化しない場合、チャートを開いた直後でSenkouSpanB(標準52)分より多くの過去データがまだ読み込まれていない可能性があります。しばらく待つか、通貨ペアの履歴データをダウンロードし直してください

まとめ

一目均衡表の5本の線は、`iIchimoku()`という1つの関数をmode引数で使い分けて取得します。

shift引数の考え方は`iMA()`や`iATR()`と同じですが、

先行スパンの未来方向へのずれは関数側で計算済みの値が返ってくるため、

自分でshiftに26を足す必要はありません。

今回取得した転換線・基準線の位置関係は、そのまま「三役好転」

のようなエントリー条件の一部として、EAの判定ロジックに組み込めます。

関連記事