FX

MT4のCCIを設定してFX自動売買の値と照合する方法

価格チャートとCCIを確認するイメージ

MT4のCCIをFX自動売買に使うときは、期間だけでなく適用価格と参照する足をそろえてください。同じ「期間14」でも、終値で計算したCCIと高値・安値・終値の平均で計算したCCIでは、数値も条件が成立する足も変わります。

まず標準CCIを表示し、確定した一つの足で画面とEAの値が一致するか確認するのが出発点です。この記事ではWindows版MT4の設定、±100の読み方、iCCIによる発注しない照合例、値が合わないときの切り分けまで説明します。特定の期間や売買手法を利益の出る設定として推奨するものではありません。

この記事のポイント
  • 期間・適用価格・参照足をそろえてCCIを設定できる
  • ±100の水準と上抜け・下抜けの条件を区別できる
  • iCCIの読取値を同じ日時の画面表示と比較できる
  • 設定違いと履歴不足を分けて不一致を調べられる

MT4のCCIを設定して意味を読む

CCIの設定項目とサブウィンドウのイメージ
操作場面のイメージ画像です。実際の画面ではありません。

標準CCIを一つだけ表示する

標準CCIは、メニューの「挿入」から「インディケータ」「オシレーター」「Commodity Channel Index」と進むと表示できます。ナビゲーターのインディケーター一覧から追加する方法もあります。別の提供者が配布するCCI系のサイン指標は、標準CCIとは計算や表示条件が異なる可能性があるため、最初の照合には標準のものを使います。

追加すると設定画面が開きます。ここでは期間と適用価格を決め、スタイルやレベル表示を整えてから確定します。初期値を基準に調べる場合でも、過去に変更した値が残っていないか確認してください。「以前追加したCCI」と「いま追加したCCI」で設定が違うと、同じチャートでも線が二本に分かれます。

表示後は、メインチャートの下にCCIのサブウィンドウが一つあるかを見ます。対象チャートの銘柄と時間足も確認し、同名の指標を複数重ねていない状態にします。すでにCCIがある場合は、表示中のインディケーター一覧から該当する設定を開き、どの線の値を読むのかを決めましょう。

OANDAのMT4におけるCCI設定の解説では、期間14、適用価格Typical Priceが初期設定として示されています。ただし、本記事では初期値であることを成績の良さの根拠にはしません。検証中は「画面で何を指定したか」を記録し、EA側へ同じ条件を渡すための基準として使います。

期間と適用価格を別々に決める

期間は計算に使う足の本数です。1時間足で期間14なら14本の1時間足、日足で期間14なら14本の日足を基に計算します。期間14という数字だけを比較し、時間足をそろえないまま「同じ設定」と判断しないようにしましょう。

適用価格は、一つの足からどの価格を計算へ使うかを指定します。Typical Priceは高値・安値・終値の平均、Closeは終値です。同じ足でも高値や安値の位置によって両者は異なるため、CCIの数値がずれることは不具合とは限りません。画面とコードの一致を調べるときは、期間より先に見落としやすい項目です。

設定画面の価格MQL4の指定基になる値
ClosePRICE_CLOSE終値
OpenPRICE_OPEN始値
HighPRICE_HIGH高値
LowPRICE_LOW安値
Median PricePRICE_MEDIAN高値と安値の平均
Typical PricePRICE_TYPICAL高値・安値・終値の平均
Weighted ClosePRICE_WEIGHTED高値・安値・終値二つの平均
高値・安値・終値から平均価格を考えるイメージ
操作場面のイメージ画像です。実際の画面ではありません。

例えば高値150、安値144、終値147という仮の足なら、Typical Priceは147です。終値が145に変わる別の仮の足では、同じ高値と安値でもTypical Priceは約146.33となり、Closeの145とは一致しません。この例は計算の違いを示すだけで、実際の相場データや推奨価格を表すものではありません。

設定を比較するときは、一度に期間と適用価格を変えないほうが原因を追いやすくなります。まず同じ条件で数値を一致させ、その後に期間だけを変更して違いを調べます。価格定数の定義はMetaQuotesのMQL4価格定数でも確認できます。

±100は反転の保証ではない

CCIは、価格が一定期間の平均的な水準からどの程度離れているかを見る指標です。プラス側に大きい値なら上方向への乖離、マイナス側に大きい値なら下方向への乖離を考える材料になります。商品という名称が付いていますが、商品先物だけを対象にした指標ではありません。

±100は読み方の目安として使われますが、+100へ達したら必ず下落し、-100へ達したら必ず上昇するという意味ではありません。強い方向性が続く場面では、値が水準の外側にとどまることもあります。水準を超えた事実と、その後の価格が反転するという予想は分けて扱います。

