English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
preview
Bulls Powerによる取引システムの設計方法を学ぶ

Bulls Powerによる取引システムの設計方法を学ぶ

MetaTrader 5トレーディング | 22 11月 2022, 10:59
395 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

この連載の新しい記事では、私たちの取引を強化するために有利に働く新しいテクニカルツールについて学びます。この記事で見るように、強気派の測定に関する洞察を得るために使用できるテクニカル指標の1つであるBulls Power指標について学びます。このテクニカル指標について、以下のトピックを通して詳しく学びます。

  1. Bulls Powerの定義
  2. Bulls Power戦略
  3. Bulls Power戦略の設計図
  4. Bulls Power取引システム
  5. 結論

Bulls Powerとは何か、何を測定する指標なのか、どのように手動で計算すればその主な概念を理解できるのか、そしてどのように読み取るのかは「Bulls Powerの定義」を通じて学ぶことができます。この指標の基本的な考え方を理解した上で、この指標をどのように利用するか、また、取引結果を向上させるための簡単な戦略について、「Bulls Power戦略」を通じて学んでいきます。その後、すべての戦略について、段階的に取引システムを設計していきますが、これは「Bulls Powerの戦略設計図」を通して学びます。次に、MetaTrader 5の取引プラットフォームでシグナルを実行することにより、シグナルを自動化するための取引システムを、言及したすべての戦略について作成します。

MetaTrader 5の取引ターミナルとMetaQuotes言語5(MQL5)を使用してコードを記述する予定です。MetaTrader 5をダウンロードしてMQL5を使用する方法については、以前の記事から「MetaEditorでMQL5のコードを書く」のトピックを読むと、より詳しく学ぶことができます。コーディング技術を向上させ、よく理解したいのであれば、読んだことを自分で適用することをお勧めします。

プログラミングの重要性は日々高まっており、この重要なツールを学ぶことの重要性を生み出しています。このプログラミングの重要性は、プログラミングの利点からくるもので、たくさんあります。取引におけるプログラミングの最も重要な利点は、自分が継続的におこなっていることを実行するためのプログラムをコーディングまたは作成すれば、時間を節約するのに役立ち、必要とするより正確な結果を得ることができ、取引結果に悪影響を与える可能性のある感情を回避するのに役立つということです。

免責条項:すべての情報は「現状有姿」で提供され、情報提供のみを目的としており、取引目的やアドバイスを目的としたものではありません。いかなる結果も保証するものではありません。読者がこれらの資料を自分の取引口座で使用する場合、自己責任でおこなってください。

さて、ここからは今回のトピックに入ります。

Bulls Powerの定義

このトピックでは、Bulls Power指標を詳しく確認し、その主な概念を理解することにします。Bulls Powerは、以前の「Bears Powerによる取引システムの設計方法を学ぶ」稿で紹介したBears Powerの逆です。Bulls Powerはアレキサンダー・エルダーが開発したもので、市場の強気度を測定するとともに、ブル(強気度)が弱くなるかどうかを見ることによって、ベア(弱気度)がゲームに加わったかどうかの指標にもなります。ゼロレベルの上下に振動するオシレーター指標です。つまり、この指標は、相場を動かす最も重要な要因は需要と供給であるという重要な見識も与えてくれるのです。

次に、この指標をどのように手動で計算する手順を確認します。

  • 高値(特定期間中の最高値)を取得する
  • 指数移動平均(Exponential Moving Average、EMA)を取得する
  • 高値と指数移動平均の差を取得を取得する

Bulls Power=高値-EMA

強気のブルが市場を支配しているとき、ほとんどの場合、市場はより高い値へと押し上げられ続けられるため、Bulls Powerの計算式には高値の値を使います。このBulls Powerを測定し、この高値とEMAの差を求め、先に述べたようにゼロレベルで振動するオシレーター指標を得るためにです。Bulls Powerの値がゼロレベルに近づいて以前より低くなった場合、ブルが弱くなっていることが分かります。

