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

フラクタルによる取引システムの設計方法を学ぶ

MetaTrader 5トレーディング | 13 1月 2023, 15:32
556 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

今回は、最も人気のあるテクニカル指標の1つであるフラクタル指標に基づいて取引システムを設計する方法を学びます。以下のトピックを通して、その詳細を学んでいきます。

  1. フラクタルの定義
  2. フラクタル戦略
  3. フラクタル戦略設計図
  4. フラクタル取引システム
  5. 結論

フラクタル指標とは何か、何を測定するのか、どのように手動で計算するのかを学び、その主な考え方を理解します。この指標の基本的な考え方に基づいた簡単な売買戦略を通じて、指標を有利に機能させる方法を学びます。その後、これらの戦略に基づき、MetaTrader 5の取引ターミナルで使用する取引システムを作成し、自動シグナルを生成します。

MetaTrader 5取引ターミナルのIDEに組み込まれているMQL5(MetaQuotes言語5)を使ってコードを書いていきます。MetaTrader5とMQL5のダウンロードと使用方法がわからない場合は、「MetaEditorでMQL5のコードを書く」を読むと、戦災を知ることができます。ちなみに、コーディング技術を向上させたいのであれば、学んだことを自分で応用してみることをお勧めします。

この記事は主に教育目的で書かれているため、記載された戦略を実際の口座で使用する前にはテストする必要があります。それに加えて、万人受けするものはないため、自分の取引に適しているかどうかを確認する必要があります。

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

フラクタルの定義

フラクタル指標は、ビル・ウィリアムズが開発したもので、強気または弱気のシグナルを与えることによって価格行動の潜在的な動きを予測しようとするように作られています。強気シグナルは上昇の可能性、弱気シグナルは下降の可能性を示しています。また、この指標は、チャート上の高値と安値を予測しようとするものであるとも言えます。これらのシグナルは、チャート上で価格の上下に生成される矢印を見ることで確認できます。

上向きのフラクタル矢印と下向きのフラクタル矢印の2種類の矢印が形成されます。この2本の矢印を形成する計算方法は次のようになります。

フラクタル指標では、チャート上に上下両方向の値動きの特定のパターンが形成されていることが必要です。

上向きのフラクタルの場合、プライスアクション上では次が必要です。

  • 少なくとも5本の連続したローソク足またはバー
  • 真ん中のローソク足(3本目)での最高の高値
  • この高値の両側でのより低い高値
  • 5本目のローソク足が前回と同じ条件で閉じると、ローソク足(3本目)の上に上向きのフラクタル矢印が形成されます。

下向きのフラクタルの場合、プライスアクション上では次が必要です。

  • 少なくとも5本の連続したローソク足またはバー
  • 真ん中のローソク足(3本目)での最低の安値
  • この安値の両側でのより高い安値
  • 5本目のローソク足が前回と同じ条件で閉じた後、ローソク足(3本目)の下に下向きのフラクタル矢印が形成されます。

幸いなことに、MetaTrader 5にはフラクタル指標が用意されているので、チャート上にフラクタル指標を描くためにこれらの手順をおこなう必要はありません。必要なのは利用可能な指標からフラクタル指標を選択することだけです。これには、MetaTrader 5のターミナルを開いて、

[挿入] -> [インディケータ] -> [ビル・ウィリアムズ系] -> [Fractals]を押します。

 Fracの挿入

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

Fracパラメータ

1 - 矢印の色を決定する

2 - 太さを決定する

[OK]を押すと、以下のようにチャートに指標が挿入されていることがわかります。

Fracの接続

ご覧のように、ローソク足の上下には、プライスアクションの潜在的な動きを参照する矢印があります。上昇の可能性を示すローソク足の下には下向きの矢印、下降の可能性を示すローソク足の上には上向きの矢印が表示されます。

フラクタル戦略

このテクニカル指標の主要概念である「フラクタル」の使い方を、簡単な戦略に基づいて学びます。フラクタルを単独で使用した後、他のテクニカル指標と組み合わせて使用することで、より深い洞察とシグナルの強化につなげる考え方を学びます。