EAの条件では「+100より大きい状態」と「+100を上抜けた瞬間」が違います。前者は連続する複数の足で成立し得ますが、後者は前の足と比較して初めて判定できます。ここを曖昧にすると、一度だけ注文するつもりの設計が、条件の続くたびに注文する設計へ変わってしまいます。

水準より上の状態と水準を横切る瞬間を比較する模式図
操作場面のイメージ画像です。実際の画面ではありません。

仮に二本前が95、一本前が108なら、確定足同士で+100を上抜けた例になります。二本前が112、一本前が108なら、+100より上にいるものの、その二本の間では上抜けていません。どちらも108という値だけを見れば同じなので、条件の文章を先に決めることが大切です。

逆張り、順張り、ダイバージェンスなどの活用法を混ぜて、あとから都合のよい説明を選ばないようにします。本記事では売買成績を検証していないため、特定の水準を売買の正解として紹介しません。意味の確認にはMetaQuotes公式のCCI解説を参照してください。

線の見た目と数値を分けて確認

レベル表示はサブウィンドウへ基準線を引く設定です。+100や-100の線を追加しても、CCI自体の計算期間や適用価格が変更されるわけではありません。線の色や太さも同じで、見やすさを整える項目と計算条件を分けて考えます。

上下限を固定すると、強く乖離した部分が表示範囲の外へ出る場合があります。線が見えなくなったときに、すぐ計算が停止したと判断しないでください。まず表示範囲の設定と数値を確認し、線がウィンドウ外にあるだけなのか、値そのものが得られていないのかを分けます。

データウィンドウにCCIを表示する設定も確認します。線を目で見ただけでは、99.9と100.1のような境界を正確に区別しにくいからです。カーソルを置いた足の日時を読み、その足のCCI値を確認します。表示桁数の丸めがあるため、コードの桁数と違っていても、まず比較する桁をそろえましょう。

複数の時間足で調べる場合は、表示選択を変えたことと、計算する時間足を変えたことを区別します。ある時間足で指標が非表示でも、EAが別途その時間足の値を読むことはあります。画面に出ていないからEAも読んでいない、と決めつけないようにします。

詳しい日時と値の照合方法は、MT4のデータウィンドウの見方で確認できます。標準CCIの設定画面で決めた条件と、実際に読んだ足を一組にして残すと、後から値を比較し直す際の基準になります。

MT4のCCIをFX自動売買と照合する

同じ足の価格とCCIをカーソルで照合するイメージ
操作場面のイメージ画像です。実際の画面ではありません。

まず確定足の日時をそろえる

現在足のCCIは、その足の価格が変わる間に更新されます。同じチャートを数秒の間隔で見ても数値が変わることがあるため、最初の照合には一本前の確定足を使います。MQL4のshiftでは現在足が0、一本前が1です。

ただしshiftは固定された日時ではありません。新しい足が始まれば、それまで一本前だった足は二本前へ移ります。コードを動かしたときのshift1と、しばらく後に画面で見たshift1を比較すると、別の足を比べている可能性があります。ログにはshiftだけでなく、iTimeで得た足の開始時刻も残しましょう。

時間足を指定しない0は、プログラムを実行するチャートの時間足です。H1の値を読むつもりでM15チャートから0を渡すと、15分足のCCIを読んでしまいます。検証条件を固定したいなら、PERIOD_H1のように時間足を明示し、画面側も同じ時間足にします。

銘柄名も完全にそろえます。同じ通貨の組み合わせでも、サーバーや末尾記号が違えば履歴と配信価格が同じとは限りません。画面にEURUSDと見えるつもりでも実際には接尾辞付きの銘柄であれば、その名前を使います。別口座のチャートと比較するときは、口座とサーバーの違いを先に確認してください。

照合に必要なのは、銘柄、時間足、期間、適用価格、足の開始時刻、CCI値の組です。売買の損益や勝率は、数値が一致してからの別の検証に回します。読取値がずれたままバックテストの成績だけを比較しても、どの条件の違いで結果が変わったのかを判断しにくくなります。

iCCIで発注せずに値を読む

MQL4のiCCIは、銘柄、時間足、期間、適用価格、shiftを指定してCCIの数値を返す関数です。以下は現在のチャートの銘柄・時間足について、期間14、Typical Price、一本前の値をログへ出す読取専用スクリプトの例です。注文を送信する処理は含めていません。