この記事で紹介した戦略の1つでおこなうのと同じように、この指標を他のトレンド系指標と併用するのはお勧めで、より効果的な洞察が得られます。この概念は非常に有用であり、テクニカル分析の有用な機能の1つです。多くの概念を用いることで、より多くの洞察を得、異なる視点から商品を見ることができ、これにより意思決定に重みが生まれます。

MetaTrader5では、この指標を手動で計算する必要はなく、[挿入] -->[インディケータ]-->[オシレーター]-->[Bulls Power]をチャートに挿入するだけです。これは、次の図からもわかります。

Bulls Powerの挿入

指標を選択すると、次のようなパラメータウィンドウが表示されます。

Bulls Powerパラメータ

1 - 計算に使用する期間を決定する。

2 - Bulls Powerのバーの色を決定する。

3 - Bulls Powerのバーの太さを決める。

これらのパラメータを決定し、[OK]を押すと、以下のようにチャートに指標が挿入されることがわかります。

Bulls Powerの接続

前のチャートで分かるように、チャートの下の部分にはBull Power指標が接続されています。すでに言及したようにそのバーはゼロの周りで振動します。ゼロを上回る値はブルがコントロールしていることを意味し、値がゼロに近づいて下回ると、ブルが弱くなったことが意味されます。ブルが弱くなると、ベアが勝負に出てきて、相場をコントロールして安値方向に押すか、少なくともブルとベアのバランスで相場が成り立っていることがわかります。

Bulls Power戦略

