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

アリゲーターによる取引システムの設計方法を学ぶ

MetaTrader 5トレーディング | 10 1月 2023, 16:17
381 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

これは、最も人気のあるテクニカル指標に基づいて取引システムを設計する方法を学ぶための連載の新しい記事です。今回は、アリゲーター指標とは何か、どのように計測するのか、どのように計算するのか、どのように読み、どのように使うのかを学びながら、アリゲーター指標について詳しく学んでいきます。そして、この指標の主旨に基づき、いくつかの簡単な戦略に基づいて取引システムを作成します。この指標を次のトピックを通してカバーしていきます。

  1. アリゲーターの定義
  2. アリゲーター戦略
  3. アリゲーター戦略の設計図
  4. アリゲーター取引システム
  5. 結論

特にこの記事で学んだコードを自分で応用してプログラミングスキルを身につけるようにすることをお勧めします。これは、開発のこの目的を達成するための重要なステップです。この記事では、MetaTrader 5取引ターミナルに組み込まれているMQL5(MetaQuotes言語5)IDEを使用します。MetaTrader 5のダウンロード方法とMQL5の使用方法がわからない場合は、「MetaEditorでMQL5コードを書く」のトピックで詳細についてお読みください。

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

アリゲーターの定義

アリゲーターは、Bill Williamsが開発したトレンドフォロー型のテクニカル指標です。これは、トレンドが金融市場商品の期間のほとんどの時間ではなくわずか15%〜30%である一方、時間の約85%〜70%がレンジ(横ばい)に消費されるということに基づきます。つまり、トレンドは上昇トレンドか下降トレンドのどちらかですが、ほとんどの場合あるのはレンジ期間です。トレンドやその種類、そしてトレンドの見分け方についてもっと知りたいのであれば、私の前回の記事から「トレンドの定義」トピックを読むことが、この文脈で役に立ちます。これは、5、8、13の期間の数字のセットで3平滑化移動平均を使用して、計算でフィボナッチ数のいくつかを使用しています。アリゲーターは3本の平滑化された移動平均線から構成されていると言いましたが、その移動平均線は次の通りです。

  • アリゲーターの顎
  • アリゲーターの歯
  • アリゲーターの唇

この指標は、以下の手順で手動で計算することができます。

アリゲーターの顎 = SMMA (Median price, 13, 8)

アリゲーターの歯 = SMA (Median price, 8, 5)

アリゲーターの唇 = SMMA (Median price, 5, 3)

Median Price = (High + Low)/2

ここで、

SMMA = 平滑移動平均

Median price = データの中央値

High = 最高値

Low = 最安値

アリゲーター指標は上記の手順で取得されますが、手動で計算する必要はありません。この指標はMetaTrader 5ターミナルの組み込み指標なので、次の用に利用可能なテクニカル指標から選択するだけです。

MetaTrader 5取引ターミナルを開き、[挿入] -> [インディケータ] -> [Bill Williams] -> [Alligator]を選択します。

アリゲーターの挿入

その後、パラメータが以下のように表示されます。

アリゲーターパラメータ

1 - アリゲーターの顎の期間

2 - アリゲーターの顎の水平方向のずれ

3 - アリゲーターの歯の期間

4 - アリゲーターの歯の水平方向のずれ

5 - アリゲーターの唇の期間

6 - アリゲーターの唇の水平方向のずれ

7 - 平滑化法

8 - 使用可能な価格タイプ

次のウィンドウで、指標のスタイルを決定します。

アリゲーターparam1

1 - 顎線の色

2 - 顎線のタイプ

3 - 顎線の太さ

4 - 歯線の色

5 - 歯線のタイプ

6 - 歯線の太さ

7 - 唇線の色

8 - 唇線のタイプ

9 - 唇線の太さ

すべてのパラメータを決定し、[OK]を押すと、以下のようにチャートに指標が接続されます。

アリゲーターの接続

先ほどのチャートでわかるように、チャートに指標が挿入され、3本の線が表示されています。

1 - アリゲーターの唇

2 - アリゲーターの歯

3 - アリゲーターの顎

価格からこれらの線の位置を観察するだけで、指標を読み取ることができます。価格が唇、歯、顎の順に上回れば、トレンドは上と言えます。価格が唇、歯、顎の順に下回れば、トレンドは下降していると言えます。価格が3本の線の中を移動している場合は、横ばい状態であると言えます。

アリゲーター戦略

