iBearsPowerとiBullsPowerは、

Alexander Elderが考案したElder Ray指標の値を、

MQL4で直接取得できる組み込み関数です。

既刊のテクニカルインジケーター関数一覧記事で名前だけは触れていましたが、

このサイトではまだ単独の解説記事がありませんでした。

この記事では、2つの関数の引数と戻り値を整理したうえで、

買い方・売り方のどちらかが「勢い負け」

した瞬間を検知する、実際に動くインジケーターの作り方を解説します。

この記事で分かること
・iBearsPower/iBullsPowerの5つの引数と戻り値の意味
・既刊iRSI
・既刊iMFI
・既刊iForceとの計算対象の違い
・ブルズパワーとベアーズパワーを2本セットで見る理由
・実際に動くコード全体

設計思想: 高値・安値とEMAの差で何が分かるか

まず、この2指標が既刊のオシレーター系指標と何が違うのかを整理します。

既刊iRSI・既刊iMFI・既刊iForceとの計算対象の違い

ブルズパワーは「高値 – EMA」、ベアーズパワーは「安値 – EMA」

という引き算で求めます。

指標 使う値 何を測るか
iRSI(既刊) 終値の上昇・下落幅の比率 買われすぎ・売られすぎ
iMFI(既刊) 出来高込みの価格変化 出来高を考慮した買われすぎ・売られすぎ
iForce(既刊) 価格変化×出来高 値動きの勢い(ゼロクロス)
iBearsPower/iBullsPower(本記事) 高値・安値とEMAの差 EMA基準に対して買い方・売り方がどれだけ優勢か

他の指標が終値や出来高を主役にするのに対し、

この2指標は「高値・安値がEMAからどれだけ離れているか」

という、トレンドの基準線に対する優劣を直接測る点が特徴です。

ブルズパワーとベアーズパワーが2本セットである理由

ブルズパワーは買い方の勢い(高値がEMAをどれだけ上回っているか)、

ベアーズパワーは売り方の勢い(安値がEMAをどれだけ下回っているか)を示します。

Elder Rayの基本的な読み方
・ブルズパワーが0以下:高値がEMAに届いていない=買い方が劣勢
・ベアーズパワーが0以上:安値がEMAを下回っていない=売り方が劣勢
・片方だけでは「優勢側」しか分からず、両方見て初めて全体像が分かる

片方の指標だけを見ると判断を誤りやすいため、

本記事のインジケーターでは両方を同時に表示します。

iBearsPower/iBullsPower関数の引数と戻り値

公式リファレンス(MQL4 Reference: iBearsPower・iBullsPower)の内容を整理します。

5つの引数の意味(両関数共通)

double iBearsPower(
   string symbol,        // 通貨ペア名(NULLで現在のチャート)
   int    timeframe,     // 時間足(0で現在の時間足)
   int    period,        // EMAの平均化期間
   int    applied_price, // 適用価格(PRICE_CLOSE等)
   int    shift          // 何本前のバーの値を取得するか
);

double iBullsPower(
   string symbol,
   int    timeframe,
   int    period,
   int    applied_price,
   int    shift
);

関数名以外は完全に同じ並びのため、

どちらを呼んでいるかを変数名で分かりやすくしておくことを、

おすすめします。

MQL5版との違い: ハンドル化とapplied_price引数の廃止

MQL4の2関数は、値をdoubleで直接返します。

一方、MQL5のiBearsPower・iBullsPowerは、

値ではなくインジケーターのハンドル(int)を返すうえ、

applied_price引数自体が廃止されています。

MQL5移行時の注意
・MQL5版はハンドルを返すだけで、値そのものは返さない
・実際の値はCopyBuffer()で別途取得する必要がある
・引数はsymbol
・period
・ma_periodの3つだけに減り、applied_priceの指定ができない

既刊のMQL4→MQL5移行チェックリストで扱った「引数が減る」

パターンの中でも、

applied_priceそのものが無くなる点は、

この2関数特有の変化です。

サンプルインジケーター: 勢い負けの瞬間を検知する設計

2本のラインを表示したうえで、どちらかが0ラインを通過した瞬間だけ矢印で知らせます。

ブルズパワーが0以下に落ちた瞬間

高値がEMAに届かなくなった状態であり、

買い方の勢いが弱まったサインとして下向き矢印を出します。

ベアーズパワーが0以上に上がった瞬間

安値がEMAを下回らなくなった状態であり、

売り方の勢いが弱まったサインとして上向き矢印を出します。

シグナルの読み方の例
・上昇トレンド中にブルズパワーが0以下に落ちた:上昇の勢いが息切れしつつある
・下降トレンド中にベアーズパワーが0以上に上がった:下降の勢いが息切れしつつある
・いずれも単独のエントリー根拠にはせず、トレンド判定と組み合わせることをおすすめする

このインジケーターは「勢いが弱まった兆候」を示すものであり、

反転を保証するものではない点に注意してください。

実際に動くコード全体

実際にMetaEditorでコンパイルできる、

ブルズパワー・ベアーズパワーの2本ラインと、

勢い負け矢印を表示するインジケーターです。

//+------------------------------------------------------------------+
//|                                   BullsBearsPowerIndicator.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_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 DodgerBlue
#property indicator_color4 Magenta
#property indicator_width3 2
#property indicator_width4 2

input int InpPeriod       = 13;    //EMAの平均化期間
input int InpAppliedPrice = PRICE_CLOSE; //適用価格