戦略1:Fractals highs and lows

    この戦略では、フラクタルのHighとLowの位置関係から、高低のシグナルを得ます。下矢印が生成された場合、「低」シグナルとなります。上矢印が生成された場合、「高」シグナルとなります。

    単純に言うと次のようになります。

    下矢印 -> フラクタル「低」

    上矢印 -> フラクタル「高」

    戦略2:Fractals with MA

      この戦略では、生成されたフラクタル指標のシグナルに加え、価格と移動平均の位置関係から、値動きの方向性に基づいた売買シグナルを得ます。終値が移動平均線を上回ってフラクタル指標が下矢印を生成した場合は、買いシグナルとなります。終値が移動平均線を下回ってフラクタル指標が上矢印を生成した場合は、売りシグナルとなります。

      単純に言うと次のようになります。

      終値 > MA かつ 下矢印生成 -> 買いシグナル

      終値 < MA かつ 上矢印生成 -> 売りシグナル

      戦略3:Fractals with Alligator

        この戦略では、生成されたフラクタル指標のシグナルに加え、アリゲーター指標でその位置による値動きの方向性に基づいて売買シグナルを得ます。アリゲーターの唇の線が歯と顎を上回り、歯の線が顎を上回り、終値が歯を上回り、フラクタル指標のシグナルが下矢印であれば、買いシグナルとなります。もう1つのシナリオは、唇の線が歯と顎を下回り、歯が顎を下回り、終値が歯を下回り、フラクタルのシグナルが上矢印であれば、売りシグナルとなることです。

        単純に言うと次のようになります。

        唇 > 歯と顎 かつ 歯 > 顎 かつ 終値 > 歯 かつ フラクタルシグナルは下矢印 -> 買いシグナル

        唇 < 歯と顎 かつ 歯 < 顎 かつ 終値 < 歯 かつ フラクタルシグナルは上矢印 -> 売りシグナル

        フラクタル戦略設計図

        言及された戦略ごとにステップバイステップの設計図を作成し、アイデアを整理することで簡単に取引システムを作ることができるようにします。

        1.Fractals highs and lows

          この戦略をもとに、fracUpValueとfracDownValueを継続的に確認することで、Fractals指標のHighとLawをチャート上のコメントとして返すような取引システムを作成します。fracUpが0より大きいか、fracUpが空値ではなくfracDownが空値の場合、取引システムは以下の値を持つコメントとしてチャート上にシグナルを返します。

            • Fractals High around:n

          一方、fracDownが0より大きいか、fracDownが空値ではなくfracUpが空値の場合、取引システムは以下の値を持つコメントとしてチャート上にシグナルを返します。

            • Fractals Low around:n

          次の図は、この戦略の設計図です。

          Fractals highs and lowsの設計図

          2.Fractals with MA

            この戦略をもとに、以下の値を継続的に確認することで、チャート上にコメントとして売買シグナルを返すような売買システムを作る必要があります。

              • 終値
              • EMA(指数移動平均)値
              • fracDownの値
              • fracUpの値

            終値がEMA値を上回り、fracDownの値が空値でない場合、取引システムは以下の値を返します。

              • 買い
              • 現在のEMA
              • Fractals Low value:n

            一方、終値がEMA値を下回り、fracUpの値が空値でない場合、取引システムは以下の値を返します。

              • 売り
              • 現在のEMA
              • Fractals High value:n

            以下のグラフは、この設計図に対応するものです。

            Frac with MAの設計図

            3.Fractals with Alligator

              この取引戦略をもとに、ポジションで以下の値を継続的に確認し、売買シグナルを発生させるシステムを作る必要があります。

                • 唇の値
                • 歯の値
                • 顎の値
                • 終値
                • fracDownの値
                • fracUpの値

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

                • 買い
                • 顎の値n
                • 歯の値n
                • 唇の値n
                • Fractals Low around:n

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

                • 売り
                • 顎の値n
                • 歯の値n
                • 唇の値n
                • Fractals High around:n

              以下のグラフは、この設計図に対応するものです。

              Frac with Alligatorの設計図

              フラクタル取引システム

              このトピックでは、MetaTrader 5ターミナルで実行するために、言及された戦略に基づいて取引システムをステップバイステップで作成する方法を学習します。まずは、チャートにフラクタル指標値をコメントとして返すことができる簡単なフラクタルのシステムを作成します。以下はその方法です。

              上下方向のフラクタル用double配列を作成します。

                 double fracUpArray[];
                 double fracDownArray[];

              ArraySetAsSeries関数を使用してデータを並び替えします。そのパラメータは次の通りです。

              • array[]:作成した配列fracUpArrayとfracDownArrayを使用
              • flag::trueを使用
                 ArraySetAsSeries(fracUpArray,true);
                 ArraySetAsSeries(fracDownArray,true);

              iFractals関数でフラクタル指標を定義してハンドルを返します。そのパラメータは次の通りです。

              • symbol:現在の銘柄に適用される_Symbolを使用
              • period:現在の期間または時間枠に適用される_Periodを使用
              int fracDef=iFractals(_Symbol,_Period);

              CopyBuffer関数を使用してデータを取得し、その結果を格納します。そのパラメータは次の通りです。

              • indicator_handle:指標ハンドル(fracDefを使用)
              • buffer_num:指標バッファの番号(fracUpの場合はUPPER_LINE、fracDownの場合はLOWER_LINEを使用)
              • start_pos:開始位置(1を使用)
              • count:コピーする量(3を使用)
              • buffer[]:コピー先配列(fracUpArray、fracDownArrayを使用)
                 CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                 CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);

              上下のフラクタルの値を取得します。

                 double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                 double fracDownValue=NormalizeDouble(fracDownArray[0],5);

              fracUpValueとfaceDownValueが空値の場合、0を返します。

                 if(fracUpValue==EMPTY_VALUE)
                    fracUpValue = 0;
                 if(fracDownValue==EMPTY_VALUE)
                    fracDownValue = 0;

              Comment関数を使って、フラクタルの値でチャートにコメントを返します。

                 Comment("Fractals Up Value = ",fracUpValue,"\n",
                         "Fractals Down Value = ",fracDownValue);

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

              //+------------------------------------------------------------------+
              //|                                       Simple Fractals 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 fracUpArray[];
                 double fracDownArray[];
              //Sorting data
                 ArraySetAsSeries(fracUpArray,true);
                 ArraySetAsSeries(fracDownArray,true);
              //define frac
                 int fracDef=iFractals(_Symbol,_Period);
              //define data and store result
                 CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                 CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
              //get values of fracUp and fracDown
                 double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                 double fracDownValue=NormalizeDouble(fracDownArray[0],5);
              //returning zero if there is empty value of fracUp
                 if(fracUpValue==EMPTY_VALUE)
                    fracUpValue = 0;
              //returning zero if there is empty value of fracDown
                 if(fracDownValue==EMPTY_VALUE)
                    fracDownValue = 0;
              //comment on the chart
                 Comment("Fractals Up Value = ",fracUpValue,"\n",
                         "Fractals Down Value = ",fracDownValue);
                }
              //+------------------------------------------------------------------+

              このコードをコンパイルすると、次のようにナビゲータフォルダにそのファイルが表示されるようになります。

               Frac Nav

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

               Simple Frac Systemウィンドウ

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

              Simple Frac Systemの接続

              ご覧のように、チャートの右上にEAが接続され、希望のシグナルを受信する準備が整っています。次はテストからの例です。

               Simple Frac Systemシグナル

              左上隅に2つの値があります。

              • Fractals Up Value = n
              • Fractals Down Value = 0

              そして、Fractals Up Valueがあるので、Fractals Down Valueがゼロであることは明らかです。

               Simple Frac Systemシグナル2

              2つの値があります。

              • Fractals Up Value = 0
              • Fractals Down Value = n

              Fractals Down Valueがあるため、Fractals Up Valueはゼロになります。

              1.Fractals highs and lows

                以下は、Fractals highs and lows.の取引システムを作成するための全コードです。

                //+------------------------------------------------------------------+
                //|                                      Fractals highs and lows.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 arrays
                   double fracUpArray[];
                   double fracDownArray[];
                //Sorting data
                   ArraySetAsSeries(fracUpArray,true);
                   ArraySetAsSeries(fracDownArray,true);
                //define frac
                   int fracDef = iFractals(_Symbol,_Period);
                //define data and store result
                   CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                   CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                //define values
                   double fracUpValue = NormalizeDouble(fracUpArray[0],5);
                   double fracDownValue = NormalizeDouble(fracDownArray[0],5);
                //returning zero in case of empty values
                   if(fracUpValue ==EMPTY_VALUE)
                      fracUpValue = 0;
                   if(fracDownValue ==EMPTY_VALUE)
                      fracDownValue = 0;
                //conditions of the strategy and comment on the chart with highs and lows
                //in case of high
                   if(fracUpValue>0)
                     {
                      Comment("Fractals High around: ",fracUpValue);
                     }
                //in case of low
                   if(fracDownValue>0)
                     {
                      Comment("Fractals Low around: ",fracDownValue);
                     }
                  }
                //+------------------------------------------------------------------+

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

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

                「高」の場合

                   if(fracUpValue>0)
                     {
                      Comment("Fractals High around: ",fracUpValue);
                     }

                「低」の場合

                   if(fracDownValue>0)
                     {
                      Comment("Fractals Low around: ",fracDownValue);
                     }

                このコードをコンパイルして、前に習ったのと同じようにチャートに接続すると、以下のようにFractals highs and lowsのEAが接続されていることがわかります。

                 Fractals highs and lowsの接続

                これで、高低の希望する結果を受け取ることができるようになりました。「低」の場合:

                 Fractals highs and lows - 低シグナル

                先のチャートでは、フラクタルの指標がLowを形成したため、左上隅にFractals Lowの値があることがわかります。

                「高」の場合:

                Fractals highs and lows - 高シグナル

                指標がチャートでHighを形成したため、Fractals' Highの値があることがわかります。

                2.Fractals with MA

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

                  //+------------------------------------------------------------------+
                  //|                                             Fractals with MA.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 arrays
                     double fracUpArray[];
                     double fracDownArray[];
                     MqlRates priceArray[];
                     double maArray[];
                  //Sorting data
                     ArraySetAsSeries(fracUpArray,true);
                     ArraySetAsSeries(fracDownArray,true);
                     ArraySetAsSeries(priceArray,true);
                     ArraySetAsSeries(maArray,true);
                  //define values
                     int fracDef = iFractals(_Symbol,_Period);
                     int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                     int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                  //define data and store result
                     CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                     CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                     CopyBuffer(maDef,0,0,3,maArray);
                  //get values
                     double fracUpValue = NormalizeDouble(fracUpArray[0],5);
                     double fracDownValue = NormalizeDouble(fracDownArray[0],5);
                     double closingPrice = priceArray[0].close;
                     double maValue = NormalizeDouble(maArray[0],6);
                     bool isBuy = false;
                     bool isSell = false;
                  //conditions of the strategy and comment on the chart
                  //in case of buy
                     if(closingPrice > maValue && fracDownValue != EMPTY_VALUE)
                       {
                        Comment("Buy","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals Low around: ",fracDownValue);
                        isBuy = true;
                       }
                  //in case of sell
                     if(closingPrice < maValue && fracUpValue != EMPTY_VALUE)
                       {
                        Comment("Sell","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals High around: ",fracUpValue);
                        isSell = true;
                       }
                    }
                  //+------------------------------------------------------------------+

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

                  MqlRates関数で価格、出来高、スプレッドの情報を格納するpriceArray、double型maArrayの2つの配列を追加作成します。

                     MqlRates priceArray[];
                     double maArray[];

                  この2つの配列のデータを並び替えます。

                     ArraySetAsSeries(priceArray,true);
                     ArraySetAsSeries(maArray,true);

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

                  • symbol:銘柄名(_Symbolを使用)
                  • timeframe:期間(_periodを使用)
                  • start_pos:開始位置(0を使用)
                  • count:コピーするデータカウント(3を使用)
                  • rates_array[]: コピー先配列(priceArrayを使用)

                  iMA関数によって移動平均を定義します。そのパラメータは次の通りです。

                  • symbol:銘柄名
                  • period:期間
                  • ma_period::平均化期間(50を使用)
                  • ma_shift:水平方向のシフト(0を使用)
                  • ma_method - 移動平均の種類(EMA(指数移動平均)を使用)
                  • applied_price:価格の種類(終値を使用)
                     int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                     int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);

                  データを並び替えます。

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

                  終値とMA値を定義します。

                  double closingPrice = priceArray[0].close;
                  double maValue = NormalizeDouble(maArray[0],6);

                  同じローソク足の買いシグナルと売りシグナルの衝突を避けるために、isBuyとisSellの2つのbool変数を作成します。

                     bool isBuy = false;
                     bool isSell = false;

                  戦略の条件

                  買いシグナルの場合:

                     if(closingPrice > maValue && fracDownValue != EMPTY_VALUE)
                       {
                        Comment("Buy","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals Low around: ",fracDownValue);
                        isBuy = true;
                       }

                  売りシグナルの場合:

                     if(closingPrice < maValue && fracUpValue != EMPTY_VALUE)
                       {
                        Comment("Sell","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals High around: ",fracUpValue);
                        isSell = true;
                       }

                  このコードをコンパイルして実行すると、EAが接続されているのがわかります。

                   Frac with MAの接続

                  チャート右上にFractals with MAのEAが接続されているのがわかります。以下の例のように、希望するシグナルを受信します。

                  買いシグナルの場合:

                   Frac with MA - 買いシグナル

                  チャートには、以下の値のコメントがあります。

                  • Buy
                  • Current EMA
                  • Fractals Low around:n

                  売りシグナルの場合:

                  Frac with MA - 売りシグナル

                  以下の値があります。

                  • Sell
                  • Current EMA
                  • Fractals High around:n

                  3.Fractals with Alligator

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

                    //+------------------------------------------------------------------+
                    //|                                      Fractals with Alligator.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 arrays
                       double fracUpArray[];
                       double fracDownArray[];
                       MqlRates priceArray[];
                       double jawsArray[];
                       double teethArray[];
                       double lipsArray[];
                    //Sorting data
                       ArraySetAsSeries(fracUpArray,true);
                       ArraySetAsSeries(fracDownArray,true);
                       ArraySetAsSeries(jawsArray,true);
                       ArraySetAsSeries(teethArray,true);
                       ArraySetAsSeries(lipsArray,true);
                    //define values
                       int fracDef=iFractals(_Symbol,_Period);
                       int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                       int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                    //define data and store result
                       CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                       CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                       CopyBuffer(alligatorDef,0,0,3,jawsArray);
                       CopyBuffer(alligatorDef,1,0,3,teethArray);
                       CopyBuffer(alligatorDef,2,0,3,lipsArray);
                    //get values
                       double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                       double fracDownValue=NormalizeDouble(fracDownArray[0],5);
                       double closingPrice = priceArray[0].close;
                       double jawsValue=NormalizeDouble(jawsArray[0],5);
                       double teethValue=NormalizeDouble(teethArray[0],5);
                       double lipsValue=NormalizeDouble(lipsArray[0],5);
                    //creating bool variables to aviod buy ans sell signals at the same time
                       bool isBuy = false;
                       bool isSell = false;
                    //conditions of the strategy and comment on the chart
                    //in case of buy
                       if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue
                       && closingPrice > teethValue && fracDownValue != EMPTY_VALUE)
                         {
                          Comment("Buy","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals Low around: ",fracDownValue);
                          isBuy = true;
                         }
                    //in case of sell
                       if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue
                       && closingPrice < teethValue && fracUpValue != EMPTY_VALUE)
                         {
                          Comment("Sell","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals High around: ",fracUpValue);
                          isSell = true;
                         }
                      }
                    //+------------------------------------------------------------------+

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

                    Alligatorコンポーネントの配列を3つ作成します。

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

                    これらの配列のデータをArraySetAsSeries関数で並び替えます。

                       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);

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

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

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

                    買いシグナルの場合:

                       if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue
                       && closingPrice > teethValue && fracDownValue != EMPTY_VALUE)
                         {
                          Comment("Buy","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals Low around: ",fracDownValue);
                          isBuy = true;
                         }

                    売りシグナルの場合:

                       if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue
                       && closingPrice < teethValue && fracUpValue != EMPTY_VALUE)
                         {
                          Comment("Sell","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals High around: ",fracUpValue);
                          isSell = true;
                         }

                    このコードをコンパイルして、目的のチャートに実行すると、以下のようにEAがチャートに接続されていることがわかります。

                     Frac with Alligatorの接続

                    先ほどのチャートの右上にあるように、このEAをチャートに接続すると、この戦略に基づいた希望するシグナルを得ることができるようになります。

                    以下は、テストからのシグナルの例です。

                    買いシグナルの場合

                     Frac with Alligator - 買いシグナル

                    見ての通り、左上の前のチャートにシグナルとして以下の値が表示されています。

                    • Buy
                    • Jaws value
                    • Teeth value
                    • Lips value
                    • Fractals low value

                     Frac with Alligator - 売りシグナル

                    前チャートでシグナルとして以下の値があります。

                    • Sell
                    • Jaws value
                    • Teeth value
                    • Lips value
                    • Fractals high value


                    結論

                    フラクタルテクニカル指標は、単独で使用しても、他のテクニカル指標と組み合わせて使用しても、この記事で学んだような有用な洞察を与えてくれるため、取引において有用かつ効果的なツールです。それは何であるか、何を測定するか、その計算方法によってチャート上に形成することができ、どのようにMetaTrader 5ターミナルに表示されるように組み込みを挿入する方法を学んだと仮定されます。それに加えて、以下のような簡単な取引戦略を通じて、その使い方を学びました。

                    • Fractals highs and lows:フラクタル指標の高値と安値を検出し、チャート上にシグナルを取得
                    • Fractals with MA:価格とその移動平均の位置に応じて生成されたフラクタルシグナルに基づいて売買シグナルを取得
                    • Fractals with Alligator:価格の位置とアリゲーター指標の位置に応じて、フラクタルシグナルに基づいた売買シグナルを取得

                    また、これらの戦略をMQL5でコーディングすることにより、MetaTrader 5のチャート上に自動シグナルを取得する取引システムを作成する方法についても学びました。この記事のテーマや関連するトピックを深く理解し、より多くの洞察を得るため、この記事を読んで完全な利益を得るためには、ご自分で適用してみてください。

                    どの戦略も、実際の口座で使用する前に必ずテストして、利益が出るかどうか確認してください。この記事が読者にとって有益であり、読者の取引結果の良い強化になるような新しいことを学んでいただけたなら、幸いです。もし、この記事を読んで、もっと似たような記事を読みたいと思われたなら、この連載の他の記事で、最も人気のあるテクニカル指標に基づいた取引システムを理解し、作成する方法についてお読みになることができます。

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

                    ニューラルネットワークが簡単に(第31部):進化的アルゴリズム ニューラルネットワークが簡単に(第31部):進化的アルゴリズム
                    前回の記事では、非勾配最適化手法の調査を開始しました。遺伝的アルゴリズムについて学びました。今日は、このトピックを継続し、進化的アルゴリズムの別のクラスを検討します。
                    適応型インジケーター 適応型インジケーター
                    この記事では、適応型インジケーターを作成するためのいくつかの可能なアプローチを検討します。適応型インジケーターは、入力信号と出力信号の値の間のフィードバックの存在によって特徴付けられます。このフィードバックにより、インジケーターは金融時系列値の最適な処理に個別に適応できるようになります。
                    母集団最適化アルゴリズム:蟻コロニー最適化(ACO) 母集団最適化アルゴリズム:蟻コロニー最適化(ACO)
                    今回は、蟻コロニー最適化アルゴリズムについて解析します。このアルゴリズムは非常に興味深く、複雑です。この記事では、新しいタイプのACOの作成を試みます。
                    データサイエンスと機械学習(第08回)::簡単なMQL5でのK平均法 データサイエンスと機械学習(第08回)::簡単なMQL5でのK平均法
                    データサイエンティストやトレーダーにとってデータマイニングは非常に重要です。多くの場合、データは私たちが思っているほど単純ではありません。人間の目は、データセット内のささいな基本パターンと関係を理解できません。k平均法アルゴリズムがその助けになるかもしれません。調べてみましょう...