このセクションでは、この指標の基本的な考え方に基づいて使える簡単な戦略を通じて、Bulls Powerの使い方を学びます。以下は、これらの戦略とその条件です。ここで確認しておきたいのは、これらの戦略は、指標の背後にある主な概念とその使用方法を理解することが主な目的であるため、実際の口座で使用する前には、必ずテストして、自分の取引に適していることを確認する必要があるということです。万人向けの戦略などというものは存在しません。

    • 戦略1:Bulls Power Movement

      この戦略では、現在のBulls Power値と前回のBulls Power値の位置関係からシグナルを得る必要があります。現在のBulls Powerの値が前回を上回れば、Bulls Power指標の上昇シグナルと考えます。逆に、現在の値が以前の値を下回れば、Bulls Power下降シグナルと考えます。

      単純に言えば、以下のようになります。

      現在のBulls Power > 前回のBulls Power → Bulls Power上昇中

      現在のBulls Power < 前回のBulls Power → Bulls Powerが下降中

        • 戦略2:Bulls Power - Strong or Divergence

          この戦略では、現在の高値、前回の高値、Bulls Power 、前回のBulls Powerの4つの値を評価し、強い動きやダイバージェンスがあるかどうかを知らせるシグナルを得たいと思います。現在の高値が前回の高値を上回り、現在のBulls Power値が前回を上回れば、強い動きのシグナルと判断します。一方、現在の高値が前回の高値を上回り、現在のBulls Powerが前回のBulls Power値を下回れは、弱気のダイバージェンスのシグナルと考えることにします。

          単純に言えば、以下のようになります。

          現在の高値 > 前回の高値かつ現在のBulls Power > 前回のBulls Power → 強い動き

          現在の高値 < 前回の高値かつ現在のBulls Power > 前回のBulls Power → 弱気ダイバージェンス

            • 戦略3:Bull's Power Signals

              この戦略では、売買シグナルが必要であり、そのための4つの値を評価することになります。この4つの値とは、現在のBulls Power、ゼロレベル、現在の終値、現在の指数移動平均のことです。現在のBulls Powerがゼロレベルを下回り、現在の終値が指数移動平均線を下回れば、売りのシグナルと判断することになります。現在のBulls Powerがゼロレベルを上回り、現在の終値が指数移動平均線を上回れば、買いのシグナルとなります。

              単純に言えば、以下のようになります。

              現在のBulls Power < ゼロレベルかつ現在の終値 < EMA → 売り

              現在のBulls Power > ゼロレベルかつ現在の終値 > EMA → 買い

              Bulls Power戦略の設計図

              このトピックでは、アイデアを整理した後に簡単かつスムーズに取引システムを作成できるよう、言及したすべての戦略について、ステップバイステップの設計図を作成します。

              • 戦略1:Bulls Power Movement

              コンピュータは、ティックごとに現在のBulls Powerと前回のBulls Powerの2つの値を確認する必要がありますが、これはこれらの値を確実に作成した後になります。この値を確認して、すべての位置を把握するプログラムが必要になります。現在のBulls Power値が前回のBulls Powerを上回れば、プログラムかエキスパートアドバイザー(EA)が次のようなコメントのシグナルをチャートに返す必要があります(値ごとに改行)。

              • Bulls Powerが上昇中
              • Bulls Power値
              • 前回のBulls Power値

              もう1つ、考えておかなければならないシナリオがあります。現在のBulls Power値が以前回のBulls Power値を下回る場合、EAは、次の値をコメントとして返す必要があります(値ごとに改行)。

              • Bulls Powerが下降中
              • Bulls Power値
              • 前回のBulls Power値

              以下は、この取引システムの戦略に基づいた簡単な設計図です。

              Bulls Power Movementの設計図

              • 戦略2:Bulls Power - Strong or Divergence

              この戦略では、現在の高値、前回の高値、現在のBulls Power 、前回のBulls Powerの4つの値を確認する必要があります。その後、取引システムは、現在の高値が前回の値を上回るかどうかを判断すると同時に現在のBulls Power値が前回のBulls Power値を上回った場合ば、以下の値をチャート上のコメントとして、シグナルを返す必要があります。

              • 強い動き
              • 現在の高値
              • 前回の高値
              • 現在のBulls Power値
              • 前回のBulls Power値

              一方、現在の高値が前回を上回り、同時に現在のBulls Powerの値が前回を下回る場合、取引システムは、以下の値をチャート上のコメントとして、シグナルを返す必要があります(値ごとに改行)。

              • 弱気ダイバージェンス
              • 現在の高値
              • 前回の高値
              • 現在のBulls Power値
              • 前回のBulls Power値

              以下は、この戦略に基づいた取引システムを作るための、視覚的にわかりやすい形での設計図です。

                 Bulls Power - Strong or Divergence

              • 戦略3:Bulls Power Signals

              この戦略では、現在のBulls Power、ゼロレベル、現在の終値、現在の指数移動平均の4つの値をティックごとに確認する取引システムを作る必要があります。その後、現在のBulls Powerがゼロレベルを下回ると同時に現在の終値が指数移動平均を下回るかどうかを判断し、EAが以下の値のシグナルをチャートのコメントとして返す必要があります(値ごとに改行)。

              • 売りシグナル
              • 現在の終値
              • 現在のEMA値
              • 現在のBulls Power値

              他のケースでは、現在のBulls Powerがゼロを上回ると同時に現在の終値が指数移動平均を上回る場合、取引システムはシグナルを以下の値を持つコメントとして返す必要があります(値ごとに改行)。

              • 買いシグナル
              • 現在の終値
              • 現在のEMA値
              • 現在のBulls Power値

              この戦略に基づいた取引システムを作るために、アイデアを整理するための簡単なステップバイステップの設計図を紹介します。

              Bulls Power Signalsの設計図

              Bulls Power取引システム

              このトピックでは、言及されている各戦略の取引システムの作成方法を学びますが、まずは、すべての戦略のベースとなる、チャート上に現在のBulls Powerの値を自動的にコメントとして生成できる、簡単な取引システムを作成することにします。

              以下は、この取引システムの作成方法のコードです。

              手順1:double型のbullpower配列を作成します。

              double bullpowerArray[];

              ステップ2:この作成した配列をArraySetAsSeries関数で並び替えて、ブール値を返します。

              ArraySetAsSeries(bullpowerArray,true);

              手順3:bullpowerDef という整数の変数を作成し、iBullsPower関数で指標のハンドルを返すことで、Bulls Power指標を定義することにします。そのパラメータは次の通りです。

              symbol:現在の銘柄に適用される_Symbolを使用

              period:(_Period)を使用して、現在の期間または時間枠に適用

              ma_period:使用可能な移動平均の長さ(13を使用)

              int bullpowerDef = iBullsPower(_Symbol,_Period,13);

              手順4:Bulls Power指標ーのデータを取得し、CopyBuffer関数を使って作成した配列に入力していきます。この関数のパラメータは次の通りです。

              indicator_handle: 指標ハンドル(bullpowerDefを使用)     

              buffer_num:指標バッファの番号(0を使用)

              start_pos:開始位置(0を使用)         

              count:コピーする量(3を使用)                

              buffer[]:コピー先の配列(bullpowerArrayを使用)

              CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);

              手順5:NormalizeDouble関数で変数を作成後、double型の値を返すbullpowerValを定義します。この関数のパラメータは次の通りです。

              value:正規化した数値(bullpowerArray[0]を使用)

              digit:小数点以下の桁数(6を使用)

              double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);

              手順6:comment関数を使って、現在のBulls Power値をチャートにコメントとして生成します。

              Comment("Bull's Power Value is ",bullpowerVal);

              以下は、前回の手順の全コードです。

              //+------------------------------------------------------------------+
              //|                                          Simple Bull's Power.mq5 |
              //|                                  Copyright 2022, MetaQuotes Ltd. |
              //|                                             https://www.mql5.com |
              //+------------------------------------------------------------------+
              #property copyright "Copyright 2022, MetaQuotes Ltd."
              #property link      "https://www.mql5.com"
              #property version   "1.00"
              //+------------------------------------------------------------------+
              void OnTick()
                {
                 double bullpowerArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
              
                 Comment("Bull's Power Value is ",bullpowerVal);
              
                }
              //+------------------------------------------------------------------+

              このコードをコンパイルすると、このコードのEAがナビゲータウィンドウに下図のように表示されます。

               Bulls Power Nav

              このSimple Bulls PowerをダブルクリックしてMetaTrader 5のターミナルで実行すると、以下のようなウィンドウが表示されます。

              Simple Bulls Powerウィンドウ

              [OK]を押すと、下図のようにEAがチャートに接続されているのがわかります。

               Simple Bulls Powerの接続

              先のチャートでわかるように、EAがチャートの右上に接続されています。これで、次のテスト例と同じように、チャート上に更新された現在のBulls Power値を持つコメントを自動に受け取る準備が整いました。 

               Simple Bulls Powerのシグナル

              左上の前チャートでわかるように、現在のBulls Power値がコメントになっています。

              • 戦略1:Bulls Power Movement

              以下は、この戦略の取引システムを作成するための完全なコードです。

              //+------------------------------------------------------------------+
              //|                                         Bulls Power Movement.mq5 |
              //|                                  Copyright 2022, MetaQuotes Ltd. |
              //|                                             https://www.mql5.com |
              //+------------------------------------------------------------------+
              #property copyright "Copyright 2022, MetaQuotes Ltd."
              #property link      "https://www.mql5.com"
              #property version   "1.00"
              //+------------------------------------------------------------------+
              void OnTick()
                {
                 double bullpowerArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              
                 if(bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Bull's Power is rising","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              
                 if(bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bull's Power is declining","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
                }
              //+------------------------------------------------------------------+

              このコードの違いは、次の通りとなります。

              現在のBulls Power値「bullpowerVal」、前回のBulls Power値「bullpowerPrevVal」を定義します。

                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);

              戦略の条件は次の通りです。

              上昇の場合:

                 if(bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Bull's Power is rising","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }

              下降の場合:

                 if(bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bull's Power is declining","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }

              コンパイルすると、ナビゲータウィンドウにEAが表示されるようになります。

               Bulls Power Nav

              これを目的のチャートにドラッグ&ドロップすると、次のようなウィンドウが表示されます。

               Bulls Power Movementウィンドウ

              [OK]を押すと、EAがチャートに接続されます。

              Bulls Power Movementの接続

              先ほどのチャートにあるように、EAがすでにチャートの右上に接続されており、次のようにシグナルを取得する準備が整っている状態です。

              現在のデータで上昇した場合:

              Bulls Power Movement - 上昇 - 現在のデータ

              前のチャートの上部にあるように、上昇シグナル、現在のBulls Power値、前回のBulls Power値が表示されています。データウィンドウでは、Bulls Powerの現在値を知ることができます。

              前回のデータで上昇した場合:

              Bulls Power Movement - 上昇 - 前回のデータ

              前のチャートで見たように、データウィンドウには前回のBulls Power値が表示されるという違いがあります。

              現在のデータで下降した場合:

              Bulls Power Movement - 下降 - 現在のデータ

              前チャートの上部でわかるように、下落シグナル、現在のBulls Power値、前回のBulls Power値が表示されています。データウィンドウでは、Bulls Powerの現在値を知ることができます。

              前回のデータで下降した場合:

              Bulls Power Movement - 下降 - 前回のデータ

              前のチャートで見たように、データウィンドウに前回のBulls Power値が表示されるという唯一の違いがあります。

              • 戦略2: Bulls Power - Strong or Divergence

              以下は、この戦略の取引システムを作成するための完全なコードです。

              //+------------------------------------------------------------------+
              //|                          Bull's Power - Strong or Divergence.mq5 |
              //|                                  Copyright 2022, MetaQuotes Ltd. |
              //|                                             https://www.mql5.com |
              //+------------------------------------------------------------------+
              #property copyright "Copyright 2022, MetaQuotes Ltd."
              #property link      "https://www.mql5.com"
              #property version   "1.00"
              //+------------------------------------------------------------------+
              void OnTick()
                {
                 double bullpowerArray[];
                 MqlRates priceArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              
                 double currentHighVal=NormalizeDouble(priceArray[2].high,6);
                 double prevHighVal=NormalizeDouble(priceArray[1].high,6);
              
                 if(currentHighVal>prevHighVal && bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Strong Move","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              
                 if(currentHighVal>prevHighVal && bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bearish divergence","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
                }
              //+------------------------------------------------------------------+

              このコードの違いは、次のとおりとなります。

              bullpowerArrayとpriceArrayの2つの配列を作成します。

                 double bullpowerArray[];
                 MqlRates priceArray[];

              作成した配列の並び替えについては、bullpowerArrayには前回と同様にArraySetAsSeries関数を使用します。priceArrayについては、MqlRatesの履歴データを取得するCopyRates関数を使用します。そのパラメータは次の通りです。

              • 銘柄名:_Symbolを使用
              • timeframe:_Periodを使用
              • 開始時間:0を使用
              • 停止時間:3を使用
              • レート配列:priceArrayを使用
                 ArraySetAsSeries(bullpowerArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

              NormalizeDouble関数によってBullss Powerと高値の現在値と前回値を定義します。

                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              
                 double currentHighVal=NormalizeDouble(priceArray[2].high,6);
                 double prevHighVal=NormalizeDouble(priceArray[1].high,6);

              戦略の条件は次の通りです。

              強い動きの場合

                 if(currentHighVal>prevHighVal && bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Strong Move","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }

              弱気ダイバージェンスの場合

                 if(currentHighVal>prevHighVal && bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bearish divergence","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }

              このコードをコンパイルした後、ナビゲータウィンドウでこの取引システムのEAを見つけることができます。

              Bulls Power Nav2

              このEAをダブルクリックして実行すると、次のようなウィンドウが表示されます。

               Bulls Power - Strong or Divergenceのウィンドウ

              [OK]を押すと、以下のようにEAが接続されていることがわかります。

               Bulls Power - Strong or Divergenceの接続

              右上にEAが接続され、そのシグナルを受信する準備ができたことがわかるように、次のようにします。

              現在のデータでの強い動きの場合:

              Bulls Power - Strong or Divergence - 強力 - 現在のデータ

              チャートを見てわかるように、この戦略に基づいた希望通りのシグナルが、次の値のコメントとともに表示されています。

              • 強い動き
              • 現在の高値
              • 前回の高値
              • 現在のBulls Power値
              • 前回のBulls Power値 

              過去のデータで強い場合:

               Bulls Power - Strong or Divergence - 強力 - 前回のデータ

              前のチャートで見たように、同じ値を持つチャート上にシグナルと同じコメントがありますが、違いは前回のデータウィンドウだということです。

              現在のデータウィンドウでの弱気ダイバージェンス

              Bulls Power - Strong or Divergence - 弱気のダイバージェンス - 現在のデータ

              先ほどのチャートでわかるように、以下の値がチャートにコメントとされています。

              • 弱気のダイバージェンス
              • 現在の高値
              • 前回の高値
              • 現在のBulls Power値
              • 前回のBulls Power値  

              前回のデータと弱気ダイバージェンスがある場合

               Bulls Power - Strong or Divergence - 弱気のダイバージェンス - 前回のデータ

              前のチャートで見たように、同じ値でチャート上にコメントがありますが、ここにあるのは前回ののデータウィンドウです。

              • 戦略3:Bulls Power Signals

              以下は、この戦略の取引システムを作成するための完全なコードです。

              //+------------------------------------------------------------------+
              //|                                         Bulls' Power signals.mq5 |
              //|                                  Copyright 2022, MetaQuotes Ltd. |
              //|                                             https://www.mql5.com |
              //+------------------------------------------------------------------+
              #property copyright "Copyright 2022, MetaQuotes Ltd."
              #property link      "https://www.mql5.com"
              #property version   "1.00"
              //+------------------------------------------------------------------+
              void OnTick()
                {
                 double bullpowerArray[];
                 double maArray[];
                 MqlRates priceArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
                 ArraySetAsSeries(maArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
                 int maDef = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
                 CopyBuffer(maDef,0,0,3,maArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
              
                 double emaVal = NormalizeDouble(maArray[0],6);
              
                 double currentClose=NormalizeDouble(priceArray[2].close,6);
              
                 if(bullpowerVal<0 && currentClose<emaVal)
                   {
                    Comment("Sell Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }
              
                 if(bullpowerVal>0 && currentClose>emaVal)
                   {
                    Comment("Buy Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }
                }
              //+------------------------------------------------------------------+

              このコードの違いは次の通りです。

              bullpowerArray、maArray、priceArrayの3つの配列を作成します。

                 double bullpowerArray[];
                 double maArray[];
                 MqlRates priceArray[];

              これら3つの作成した配列を並べ替えます。

                 ArraySetAsSeries(bullpowerArray,true);
                 ArraySetAsSeries(maArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

              Bulls Power指標は、先ほどと同じようにbullpowerDefという整数型の変数を作成した後にiBullsPowerで、移動平均指標は maDefという整数型の変数を作成した後に移動平均のハンドルを返す関数iMAで定義することになります。

                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
                 int maDef = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);

              CopyBuffer関数で配列に入力して、Bulls Powerと移動平均の指標からデータを取得します。

                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
                 CopyBuffer(maDef,0,0,3,maArray);

              現在のBulls Power、指数移動平均、現在の終値を定義していきます。

                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double emaVal = NormalizeDouble(maArray[0],6);
                 double currentClose=NormalizeDouble(priceArray[2].close,6);

              この戦略の条件は次の通りです。

              売りシグナルの場合

                 if(bullpowerVal<0 && currentClose<emaVal)
                   {
                    Comment("Sell Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }

              買いシグナルの場合

                 if(bullpowerVal>0 && currentClose>emaVal)
                   {
                    Comment("Buy Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }

              このコードをコンパイルすると、EAナビゲータウィンドウに以下のように表示されます。

              Bulls Power Nav3

              チャート上でEAをダブルクリックして実行すると、以下のようなウィンドウが表示されます。

               Bulls Power Signalsウィンドウ

              [OK]を押すと、下図のようにEAがチャートに接続されていることがわかります。

              Bulls Power Signalsの接続

              チャートの右上にBulls Power Signalsが接続しているのがわかります。以下のように、この取引戦略に基づくシグナルを受信する準備が整います。

              売りシグナルの場合

               Bulls Power Signals - 売り

              チャートを見るとわかるように、次のような値を持つコメントがあります。

              • 売りシグナル
              • 現在の終値
              • 現在のEMA値
              • Bulls Power値

              買いシグナルの場合

               Bulls Power Signals - 買い

              チャート上で見ることができるように、チャート上に目的のシグナルが以下の値をもつコメントとして表示されます。

              • 買いシグナル
              • 現在の終値
              • 現在のEMA値
              • Bulls Power値

              前回までに、それぞれの戦略について、自動シグナルを生成するための取引システムを作成しました。

              結論

              これまでのトピックスを通じて、この指標をカバーできたと思います。Bulls Power指標とは何か、何を計測するのか、どのように計算するのか、MetaTrader5内蔵のBears Power指標をどのように挿入し使用するのかを「Bulls Powerの定義」を通してより詳しく学びました。この指標を詳しく理解した後、指標の背後にある基本的な考えに基づいて、指標の使用方法を学びました。これらの戦略の基本的な目的は、この指標の使用方法を学ぶことです。実際の口座で使用する前には、テストして、ご自分に適していて、それらによって利益を生成できることを確認する必要があります。これらの戦略は、次のようなものでした。

              • Bulls Power Movement:この戦略は、Bulls Power指標が上昇中か下降中かを判断するために使用
              • Bulls Power Strong or Divergence:強い動きか弱気のダイバージェンスかを判断するために使用
              • Bulls Power Signals:売買のシグナルを出す

              その後、各戦略ごとにステップバイステップの設計図を作成し、この設計図を通じて考えを整理した上で、スムーズに取引システムを構築できるようにしました。そして、MQL5上でコーディングした後、自動的にシグナルを取得し、MetaTrader5の取引ターミナルで実行されるように、言及されたすべての戦略の取引システムを作成する方法を学びました。コーディング技術を向上させたい場合は、紹介されたコードを自分で書いて適用してみてください。プログラマーとしての学習効果を高め、向上することができるでしょう。

              この記事が読者の取引を強化し、取引結果を向上させるために役立つことを願っています。最も人気のあるテクニカル指標に基づいて取引システムを設計する方法を学び、より多くの同様の記事を読みたい場合は、本連載の他の記事をお読みください。これらの記事では、多くのテクニカル指標の背後にある基本的な概念に基づいて、単純な戦略を通じて、それらに基づいて取引システムを設計しています。

              MetaQuotes Ltdにより英語から翻訳されました。
              元の記事: https://www.mql5.com/en/articles/11327

              MQL5での行列およびベクトル演算 MQL5での行列およびベクトル演算
              行列とベクトルがMQL5に導入され、数学的な解決策による効率的な操作が可能になりました。これらの新しい型は、数学表記に近い簡潔でわかりやすいコードを作成するための組み込みメソッドを提供します。配列は広範な機能を提供しますが、行列の方がはるかに効率的である場合が多くあります。
              DoEasy-コントロール(第15部):TabControl WinFormsオブジェクト — 複数行のタブヘッダー、タブ処理メソッド DoEasy-コントロール(第15部):TabControl WinFormsオブジェクト — 複数行のタブヘッダー、タブ処理メソッド
              この記事では、TabControl WinFormオブジェクトの作業を続けます。タブフィールドオブジェクトクラスを作成して複数の行にタブヘッダーを配置できるようにし、オブジェクトタブを処理するメソッドを追加します。
              一からの取引エキスパートアドバイザーの開発(第28部):未来に向かって(III) 一からの取引エキスパートアドバイザーの開発(第28部):未来に向かって(III)
              私たちの発注システムが対応できていないタスクがまだ1つありますが、最終的に解決する予定です。MetaTrader 5は、注文値の作成と修正を可能にするチケットのシステムを備えています。アイデアは、同じチケットシステムをより高速かつ効率的にするエキスパートアドバイザー(EA)を持つことです。
              ニューラルネットワークが簡単に(第24部):転移学習用ツールの改善 ニューラルネットワークが簡単に(第24部):転移学習用ツールの改善
              前回の記事では、ニューラルネットワークのアーキテクチャを作成および編集するためのツールを作成しました。今日はこのツールでの作業を続けて、より使いやすくします。これは、私たちのトピックから一歩離れていると思われるかもしれませんが、うまく整理されたワークスペースは、結果を達成する上で重要な役割を果たすと思われないでしょうか。