アリゲーター指標の取引での使用方法はたくさんあります。ここでは教育のためにこのトピックの主旨に基づいて使用できる簡単な戦略を挙げるので、実際の口座で使用する前に必ずテストして、利益が出るかどうかを確認してください。言及された戦略を最適化する必要があることがわかるかもしれません。自分の取引スタイルに有用であることができる最高の数式に到達するためにこれをおこなうのは正常です。

    戦略1:Alligator Trend Identifier

      この戦略では、特定の条件に基づいて強気と弱気のシグナルを取得します。唇の値が歯の値と顎の値の2つの値を上回り、同時に歯の値が顎の値を上回れば、強気のシグナルとなります。もう1つの場合、唇の値が歯の値や顎の値を下回り、同時に歯の値が顎の値を下回れば、弱気のシグナルとなります。

      唇 > 歯の値、唇 > 顎の値、歯 > 顎の値 -> 強気

      唇 < 歯の値、唇 < 顎の値、歯 < 顎の値 -> 弱気

        戦略2:Alligator Signals System

          この戦略では、唇、歯、顎の値のクロスオーバーによって、売買のシグナルを取得します。唇の値が歯の値や顎の値を上回れば、買いシグナルとなります。また、唇の値が歯や顎の値を下回れば、売りシグナルとなります。

          唇 > 歯の値、唇 > 顎の値 -> 買う

          唇 < 歯の値、唇 < 顎の値 -> 売る

            戦略3:Alligator Signals System Enhancement

              この戦略では、唇、歯、顎の間のクロスオーバー、その後、終値と歯の値の間のクロスオーバーに基づいて売買のシグナルを取得します。唇の線が歯と顎を下回って終値が歯の値を上回る場合、買いシグナルとなります。また、唇の線が歯や顎を上回って終値が歯の値を下回る場合、売りシグナルとなります。

              唇 < 歯の値、唇 < 顎の値、終値 > 歯 -> 買う

              唇 > 歯の値、唇 > 顎の値、終値 < 歯 -> 売る

              アリゲーター戦略の設計図

              次に、前のトピックで述べた戦略をもとに取引システムを作る必要があります。そのために、この取引システムを作るためのステップバイステップの設計図を設計します。

                戦略1:Alligator Trend Identifier

                  この戦略では、4つの値を連続的に確認することで、強気または弱気のダイバージェンスのシグナルを生成する取引システムを作ります。

                  • 唇の値
                  • 歯の値
                  • 顎の値

                  取引システムには、これらの数値の位置を判断し、それに基づいて適切なシグナルを生成することが必要です。唇の線が歯の線を上回り、唇の線が顎の線を上回り、歯の線が顎の線を上回る場合、取引システムは以下の値をチャートにコメントとして返します。

                  • 強気
                  • 顎の値 = n
                  • 歯の値 = n
                  • 唇の値 = n

                  一方、唇の線が歯の線を下回り、唇の線が顎の線を下回り、同時に歯の線が顎の線を下回る場合、取引システムは以下の値をチャートにコメントとして返します。

                  • 弱気
                  • 顎の値 = n
                  • 歯の値 = n
                  • 唇の値 = n

                  以下は、この取引システムを作成するためのステップバイステップの設計図です。

                  Alligator Trend Identifierの設計図

                    戦略2:Alligator Signals System

                      この戦略によれば、以下の値を継続的に確認し、それぞれのポジションを判断して売買のシグナルを発生させるような取引システムを作る必要があります。

                      • 唇の値
                      • 歯の値
                      • 顎の値

                      唇の線が歯の値を上回り、同時に唇の線が顎の値を上回る場合、取引システムは以下の値をチャートにコメントとして返します。

                      • 買い
                      • 顎の値 = n
                      • 歯の値 = n
                      • 唇の値 = n

                      一方、唇の線が歯の値を下回ると同時に唇の線が顎の線を下回る場合、取引システムは以下の値でシグナルとしてチャートにコメントを返します。

                      • 売り
                      • 顎の値 = n
                      • 歯の値 = n
                      • 唇の値 = n

                      以下は、この取引システムを作成するためのステップバイステップの設計図です。

                      Alligator Signals Systemの設計図

                        戦略3:Alligator signals System Enhancement

                          この戦略によれば、以下の値を確認してそれぞれのポジションを決定し、売買シグナルを生成する取引システムを作る必要があります。

                          • 唇の値
                          • 歯の値
                          • 顎の値
                          • 終値

                          唇の値が歯の値を下回り、唇の線が顎の線を下回り、終値が歯の値を上回った場合、取引システムは以下の値でシグナルとしてチャートにコメントを返します。

                          • 買い
                          • 唇の値 = n
                          • 歯の値 = n
                          • 終値 = n
                          • 顎の値 = n

                          唇の線が歯の線を上回り、唇の線が顎の線を下回り、終値が歯の値を下回る場合、取引システムは以下の値でシグナルとしてチャートにコメントを返します。

                          • 売り
                          • 唇の値 = n
                          • 歯の値 = n
                          • 終値 = n
                          • 顎の値 = n

                          以下は、この取引システムを作成するためのステップバイステップの設計図です。

                          Alligator Signals System Enhancementの設計図

                          アリゲーター取引システム

                          次に、MetaTrader 5ターミナルで実行される各戦略について、希望するシグナルを自動的に生成するための取引システムを作成します。まず、取引システムで使用するアリゲーターコンポーネントの値のシグナルを生成するための基盤となる取引システムを作成します。このようなシステムを作るには、次のような手順があります。

                          アリゲーターの構成要素(Lips、Teeth、Jaws)を1つずつ配列にします。

                             double jawsArray[];
                             double teethArray[];
                             double lipsArray[]; 

                          これらの配列のデータをArraySetAsSeries関数で並び替えます。そのパラメータは次の通りです。

                          • array[]
                          • flag
                             ArraySetAsSeries(jawsArray,true);
                             ArraySetAsSeries(teethArray,true);
                             ArraySetAsSeries(lipsArray,true);

                          iAlligatorによってアリゲーターを定義します。そのパラメータは次の通りです。

                          • symbol:現在の銘柄に適用される_Symbolを使用
                          • period:現在の期間または時間枠に適用される_Periodを使用
                          • jaw_period:顎の計算期間(13を使用)
                          • ma_shift:水平方向のシフト(8を使用)
                          • teeth_period:歯の計算期間(8を使用)
                          • teeth_shift:歯の水平方向のずれ(5を使用)
                          • lips_period:唇の計算期間(5を使用)
                          • lips_shift:唇の水平方向のずれ(3を使用)
                          • ma_method:移動平均の種類(MODE_SMAを使用)
                          • applied_price:価格の種類(PRICE_MEDIANを使用)
                          int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);

                          CopyBuffer関数を使用してデータを定義して結果を保存します。そのパラメータは次の通りです。

                          • indicator_handle:指標ハンドル(alligatorDefを使用))
                          • buffer_num: 指標バッファ番号(0は顎、1は歯、2は唇)
                          • start_pos:開始位置(0を使用)
                          • count:コピーする量(3を使用)
                          • buffer[]: コピー先の配列(jawsArray、teethArray、 lipsArrayを使用)
                             CopyBuffer(alligatorDef,0,0,3,jawsArray);
                             CopyBuffer(alligatorDef,1,0,3,teethArray);
                             CopyBuffer(alligatorDef,2,0,3,lipsArray);

                          3つのコンポーネントの値を取得します。

                             double jawsValue=NormalizeDouble(jawsArray[0],5);
                             double teethValue=NormalizeDouble(teethArray[0],5);
                             double lipsValue=NormalizeDouble(lipsArray[0],5);

                          指標の3つの要素でコメントします。

                             Comment("jawsValue = ",jawsValue,"\n",
                             "teethValue = ",teethValue,"\n",
                             "lipsValue = ",lipsValue);

                          この取引システムを作るための設計図は以下の通りです。

                          //+------------------------------------------------------------------+
                          //|                                      Simple Alligator System.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()
                            {
                             //creating price array
                             double jawsArray[];
                             double teethArray[];
                             double lipsArray[];   
                             //Sorting data
                             ArraySetAsSeries(jawsArray,true);
                             ArraySetAsSeries(teethArray,true);
                             ArraySetAsSeries(lipsArray,true);
                             //define Alligator
                             int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);      
                             //define data and store result
                             CopyBuffer(alligatorDef,0,0,3,jawsArray);
                             CopyBuffer(alligatorDef,1,0,3,teethArray);
                             CopyBuffer(alligatorDef,2,0,3,lipsArray);
                             //get value of current data
                             double jawsValue=NormalizeDouble(jawsArray[0],5);
                             double teethValue=NormalizeDouble(teethArray[0],5);
                             double lipsValue=NormalizeDouble(lipsArray[0],5);
                             //comment on the chart
                             Comment("jawsValue = ",jawsValue,"\n",
                             "teethValue = ",teethValue,"\n",
                             "lipsValue = ",lipsValue);
                            }
                          //+------------------------------------------------------------------+

                          このコードをコンパイルすると、ナビゲータでExpert Advisorsフォルダの中に以下のように表示されます。

                          Simple Alligator System nav

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

                          Simple Alligator Systemウィンドウ

                          [アルゴリズム取引を許可する]にチェックを入れて[OK]を押すと、次のようにチャートにEAが接続されます。

                          Simple Alligator Systemの接続

                          前のチャートで分かるように、右上にEAが接続されています。これで、シグナルを受信する準備が整いました。以下は、テストによって生成されたシグナルの例です。

                           Simple Alligator Systemシグナル

                          先のチャートの左上にあるように、次のような値を持つシグナルがあることがわかります。

                          顎の値 = n

                          歯の値 = n

                          唇の値 = n

                            戦略1: Alligator Trend Identifier

                              この戦略に基づく取引システムを作成するための完全なコードは、次のようになります。

                              //+------------------------------------------------------------------+
                              //|                                   Alligator Trend Identifier.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()
                                {
                              //creating three arrays of Alligator components
                                 double jawsArray[];
                                 double teethArray[];
                                 double lipsArray[];
                              //Sorting data
                                 ArraySetAsSeries(jawsArray,true);
                                 ArraySetAsSeries(teethArray,true);
                                 ArraySetAsSeries(lipsArray,true);
                              //define Alligator
                                 int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                              //define data and store result
                                 CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                 CopyBuffer(alligatorDef,1,0,13,teethArray);
                                 CopyBuffer(alligatorDef,2,0,13,lipsArray);
                              //get value of current data
                                 double jawsValue=NormalizeDouble(jawsArray[0],5);
                                 double teethValue=NormalizeDouble(teethArray[0],5);
                                 double lipsValue=NormalizeDouble(lipsArray[0],5);
                              //conditions of strategy
                                 if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue)
                                   {
                                    Comment("Bullish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }
                                 if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue)
                                   {
                                    Comment("Bearish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }
                                }
                              //+------------------------------------------------------------------+

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

                              戦略の条件(強気の場合):

                                 if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue)
                                   {
                                    Comment("Bullish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }

                              弱気の場合

                                 if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue)
                                   {
                                    Comment("Bearish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }

                              このコードをコンパイルし、作成したエキスパートアドバイザー(EA)を学んだように実行すると、このEAが以下のようにチャートに添付されていることがわかります。

                              Alligator Trend Identifierの接続

                              先ほどのチャートでわかるように、EAは右上のチャートに取り付けられており、この戦略に基づいた強気・弱気のシグナルを得る準備が整っています。これらのシグナルの例を以下に示します。

                              強気の場合:

                              Alligator Trend Identifier - 強気シグナル

                              先ほどのチャートでわかるように、右上にシグナルとしてコメントがあり、その値は以下の通りです。

                              • 強気
                              • 顎の値 = n
                              • 歯の値 = n
                              • 唇の値 = n 
                              価格の下で3本の線が動いているため、強気のシグナルになります。

                              弱気の場合

                              Alligator Trend Identifier - 弱気シグナル

                              先のチャートでわかるように、右上に弱気のシグナルとしてコメントがあり、その値は以下の通りです。

                              • 弱気
                              • 顎の値 = n
                              • 歯の値 = n
                              • 唇の値 = n

                              3本の線が価格の上で動いているので、弱気のシグナルになります。

                                戦略2: Alligator Signals System

                                  次のコードは、この戦略に基づいた取引システムを作成するためのものです。

                                  //+------------------------------------------------------------------+
                                  //|                                    Alligator Signals System .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()
                                    {
                                  //creating three arrays of Alligator components
                                     double jawsArray[];
                                     double teethArray[];
                                     double lipsArray[];
                                  //Sorting data
                                     ArraySetAsSeries(jawsArray,true);
                                     ArraySetAsSeries(teethArray,true);
                                     ArraySetAsSeries(lipsArray,true);
                                  //define Alligator
                                     int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                  //define data and store result
                                     CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                     CopyBuffer(alligatorDef,1,0,13,teethArray);
                                     CopyBuffer(alligatorDef,2,0,13,lipsArray);
                                  //get value of current data
                                     double jawsValue=NormalizeDouble(jawsArray[0],5);
                                     double teethValue=NormalizeDouble(teethArray[0],5);
                                     double lipsValue=NormalizeDouble(lipsArray[0],5);
                                  //conditions of strategy
                                     if(lipsValue>teethValue && lipsValue>jawsValue)
                                       {
                                        Comment("Buy","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }
                                     if(lipsValue<teethValue && lipsValue<jawsValue)
                                       {
                                        Comment("Sell","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }
                                    }
                                  //+------------------------------------------------------------------+

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

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

                                  買いシグナルの場合

                                     if(lipsValue>teethValue && lipsValue>jawsValue)
                                       {
                                        Comment("Buy","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }

                                  売りシグナルの場合

                                     if(lipsValue<teethValue && lipsValue<jawsValue)
                                       {
                                        Comment("Sell","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }

                                  このコードをコンパイルして取引ターミナルで実行すると、次のようにチャートに接続されていることがわかります。

                                  Alligator Signals Systemの接続

                                  先ほどのチャートの右上にEAが接続され、この戦略に基づいて売買シグナルを受信する準備が整ったことを確認します。

                                  買いシグナルの場合

                                  Alligator Signals System - 買いシグナル

                                   

                                  次のような値で目的のシグナルが得られていることがわかります。

                                  • 買い
                                  • 顎の値 = n
                                  • 歯の値 = n
                                  • 唇の値 = n
                                  3本の線が価格を下回っているため、買いシグナルになります。

                                  売りシグナルの場合

                                  Alligator Signals System - 売りシグナル

                                  次のような値で目的のシグナルが得られます。

                                  • 売り
                                  • 顎の値 = n
                                  • 歯の値 = n
                                  • 唇の値 = n

                                  3本の線が価格より上に移動しているので、売りシグナルになります。

                                    戦略3: Alligator Signals System Enhancement

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

                                      //+------------------------------------------------------------------+
                                      //|                         Alligator Signals System Enhancement.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()
                                        {
                                      //creating three arrays of Alligator components
                                         double jawsArray[];
                                         double teethArray[];
                                         double lipsArray[];
                                         MqlRates pArray[];
                                      //Sorting data
                                         ArraySetAsSeries(jawsArray,true);
                                         ArraySetAsSeries(teethArray,true);
                                         ArraySetAsSeries(lipsArray,true);
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                      //define Alligator
                                         int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                      //define data and store result
                                         CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                         CopyBuffer(alligatorDef,1,0,13,teethArray);
                                         CopyBuffer(alligatorDef,2,0,13,lipsArray);
                                      //get value of current data
                                         double jawsValue=NormalizeDouble(jawsArray[0],5);
                                         double teethValue=NormalizeDouble(teethArray[0],5);
                                         double lipsValue=NormalizeDouble(lipsArray[0],5);
                                      //conditions of strategy
                                         if(lipsValue<teethValue && lipsValue<jawsValue && pArray[0].close>teethValue)
                                           {
                                            Comment("Buy","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }
                                         if(lipsValue>teethValue && lipsValue>jawsValue && pArray[0].close<teethValue)
                                           {
                                            Comment("Sell","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }
                                        }
                                      //+------------------------------------------------------------------+

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

                                      MqlRates関数で価格用の配列をもう1つ作成し、価格、数量、スプレッドの情報を格納します。

                                      MqlRates pArray[];

                                      MqlRatesの履歴データをCopyRatesを使って取得します。そのパラメータは次の通りです。

                                      • symbol:銘柄名(_Symbolを使用)
                                      • timeframe:期間(_periodを使用)
                                      • start_pos:開始位置(0を使用)
                                      • count:コピーするデータカウント(1を使用)
                                      • rates_array[]: コピー先配列(pArrayを使用)
                                      int Data=CopyRates(_Symbol,_Period,0,1,pArray);

                                      戦略の条件

                                      買いシグナルの場合

                                         if(lipsValue<teethValue && lipsValue<jawsValue && pArray[0].close>teethValue)
                                           {
                                            Comment("Buy","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }

                                      売りシグナルの場合

                                         if(lipsValue>teethValue && lipsValue>jawsValue && pArray[0].close<teethValue)
                                           {
                                            Comment("Sell","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }

                                      このコードをコンパイルしてEAを実行すると、以下のようにチャートに貼り付けられ、売買シグナルが表示されることがわかります。

                                       Alligator Signals System Enhancementの接続

                                      右上にEAが表示され、希望するシグナルを受信することができます(以下はテスト時の例です)。

                                      買いシグナルの場合

                                       Alligator Signals System Enhancement - 買いシグナル

                                      左上のコメントには、以下の値を入れています。

                                      • 買い
                                      • 顎の値 = n
                                      • 歯の値 = n
                                      • 終値 = n
                                      • 唇の値 = n 
                                      3本の線が価格の上で動いていることから、終値はアリゲーターの歯の線の上で閉じていることがわかります。

                                      売りシグナルの場合

                                       Alligator Signals System Enhancement - 売りシグナル

                                      左上にシグナルとしてコメントを入れています。

                                      • 売り
                                      • 顎の値 = n
                                      • 歯の値 = n
                                      • 終値 = n
                                      • 唇の値 = n

                                      3本の線が価格を下回っていることから、終値がアリゲーターの歯の線の下に閉じていることがわかります。

                                      結論

                                      今回は、売買シグナルだけでなく、トレンドの確認にも使えるテクニカル指標「アリゲーター」について詳しく学びました。手動で計算する方法と、簡単な戦略に基づいた使い方を学びました。

                                      • Alligator Trend Identifier:アリゲーターの三本線(Lips、Teeth、Jaws)の位置から強気・弱気のシグナルを生成
                                      • Alligator Signals System:指標の3本の線の間のクロスオーバーに基づいて、古典的な方法のクロスオーバーによって売買シグナルを生成
                                      • Alligator Signals System Enhancement:別の方法で売買シグナルを生成し、指標の3本の線の位置と終値と歯の間のクロスオーバーに基づいてこれらのシグナルを早期に生成 

                                      言及した戦略ごとにステップバイステップの設計図を作成し、取引システムをスムーズかつ簡単に、そして効果的に作成するためのアイデアを整理しました。また、MetaTrader 5の取引ターミナルで使用される各戦略の取引システムを作成し、設計しコード化した内容に従って自動的にシグナルを生成します。ここでもう一度確認する必要がるのは、これらが自分のために有用で有益であることを確認するために、実際の口座でそれを使用する前に、言及されたすべての戦略をテストする必要があるということです。

                                      コーディングスキルを向上させてこの記事を読むことから完全な利益を得るよう助言したように、読者が、自分で学んだことを適用しようとしたことを願っています。この記事が読者の取引のために有用であり、この記事、あるいは任意の関連トピックの話題に有用な洞察を得たことを願っています。ストキャスティクス、RSI、ボリンジャーバンド、移動平均、エンベロープ、MACD、ADXなどの最も人気のあるテクニカル指標と、それらに基づいた取引システムの作り方を紹介しましたので、同様の記事をもっと読みたい方は、本連載の過去の記事をお読みください。

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

                                      DoEasy-コントロール(第21部):SplitContainerコントロール。パネルセパレータ DoEasy-コントロール(第21部):SplitContainerコントロール。パネルセパレータ
                                      この記事では、SplitContainerコントロールの補助パネルセパレータオブジェクトのクラスを作成します。
                                      データサイエンスと機械学習(第07回)::多項式回帰 データサイエンスと機械学習(第07回)::多項式回帰
                                      線形回帰とは異なり、多項式回帰は、線形回帰モデルでは処理できないタスクをより適切に実行することを目的とした柔軟なモデルです。MQL5で多項式モデルを作成し、そこから何か良いものを作る方法を見つけてみましょう。
                                      Frames Analyzerツールによるタイムトレード間隔の魔法 Frames Analyzerツールによるタイムトレード間隔の魔法
                                      Frames Analyzerとは何でしょうか。これは、パラメータ最適化の直後に作成されたMQDファイルまたはデータベースを読み取ることにより、ストラテジーテスター内外でパラメータ最適化中に最適化フレームを分析するためのエキスパートアドバイザー(EA)のプラグインモジュールです。これらの最適化の結果はFrames Analyzerツールを使用している他のユーザーと共有して、結果について話し合うことができます。
                                      DoEasy-コントロール(第20部):SplitContainer WinFormsオブジェクト DoEasy-コントロール(第20部):SplitContainer WinFormsオブジェクト
                                      今回の記事では、MS Visual StudioツールキットからSplitContainerコントロールの開発を開始します。このコントロールは、垂直または水平の可動セパレータで区切られた2つのパネルで構成されています。