コードによるCCI読取値と画面を比較するイメージ
操作場面のイメージ画像です。実際の画面ではありません。
#property strict
void OnStart()
{
   string symbol = Symbol();
   int timeframe = Period();
   int period = 14;
   int shift = 1;
   if(iBars(symbol,timeframe) < period+shift+1)
   {
      Print("History is insufficient for this check");
      return;
   }
   ResetLastError();
   datetime bar_time = iTime(symbol,timeframe,shift);
   int time_error = GetLastError();
   if(bar_time == 0 || time_error != 0)
   {
      Print("Time read failed: ",time_error);
      return;
   }
   ResetLastError();
   double value = iCCI(symbol,timeframe,period,
                       PRICE_TYPICAL,shift);
   int value_error = GetLastError();
   if(value_error != 0 || !MathIsValidNumber(value))
   {
      Print("CCI read failed: ",value_error);
      return;
   }
   Print(symbol," tf=",timeframe," period=",period,
         " price=PRICE_TYPICAL time=",
         TimeToString(bar_time,TIME_DATE|TIME_MINUTES),
         " CCI=",DoubleToString(value,8));
}

この例は説明用で、利用者のMT4上でのコンパイルや実行結果を示したものではありません。検証用のスクリプトとしてMetaEditorで確認し、建玉のないデモ環境で使用してください。履歴が不足する表示が出たら、対象チャートの履歴を読み込んでから再確認します。コードの期間を書き換えた場合は、画面のCCIにも同じ値を指定します。

出力した時刻と同じ足へカーソルを合わせ、データウィンドウのCCIを読みます。画面に小数二桁、ログに八桁が出ていれば、表示の丸めで差があるように見える場合があります。まず画面と同じ桁へ丸めて比べ、その後に必要な精度で調べてください。

iCCIの引数と戻り値はMetaQuotesのiCCIリファレンスを基準にしています。MQL5の同名関数はハンドルを扱うため、このMQL4用コードを拡張子だけ変えてMT5へ持ち込まないようにします。移植の全体像は、MQL4からMQL5へEAを変換する際の確認手順を参照してください。

一致しない原因を一つずつ外す

最初に調べるのは、画面側の適用価格です。期間14という表示だけを確認し、コードではPRICE_TYPICAL、画面ではCloseになっていると、同じ足でも別の数値になります。期間、適用価格、銘柄、時間足を順に読み上げるように比較すると、見落としを減らせます。

次に足の日時を確認します。現在足と確定足を混ぜていないか、ログを出した後に新しい足が始まっていないかを見ます。後からshift1を選び直すより、記録した足の開始時刻を探すほうが比較対象を固定できます。同じ日時が見つからなければ、時間帯と履歴の範囲も確認します。

不一致の形先に見る項目判断を急がないこと
線は似ているが数値が違う適用価格と期間EAの計算が壊れたと決めない
時間がたつと差が出る足の開始時刻とshift同じ番号なら同じ足と思わない
特定の口座だけ違う銘柄名・サーバー・履歴配信条件の異なる値を同一視しない
値が出ない・処理を見送る履歴本数と取得エラー0をそのまま失敗値と決めない
線だけ見つからない上下限と表示選択計算停止と表示範囲を混同しない
同じ日時の足を選んで値の一致を確かめる模式図
操作場面のイメージ画像です。実際の画面ではありません。

CCIが0付近になること自体はあり得るので、0という数値だけで取得失敗を判断しません。一方で、履歴不足や取得エラーがあるのに0を正常値として売買条件へ流すのも避けます。値、エラー、足の時刻を組み合わせ、必要な情報がそろわなければ判定を見送る設計にします。

問題が解消しない場合は、標準CCI一つと読取専用スクリプトだけの小さい構成へ戻します。別のカスタム指標や複数EAを同時に変更すると、原因の追跡が難しくなります。一致した条件を基準に、変更を一つずつ戻して確かめると、設定差なのかコード側の参照差なのかを整理しやすくなります。

MT4のCCIは一致確認から使う

CCIをEAへ組み込む前の到達点は、画面とコードで同じ足の値が一致し、どの条件で判定するかを文章にできることです。+100以上の状態を使うのか、確定足での上抜けを使うのか、同じ状態が続く間の再判定をどうするのかを決めます。

その後に、エントリーの向き、決済、損切り、取引コスト、停止条件を含む売買ルールとして検証します。CCIの線が期待した形に見えることは、戦略の有効性を示す証拠ではありません。設定を変える場合も、比較期間とそれ以外の条件をそろえ、都合のよい一場面だけで選ばないようにしましょう。

最初は一つの銘柄と時間足で十分です。期間と適用価格を固定し、確定足の時刻と数値を照合してから条件判定へ進む。この順番なら、表示の設定、値の取得、売買ルールという異なる問題を混ぜずに、FX自動売買の確認を進められます。

EA作成ツールの検証範囲を確認する

生成コードの動作テスト・コンパイル結果と、その限界 →記事内の戦略や個別のEAの収益性を検証した結果ではありません。

学んだルールを、形にしてみよう。

EA作成ツールを開く ↗