double BullsBuffer[];
double BearsBuffer[];
double BullsWeakArrow[];
double BearsWeakArrow[];

int OnInit()
  {
   SetIndexBuffer(0, BullsBuffer);
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(1, BearsBuffer);
   SetIndexStyle(1, DRAW_LINE);

   SetIndexBuffer(2, BullsWeakArrow);
   SetIndexStyle(2, DRAW_ARROW, EMPTY, 2);
   SetIndexArrow(2, 242);
   SetIndexEmptyValue(2, EMPTY_VALUE);

   SetIndexBuffer(3, BearsWeakArrow);
   SetIndexStyle(3, DRAW_ARROW, EMPTY, 2);
   SetIndexArrow(3, 241);
   SetIndexEmptyValue(3, EMPTY_VALUE);

   IndicatorShortName("Bulls/Bears Power Weakness Detector");
   return(INIT_SUCCEEDED);
  }

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[])
  {
   int needed = InpPeriod + 10;
   if(rates_total < needed)
      return(0);

   int limit = (prev_calculated == 0) ? rates_total - needed : rates_total - prev_calculated + 1;

   for(int i = limit; i >= 0; i--)
     {
      double bulls = iBullsPower(NULL, 0, InpPeriod, InpAppliedPrice, i);
      double bears = iBearsPower(NULL, 0, InpPeriod, InpAppliedPrice, i);
      BullsBuffer[i] = bulls;
      BearsBuffer[i] = bears;

      BullsWeakArrow[i] = EMPTY_VALUE;
      BearsWeakArrow[i] = EMPTY_VALUE;

      if(i + 1 >= rates_total)
         continue;

      double prevBulls = iBullsPower(NULL, 0, InpPeriod, InpAppliedPrice, i + 1);
      double prevBears = iBearsPower(NULL, 0, InpPeriod, InpAppliedPrice, i + 1);

      bool bullsFellBelowZero = (prevBulls >= 0 && bulls < 0);
      bool bearsRoseAboveZero = (prevBears <= 0 && bears > 0);

      if(bullsFellBelowZero)
         BullsWeakArrow[i] = bulls - 0.0003;
      if(bearsRoseAboveZero)
         BearsWeakArrow[i] = bears + 0.0003;
     }

   return(rates_total);
  }

MetaEditorでのコンパイル・実行手順

実際にMT4で動かすまでの手順です。

  1. MetaEditorで新規インジケーター「BullsBearsPowerIndicator」を作成し、上のコードを貼り付けてコンパイルする
  2. エラー・警告が0件であることを確認する
  3. サブウィンドウに緑(ブルズパワー)と赤(ベアーズパワー)の2本ラインが表示されることを確認する
  4. ブルズパワーが0以下に落ちたバーに水色矢印が出ることを確認する
  5. ベアーズパワーが0以上に上がったバーにピンク矢印が出ることを確認する

よくあるエラーと注意点

実装でつまずきやすいポイントをまとめます。

ベアーズパワーの値が負であることを忘れる

ベアーズパワーは通常、マイナスの値を取ります。

「値が大きいほど売り方が強い」と誤解しないよう、「0に近づくほど、

または0を超えるほど売り方が弱い」という向きで読んでください。

2つの関数名を打ち間違える

iBullsPower(買い方)とiBearsPower(売り方)は、

スペルが似ているため、変数名を対応させてコード中で混同しないようにしてください。

MQL5移植時にapplied_price引数を書いてしまう

前述のとおり、MQL5版は引数にapplied_priceが無いため、

MQL4のコードをそのまま5引数で呼び出すとコンパイルエラーになります。

既刊のオシレーター系記事との使い分け

似た目的の記事が複数あるため、使い分けを整理します。

記事 使う値 用途
本記事(Bears/Bulls Power) 高値・安値とEMAの差 EMA基準に対する買い方・売り方の優劣
iRSI記事(既刊) 終値の上昇・下落幅の比率 買われすぎ・売られすぎの判定
iMFI記事(既刊) 出来高込みの価格変化 出来高を考慮した買われすぎ・売られすぎ

よくある質問

iBearsPower・iBullsPowerについて、よくある疑問に回答します。

ブルズパワーとベアーズパワー、どちらか1つだけ見てもいいですか?

目的に応じて片方だけ見ることもできますが、

買い方と売り方の全体像を把握するには、

両方を併用することをおすすめします。

本記事のインジケーターも最初から両方を表示する設計にしています。

このインジケーターをEAのフィルターに使えますか?

使えます。

0ライン通過の判定部分だけを関数化すれば、

既刊のクロス判定EA群と同じ要領で、

エントリー条件に組み込めます。

EMAの期間(InpPeriod)はどれくらいが適切ですか?

通貨ペアや時間足によって適切な値は変わります。

Elder自身は13期間を推奨しており、本記事でも既定値を13にしています。

【MQL4】iBearsPower・iBullsPower(ベアーズ/ブルズパワー)で買い方・売り方の「勢い負け」を検知するインジケーターの作り方:まとめ

iBearsPower・iBullsPowerは、

既刊iRSI・既刊iMFI・既刊iForceとは違い、

高値・安値とEMAの差で買い方・売り方の優劣そのものを測る関数です。

0ライン通過を検知することで、トレンドの勢いが弱まった兆候を、

買い方・売り方どちらの視点からも捉えられます。

MQL5では戻り値がハンドルに変わり、

applied_price引数も廃止される点に注意してください。

関連記事