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

ボリンジャーバンドによる取引システムの設計方法を学ぶ

MetaTrader 5トレーディング | 23 5月 2022, 10:22
1 933 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

取引の世界には、取引の目標を達成するために有利に使用できる多くのツールと方法があります。これらのツールは、市場の状況や状態に応じて使用できます。 

そのような方法の1つは変動幅です。変動幅の主な概念は、決定されたバンドから利益を得るために売買する2つのバンド間で取引することです。これらのツールの1つは、ボリンジャーバンド指標です。この指標は、テクニカル分析と取引の世界で最も人気のある、または最も一般的に使用されている指標の1つです。

この記事では、このボリンジャーバンド指標に関する情報を共有して、それが何であるか、どのように計算するか、どのように使用できるかについての理解を深めます。その後、自分のストラテジーに従って好きなように使うことができるでしょう。次に、このボリンジャーバンド指標を正確かつ簡単に使用して取引システムを設計する方法を紹介します。次のトピックについて説明します。

    1. ボリンジャーバンドの定義
    2. ボリンジャーバンドのストラテジー
    3. ボリンジャーバンドストラテジーのシステム設計
    4. 終わりに
    5. 参照資料

      ボリンジャーバンドについて学習するとき、それはその平均の周りのデータの分散を測定します。この指標は、ジョンボリンジャーによって作成されました。これは、平均(20日移動平均)周辺のデータ(価格)の分散を測定するために、20日移動平均を囲む2つのバンドで構成されています。 

      ボリンジャーバンド指標には価格を囲む2つのバンドがあるため、エンベロープ指標と同じように見える場合があります。しかしこれは正しくありません。ボリンジャーバンドとエンベロープの違いは、ボリンジャーバンド指標が移動平均を超えて一定の割合で配置されていないが、その計算により、ボリンジャーバンド指標は移動平均の標準偏差に従って拡大または縮小することができるということです。これとその他の詳細については、ボリンジャーバンドの定義のセクションまたはトピックで学習します。

      また、ボリンジャーバンドのいくつかのストラテジーを通じて、ボリンジャーバンドを表現し、取引に有益な方法で使用する方法についても学びます。これは、ボリンジャーバンドのストラテジーのセクションに記載されています。

      次に、この記事の最も興味深い部分に移ります。アルゴリズム取引システムでこれらのストラテジーを正確かつ信頼できる方法で使用する方法です。これは、ボリンジャーバンドストラテジーの青写真とボリンジャーバンドストラテジーシステムの設計のセクションで学習します。


      次に注意してください。 
      • この記事のすべてのコードはMQL5で書かれ、MetaTrader 5で実行されます。
      • 練習して学習を強化したい場合は、自分でコードを記述して実行することをお勧めします。
      • コードを実行するにはMetaTrader 5ターミナルが必要であり、コードを書き込むにはMQL5のMetaEditorが必要です。次の図で説明します。

      MetaTrader 5をダウンロードしてデバイスにインストールした後、MetaEditorをhttps://www.MetaTrader 5.com/ja/downloadのリンクからダウンロードします。その後、MetaTrader 5ウィンドウは次の図のようになります。

      MT5プラットフォーム


      MetaEditorを開くには、MetaTrader 5ターミナルが開いているときにF4キーを押すか、[ツール]タブからMetaQuotes言語エディタを選択することができます。次の写真は、MetaEditorを開いてMetaTrader 5からコードを書く方法を示しています。

      MetaEditorを開く1


      MetaEditorを開く2

      次の図は、開いているMetaEditorウィンドウを示しています。 

      MetaEditor ウィンドウ


      次の図は、コードを記述するための新しいファイルを作成する方法を示しています。

      MetaEditor - 新規ファイル

      1. 新しいファイルを開いてエキスパートアドバイザーを作成します
      2. 新しいファイルを開いてカスタムインジケータを作成します
      3. 新しいファイルを開いてスクリプトを作成します

      詳細については、https://www.mql5.com/ja/articles/10293から私の以前の記事をご覧ください。

      事あるごとに言っていますが、プログラミングやコーディングは、自動的に実行される正確なアクションで生活を簡単かつスムーズにすることができる素晴らしいツールです。重要な目的は、この種の分野に投資して、人生のさまざまな分野で望ましい目標を生み出すために適切な方法でそれを使用する方法を学ぶことです。
      取引に関しては、好きなときにいつでもコンピュータに自分のやりたいことをするように指示し、コンピュータに反対されずに自分のやりたいことを正確に実行させながら、自分は他のことをやっていられることで、人生がいかに簡単で楽しいものになるかを想像する必要があります。 それは素晴らしいライフスタイルなので、自分でコーディングするにしても他の人に任せたりしても、このコーディングやプログラミングに適切な方法で興味を持ってもらうことが重要な目的になります。

      免責条項

      この記事のすべてのコンテンツは、教育を目的として作成されたものであり、他の目的のために作成されたものではありません。この記事の内容はいかなる種類の結果も保証するものではないため、この記事の内容に基づいて行うすべてのアクションは自己責任となります。

      それでは、この興味深いトピックと指標について詳しく知るために、記事のセクションを見ていきましょう。

      ボリンジャーバンドの定義

      変動幅のアイデアの歴史は長く興味深いものであり、多くの方法で利用されています。変動幅は、主に、ある程度の傾向の上下にバンドを構築することに基づいています。 

      たとえば、それ自体またはエンベロープの割合だけ上下にシフトされた移動平均を使用できます。また、反転のポイントを検出するために価格の上下に2本の平行線があるチャネルがありますが、これらの方法はすべて固定されており、価格の動きに応じて反応しません。言い換えれば、それらは価格変動に伴って拡大または縮小しません。

      ボリンジャーバンドは、その特定の計算のためにそれを行うことができます。この部分では、指標計算の詳細を説明します。

      次の図は、エンベロープ指標の例と、それが価格にどのように表示されるかを示しています。

      EURUSDH1 - エンベロープ

      前の図でわかるように、2つのバンドが価格を囲んでいます。下のバンドは下から価格を囲み、上のバンドは上から価格を囲みます。したがって、ここで知っておく必要のある主なアイデアは、履歴からの変動幅に基づく方法がたくさんあり、最も一般的なのは割合のバンドであるということです。 

      変動幅のアイデアにも多くの進展があります。これらの開発の1つは、変動幅による取引に使用されるボリンジャーバンド指標で、計算によって拡張および縮小できることが前述の方法とは異なります。

      ボリンジャーバンド指標は、1980年代初頭に、金融市場と取引の分野で人気のある専門家の1人であるジョン・ボリンジャーによって作成されました。彼はCFA(CFA協会認定証券アナリスト)およびCMT(CMT協会認定マーケットテクニシャン)です。

      ボリンジャーバンド指標は人気のあるテクニカル指標で、ボラティリティを測定し、市況に応じて拡大および縮小し、株式、外国為替などのすべての金融市場で使用できます。では、ボリンジャーバンドの構築について説明しましょう。

      変動幅の概念の前に、中心傾向の測定から始めます。次に、この測定値の上下にバンドを作成します。ボリンジャーバンド指標の場合、中心傾向の測定値は単純移動平均であり、間隔は移動標準偏差のボラティリティの測定値によって決定されます。

      ボリンジャーバンド指標については次のことが言えます。

      • 平均値(移動平均)周辺のデータの分散を測定する
      • ボラティリティ指標
      • ボリンジャーバンドとエンベロープ、または任意の割合の変動幅方式の違いは、移動平均の上下に特定の割合の移動平均があるがボリンジャーバンドは移動平均の標準偏差であること
      • ボラティリティが上がるとバンドは自動的に広がり、ボラティリティが下がるとバンドは縮むため、それらの動的な性質により、標準設定でさまざまな証券に使用できる
      • 取引の開始点と終了点を決定するために使用される取引ツール
      • バンドは、買われ過ぎや売られ過ぎの状態を判断するためによく使用される
      • M-TopsとW-Bottomsを識別したり、トレンドの強さを判断したりするために使用できる
      以下の式は、ボリンジャーバンドの計算方法を示しています。

      BB計算

      ボリンジャーバンドの計算例を見てみましょう。
        次の表のように、20取引日の終値があるとします。
             日番号   
             終値$  
          1 20
          2 30
          3 35
           4 30 
           5 40 
          6 45
          7 50
          8 55
          9 40
          10 45
          11 50
          12 35
          13 40
          14 50
          15 60
          16 65
          17 70
          18 60
          19 70
          20 75

          BB計算

          したがって、ボリンジャーバンドの計算は次のようになります。

             BB計算例


            BB計算例1


            設定の調整

            ボリンジャーバンドの設定を他の方法で調整してストラテジーや取引計画に採用できるかどうかを尋ねられた場合、特にこれらの調整がテストされて良好な結果が得られた場合にはできると言えます。また、ボリンジャーが標準偏差乗数を微調整することを推奨していることも知っておく必要があります。それに、移動平均の期間を変更すると、標準偏差の計算に使用される期間に影響することを知っておく必要があります。ボリンジャーはまた、50期間の単純移動平均を使用する場合は標準偏差の乗数を2.1に増やし、10期間の単純移動平均を使用する場合は1.9に減らすことを提案しています。 

            現在の世界では、指標が用意されており、MetaTrader 5に組み込まれているため、手動で計算する必要はありません。次の画像は、それを追加する方法、またはチャートに指標を添付する方法を示しています。MetaTrader 5の[挿入]メニューを選択します。

            1 - BB指標の挿入

            次に、[インジケータ]、[トレンド]、[ボリンジャーバンド]の順に選択します。

            2 - BB指標の挿入

            ボリンジャーバンド指標を選択すると、指標ウィンドウのパラメータが表示されます。指標のデフォルトパラメーターが表示されます。次の調整可能なパラメータがあります。

            1. 移動平均の期間を選択する期間

            2. 上下のバンドの偏差パラメータを選択するための偏差

            3. 変化とトレンドを伴うEURUSD クオート(定数)適用先: 適用されるパラメータの種類(終値、始値、高値、安値、中央値、標準価格、加重終値)を選択

            4. スタイル: 指標のスタイル(指標の線の色、形状、幅)を選択

            5. シフト: 指標にシフトを適用する値を設定

            前に述べたように、トレーダーの入力とストラテジーに従ってこれらの設定を調整することができます。


            3 - BBパラメータ

            これで、価格チャートにボリンジャーバンドの指標が表示され、次の図のように表示されます。


            EURUSDH1 - BB


            前の写真でわかるように、2つのバンド(ボリンジャーバンド)の下位線で囲まれた価格は移動平均(平均)を下回り、価格と上位線は移動平均(平均)と価格を上回っています。 

            ボリンジャーバンドのストラテジー

            ここでは、ボリンジャーバンドのストラテジーについて説明し、それを有益な方法で使用する方法を学びます。<分節10659¶>

            ボリンジャーバンドは、さまざまな市況やさまざまな市場の動きで使用でき、上昇トレンド、下降トレンド、および横ばいで使用できます。あらゆる市場の状況で、使用できる多くのストラテジーがあるので、ここではそれらのいくつかに言及します。

            • 上昇トレンド中

            まず、上昇トレンド中に価格が平均(移動平均)を超えて移動することがわかるため、移動平均を使用して上昇トレンド中に価格がどのように移動するかを理解する必要があります。

            上昇トレンドの間、ほとんどの場合、価格は移動平均と上位線の間を移動することがわかります。購入者からのコントロールがあるので、安値と高値がより高くなるためです。

            上昇トレンド

            上昇トレンド


            ここでボリンジャーバンドで価格が移動平均と上位線の間を移動していることがわかるため、この上昇トレンドを特定するのに役立ちます。次の図はその一例です。はっきりとわかるように、グリーンゾーンの価格は上昇トレンド中に移動し、移動平均と上位バンドの間を移動します。

            EURUSDWeekly - BBと上昇トレンド

            ここで言及するストラテジーは、次のことを行う必要があるということです。
            • 価格が移動平均を上回るときに買います。ターゲットは上位線になります。
              • 価格 > MA = 買、上位線 = ターゲット

            EURUSDWeekly - BB上昇ストラテジー

            • 下降トレンド中

            まず、移動平均を使用して下降トレンド中に価格がどのように移動するかを理解する必要があります。価格が下降トレンド中に平均(移動平均)を下回ることがほとんどであるため、

            下降トレンドの間、ほとんどの場合、価格は移動平均と低域の間を移動することがわかります。これは、販売者が市場を支配し、価格が下落するにつれて、高値と安値が下がることを意味します。

            下降トレンド

            下降トレンド

            ここでボリンジャーバンドは、価格が移動平均と下位線の間を移動していることがわかるため、この下降トレンドを特定するのに役立ちます。次の図はその一例であり、レッドゾーンの価格が下降トレンドで移動し、移動平均と下位線の間を移動していることがはっきりとわかります。

            EURUSDDaily - BBと下降トレンド

            ここで言及するストラテジーは、次のことを行う必要があるということです。
            • 価格が移動平均を下回るとショートします。ターゲットは下位線になります。
              • 価格 < MA = ショート、下位線 = ターゲット

            EURUSDDaily - BB下降ストラテジー

            • 横ばい

            横ばいは上昇トレンドと下降トレンド以外の動きであることがわかるため、まず横ばいの価格がどのように動くかを理解する必要があります。

            横ばいでは、買い手と売り手の一方からの市場の完全な制御がないため、買い手と売り手の間のバランスを示しています。次の図は、いくつかの横ばいの動きの例です。

            横ばい1

            横ばい2

            横ばい3

            横ばい4

            以下は、グリーンゾーンの価格が上下への明確な方向性なしに横ばいに移動していることがはっきりとわかる、横ばいの実際の例です。

             横ばい 


            前の図は横ばいの動きの例であり、私が述べた以上のものがありますが、横ばいの動きの概念は、上昇トレンドと下降トレンドを除くすべての動きです。


            ここで、価格は移動平均を尊重せず、移動平均が上下に交差するため、横ばいの移動が移動平均でどのように機能するかを知る必要があります。次の図はその一例です。

             MAと横ばい

            では、ボリンジャーバンド指標で価格をどのように動かすことができるのでしょうか。価格は下位線と上位線の間を移動します。次の図はその一例です。

            GBPUSD1H - BBと横ばい

            価格が下位線と上位線の間を移動することがわかっていることによると、ここでの横ばいのストラテジーは、下位線で購入してターゲットを上位線にするか、上位線をショートしてターゲットを下位線にすることです。
            • 下位線の価格 = 買、上位線の価格 = ターゲット
            • 上位線の価格 = 買、下位線の価格 = ターゲット

            GBPUSD1H - BBと横ばいストラテジー


            前の写真:
            • 下位線で買って、上位線で利益を得ることができます。
            • 上位線で売って、下位線で利益を得ることができます。

            ボリンジャーバンドストラテジーのシステム設計

            この興味深いパートでは、ボリンジャーバンド指標に基づいてアルゴリズム取引システムをコーディングする方法を学習します。また、前述の3つの取引ストラテジー(上昇トレンドストラテジー、下降トレンドストラテジー、横ばいストラテジー)を作成する方法についても学習します。

            シンプルな取引システムから高度な取引システムまで、好きなように取引システムを設計できます。たとえば、単純な概念に基づいて単純なシグナルを生成する単純な取引システムを作成および設計してから、このシグナルに従って行動するか、単純なシグナルを提供するだけでなく高度な取引システムを作成および設計することができます。 しかし、関連する概念の組み合わせに基づいて高度なシグナルを提供し、それを自動的に実行します。さまざまなアプローチがあります。この記事では、単純な取引システムを扱います。概念を学ぶためだけに教育目的で作成します。この知識に基づいて、同様のシステムを開発したり、独自の条件で独自の取引システムを設計したりすることができます。この記事がお役に立てば幸いです。また、取引や投資の目標を達成するのに役立つことを願っています。

            まず、移動平均値、上位線値、下位線値の3つのコメントをチャートに表示できるようにする純粋なボリンジャーバンドコードを設計する方法を学習します。

            これを行うためのコードは次のとおりです。

            //+------------------------------------------------------------------+
            //|                                       Simple Bollinger Bands.mq5 |
            //|                                  Copyright 2022, MetaQuotes Ltd. |
            //|                                             https://www.mql5.com |
            //+------------------------------------------------------------------+
            
            //+------------------------------------------------------------------+
            //| Expert tick function                                             |
            //+------------------------------------------------------------------+
            void OnTick()
              {
               //create an array for several prices
               double MiddleBandArray[];
               double UpperBandArray[];
               double LowerBandArray[];
               
               //sort the price array from the cuurent candle downwards
               ArraySetAsSeries(MiddleBandArray,true);
               ArraySetAsSeries(UpperBandArray,true);
               ArraySetAsSeries(LowerBandArray,true);
               
               //define Bollinger Bands
               int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
               
               //copy price info into the array
               CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
               CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
               CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
               
               //calcualte EA for the cuurent candle
               double MiddleBandValue=MiddleBandArray[0];
               double UpperBandValue=UpperBandArray[0];
               double LowerBandValue=LowerBandArray[0];
               
               //comments
               Comment("MiddleBandValue: ",MiddleBandValue,"\n",
               "UpperBandValue: ",UpperBandValue,"\n","LowerBandValue: ",LowerBandValue,"\n");
               
              }
            //+------------------------------------------------------------------+
            

            コードを記述してコンパイルした後、次の図のように、コードにエラーや警告がないことを確認します。

            1 - SBB - エラーなし

            次に、ナビゲータウィンドウでファイルを見つけてチャートにドラッグアンドドロップするか、ダブルクリックして実行し、次の図のようにチャートに添付します。

             2- SBB - ファイル


            3 - SBB実行ウィンドウ


            次の画像は、プログラムが実行されているチャートを示しています。

            4 - チャートに添付されたSBB

            次に、単純なボリンジャーバンドストラテジーを設計する方法を学習します。
              ストラテジー1:
                • 上昇トレンドのボリンジャーバンドストラテジーの青写真: 
                • 価格 > MA = 買、上位線 = 指値、または = シグナルなし

                上昇トレンドBBストラテジーの青写真

                これを行うためのコードは次のとおりです。

                //+------------------------------------------------------------------+
                //|                                          Uptrend BB strategy.mq5 |
                //|                                  Copyright 2022, MetaQuotes Ltd. |
                //|                                             https://www.mql5.com |
                //+------------------------------------------------------------------+
                //+------------------------------------------------------------------+
                //| Expert tick function                                             |
                //+------------------------------------------------------------------+
                void OnTick()
                  {
                   //define Ask, Bid
                   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
                   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
                   
                   //create an array for several prices
                   double MiddleBandArray[];
                   double UpperBandArray[];
                   double LowerBandArray[];
                   
                   //sort the price array from the cuurent candle downwards
                   ArraySetAsSeries(MiddleBandArray,true);
                   ArraySetAsSeries(UpperBandArray,true);
                   ArraySetAsSeries(LowerBandArray,true);
                   
                   //define Bollinger Bands
                   int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
                   
                   
                   //copy price info into the array
                   CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
                   CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
                   CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
                   
                   //calcualte EA for the cuurent candle
                   double MiddleBandValue=MiddleBandArray[0];
                   double UpperBandValue=UpperBandArray[0];
                   double LowerBandValue=LowerBandArray[0];
                   
                   //giving buy signal when price > MA
                   if (
                      (Ask>=MiddleBandArray[0])
                   && (Ask<UpperBandArray[0])
                      )
                         {
                         Comment("BUY");
                         }
                    
                   //check if we have a take profit signal      
                   if (
                      (Bid>=UpperBandArray[0])
                      )
                         {
                         Comment("TAKE PROFIT");
                         }  
                   
                      //check if we have no signal      
                   if (
                      (Ask<MiddleBandArray[0])
                      )
                         {
                         Comment("NO SIGNAL");
                         }  
                  }
                //+------------------------------------------------------------------+

                次のスクリーンショットでは、このストラテジーのシグナルを示しています。

                上昇トレンドBB - 買


                上昇トレンドBB - 指値

                上昇トレンドBB - シグナルなし

                次に、次の手順を実行する必要があります。
                • コードにエラーや警告がないことを確認する
                • ファイルを検索する
                • チャートに添付するファイルをドラッグアンドドロップまたはダブルクリックしてコードを実行する

                5 - UBB - エラーなし

                 6 - UBBファイル


                7 -  UBB実行ウィンドウ


                次の画像は、コード実行後のチャートを示しています。ここで、プログラムはチャート上で実行されています。

                8 - チャートに接続されたUBB

                  ストラテジー2:
                    • 下降トレンドボリンジャーバンドストラテジーの青写真:
                    • 価格 < MA = ショート、下位線 = ターゲット

                    下降BBストラテジー青写真

                    これを行うためのコードは次のとおりです。

                    //+------------------------------------------------------------------+
                    //|                                        Downtrend BB strategy.mq5 |
                    //|                                  Copyright 2022, MetaQuotes Ltd. |
                    //|                                             https://www.mql5.com |
                    //+------------------------------------------------------------------+
                    //+------------------------------------------------------------------+
                    //| Expert tick function                                             |
                    //+------------------------------------------------------------------+
                    void OnTick()
                      {
                       //define Ask, Bid
                       double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
                       double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
                       
                       //create an array for several prices
                       double MiddleBandArray[];
                       double UpperBandArray[];
                       double LowerBandArray[];
                       
                       //sort the price array from the cuurent candle downwards
                       ArraySetAsSeries(MiddleBandArray,true);
                       ArraySetAsSeries(UpperBandArray,true);
                       ArraySetAsSeries(LowerBandArray,true);
                       
                       //define Bollinger Bands
                       int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
                       
                       
                       //copy price info into the array
                       CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
                       CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
                       CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
                       
                       //calcualte EA for the cuurent candle
                       double MiddleBandValue=MiddleBandArray[0];
                       double UpperBandValue=UpperBandArray[0];
                       double LowerBandValue=LowerBandArray[0];
                       
                       //giving sell signal when price < MA
                       if (
                          (Bid<=MiddleBandArray[0])
                       && (Bid>LowerBandArray[0])
                          )
                             {
                             Comment("SELL");
                             }
                        
                       //check if we have a take profit signal      
                       if (
                          (Ask<=LowerBandArray[0])
                          )
                             {
                             Comment("TAKE PROFIT");
                             }  
                       
                          //check if we have no signal      
                       if (
                          (Bid>MiddleBandArray[0])
                          )
                             {
                             Comment("NO SIGNAL");
                             }  
                      }
                    //+------------------------------------------------------------------+

                    以下のスクリーンショットは、このストラテジーによって生成されたシグナルを示しています。

                    下降BB - 売

                    下降トレンドBB - 指値

                    下降トレンドBB - シグナルなし


                    次に、次の手順(スクリーンショットに表示)を再度実行します。
                    • コードにエラーや警告がないことを確認する
                    • ファイルを検索する
                    • チャートに添付するファイルをドラッグアンドドロップまたはダブルクリックしてコードを実行する

                     9 - DBB - エラーなし

                     10 - DBBファイル


                     11 - DBB実行ウィンドウ


                    次の図は、コードの実行後と、それがチャートやチャートに接続されたプログラムにどのように表示されるかを示します。

                     12 - チャートに添付されたDBB



                      ストラテジー3:
                        • 横ばいボリンジャーバンドストラテジーの青写真:
                        • 下位線の価格 = 買、上位線の価格 = ターゲット
                        • 上位線の価格 = 買、下位線の価格 = ターゲット

                        13 - 横ばいBBストラテジー青写真


                        これを行うためのコードは次のとおりです。

                        A - 下位線に触れたときに生成される買いシグナル

                        //+------------------------------------------------------------------+
                        //|                                     Buy sideways BB strategy.mq5 |
                        //|                                  Copyright 2022, MetaQuotes Ltd. |
                        //|                                             https://www.mql5.com |
                        //+------------------------------------------------------------------+
                        //+------------------------------------------------------------------+
                        //| Expert tick function                                             |
                        //+------------------------------------------------------------------+
                        void OnTick()
                          {
                           //define Ask, Bid
                           double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
                           double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
                           
                           //create an array for several prices
                           double MiddleBandArray[];
                           double UpperBandArray[];
                           double LowerBandArray[];
                           
                           //sort the price array from the cuurent candle downwards
                           ArraySetAsSeries(MiddleBandArray,true);
                           ArraySetAsSeries(UpperBandArray,true);
                           ArraySetAsSeries(LowerBandArray,true);
                           
                           //define Bollinger Bands
                           int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
                           
                           
                           //copy price info into the array
                           CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
                           CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
                           CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
                           
                           //calcualte EA for the cuurent candle
                           double MiddleBandValue=MiddleBandArray[0];
                           double UpperBandValue=UpperBandArray[0];
                           double LowerBandValue=LowerBandArray[0];
                           
                           //giving buy signal when price > MA
                           if (
                              (Ask<=LowerBandArray[0])
                              )
                                 {
                                 Comment("BUY");
                                 }
                            
                           //check if we have a take profit signal      
                           if (
                              (Bid>=UpperBandArray[0])
                              )
                                 {
                                 Comment("TAKE PROFIT");
                                 }  
                           
                          }
                        //+------------------------------------------------------------------+
                        

                        次は、このストラテジーによって生成されたシグナルです。

                        買いシグナル - 横ばいBB

                        TP買いシグナル - 横ばい


                        次は手順(下のスクリーンショットに示されている)です。
                        • コードにエラーや警告がないことを確認
                        • ファイルを検索する
                        • チャートに添付するファイルをドラッグアンドドロップまたはダブルクリックしてコードを実行する

                        13 - BSBB - エラーなし

                         14 - BSBBファイル


                        15 - BSBB実行ウィンドウ


                        次の図は、コードの実行後と、それがチャートやチャートに接続されたプログラムにどのように表示されるかを示します。


                         16 - チャートに添付されたBSBB

                        B - 下位線に触れたときに生成される売りシグナル

                        これを行うためのコードは次のとおりです。
                        //+------------------------------------------------------------------+
                        //|                                    Sell sideways BB strategy.mq5 |
                        //|                                  Copyright 2022, MetaQuotes Ltd. |
                        //|                                             https://www.mql5.com |
                        //+------------------------------------------------------------------+
                        //+------------------------------------------------------------------+
                        //| Expert tick function                                             |
                        //+------------------------------------------------------------------+
                        void OnTick()
                          {
                           //define Ask, Bid
                           double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
                           double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
                           
                           //create an array for several prices
                           double MiddleBandArray[];
                           double UpperBandArray[];
                           double LowerBandArray[];
                           
                           //sort the price array from the cuurent candle downwards
                           ArraySetAsSeries(MiddleBandArray,true);
                           ArraySetAsSeries(UpperBandArray,true);
                           ArraySetAsSeries(LowerBandArray,true);
                           
                           //define Bollinger Bands
                           int BollingerBands = iBands(_Symbol,_Period,20,0,2,PRICE_CLOSE);
                           
                           
                           //copy price info into the array
                           CopyBuffer(BollingerBands,0,0,3,MiddleBandArray);
                           CopyBuffer(BollingerBands,1,0,3,UpperBandArray);
                           CopyBuffer(BollingerBands,2,0,3,LowerBandArray);
                           
                           //calcualte EA for the cuurent candle
                           double MiddleBandValue=MiddleBandArray[0];
                           double UpperBandValue=UpperBandArray[0];
                           double LowerBandValue=LowerBandArray[0];
                           
                           //giving sell signal when price < MA
                           if (
                              (Bid>=UpperBandArray[0])
                              )
                                 {
                                 Comment("SELL");
                                 }
                            
                           //check if we have a take profit signal      
                           if (
                              (Ask<=LowerBandArray[0])
                              )
                                 {
                                 Comment("TAKE PROFIT");
                                 }  
                          }
                        //+------------------------------------------------------------------+
                        

                        以下は、このストラテジーによって生成されるシグナルのスクリーンショットです。

                        売りシグナル - 横ばいBB

                        TP売りシグナル - 横ばい


                        次は手順(下のスクリーンショットに示されている)です。
                        • コードにエラーや警告がないことを確認
                        • ファイルを検索する
                        • チャートに添付するファイルをドラッグアンドドロップまたはダブルクリックしてコードを実行する

                         17 - SSBB - エラーなし


                         18 - SSBBファイル


                         19 - SSBB実行ウィンドウ


                        次の図は、コードの実行後と、それがチャートやチャートに接続されたプログラムにどのように表示されるかを示します。

                        20 - チャートに添付されたSSBB


                        終わりに

                        変動幅の概念は、次の動きが現在の動きを利用して利益を得るという明確な期待を与えてくれる、非常に優れたものです。ボリンジャーバンドのような変動幅手法はたくさんあり、価格の動きに応じて拡大および縮小されすべての市場の状況やトレンドで使用できる、優れたツールまたは方法です。

                        前に述べたように、この記事では、ボリンジャーバンド指標の概念と、それを計算して理解を深める方法を共有しようとしました。次に、ボリンジャーバンド指標による簡単な取引ストラテジーについて説明し、これらの単純なストラテジーのための簡単な取引システムを設計する方法を学びました。

                        これで、自分の取引スタイルに適した独自のストラテジーを開発または設計することができます。この記事があなたとあなたの取引に役立つことを願っています。


                        参照資料

                        • ジョン・ボリンジャー「ボリンジャーバンドのボリンジャー」
                        • https://www.bollingerbands.com/about-us
                        • https://www.investopedia.com/trading/using-bollinger-bands-to-gauge-trends
                        • https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_bands



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

                        DirectXチュートリアル(第I部): 最初の三角形の描画 DirectXチュートリアル(第I部): 最初の三角形の描画
                        これはDirectXの紹介記事で、APIを使用した操作の詳細について説明しており、コンポーネントが初期化される順序を理解するのに役立つはずです。この記事には、DirectXを使用して三角形をレンダリングするためのMQL5スクリプトを作成する方法の例が含まれています。
                        DoEasyライブラリのグラフィックス(第97部): フォームオブジェクトの移動の独立した処理 DoEasyライブラリのグラフィックス(第97部): フォームオブジェクトの移動の独立した処理
                        本稿では、マウスを使用したフォームオブジェクトの独立したドラッグの実装について検討します。さらに、以前にターミナルとMQL5に実装されたエラーメッセージと新しい取引プロパティをライブラリに追加します。
                        プロのプログラマーからのヒント(第III部): ロギングSeqログ収集および分析システムへの接続 プロのプログラマーからのヒント(第III部): ロギングSeqログ収集および分析システムへの接続
                        エキスパートログに出力されるメッセージを統合および構造化するためのLoggerクラスの実装。Seqログ収集および分析システムへの接続。オンラインでのログメッセージの監視。
                        単一チャート上の複数インジケータ(第04部): エキスパートアドバイザーに進む 単一チャート上の複数インジケータ(第04部): エキスパートアドバイザーに進む
                        以前の記事では、複数のサブウィンドウでインジケータを作成する方法を説明しました。これは、カスタムインジケータを使用するときに興味深いものになります。今回は、エキスパートアドバイザーに複数のウィンドウを追加する方法を説明します。