English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
preview
AD(蓄積/分散、Accumulation/Distribution)による取引システムの設計方法を学ぶ

AD(蓄積/分散、Accumulation/Distribution)による取引システムの設計方法を学ぶ

MetaTrader 5トレーディング | 29 8月 2022, 07:38
313 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

この連載は、最も人気のあるテクニカル指標を詳しく学び、シンプルな戦略の形で応用することを目的としています。これらの戦略の取引システムはMQL5を使用して設計され、MetaTrader 5取引プラットフォームで実行されます。今回はAD指標について学習します。これは、商品の別の視点を示すことができる新しい出来高に基づいたテクニカル指標です。この指標を次のトピックを通してカバーしていきます。

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

まず、この新しいテクニカル指標について、何を測定しているのか、また、どのように使用してどのように手動で計算するのかを詳しく学び、その背後にある主な概念を理解します。そして、それを基に取引システムを設計していきます。概念をよりよく理解するために、この計算を例に応用します。AD指標の基本を詳しく学んだ後は、シンプルな戦略でどのように使えるかを学びます。そして、言及された各戦略の設計図を作成し、その取引システムを作成するのに役立てます。言及されたすべてのシンプルな戦略のすべての設計図を作成したら、MetaTrader 5取引プラットフォームで実行できる取引システムを作成するためにMQL5コードを作成または記述する方法を学習するという、この記事の最も興味深い部分に到達します。

その時までに、AD指標の使い方を習得しておくことで、より詳細にカバーします。その後、シンプルな戦略の取引システムを作成します。この記事の主な目的は(この連載の他のものと同様に)、最も人気のある指標に基づいて取引システムをコーディングまたは設計する方法について、初心者プログラマに洞察を与えることです。理解を深めるのに役立つので、言及されたコードを自分で書くことによって学んだことを適用することをお勧めします。また、MetaTrader 5に組み込まれたMetaEditorでコードを書くために、MetaQuotes言語(MQL5)を使用する予定です。MetaTrader 5のインストール方法やMetaEditorの使い方を知りたい方は、前回の記事のMetaEditorでMQL5コードを書くのトピックを読んでみてください。

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

それでは、取引とMQL5に関する学習の旅でさらに前進するために、トピックを進めていきましょう。

ADの定義

ここでは、AD指標とは何か、何を測定するのか、どのように計算するのか、その背後にある概念は何なのかについて詳しく説明します。ADライン指標はマーク・チャイキンによって開発されました。これは出来高に基づいた指標です。つまり、その計算には出来高が使用され、取引全般において重要な視点である、商品に出入りする累積的な資金の流れを測定する出来高についての洞察を与えてくれます。さらに、トレンドを確認したり、反転を警告するために出来高を使用します。トレンド、その種類、そしてトレンドの見分け方について詳しく知りたい方は、前回の記事のトレンドの定義サブセクションを読んでみてください。

他の累積指標と同様、ADラインは各期間のマネーフロー量の実行合計です。この事実は、指標計算の際に非常に明確になります。以下の手順でADラインを計算する方法を見てみましょう。

ADラインの計算には3つのステップがあります。

  1. マネーフロー倍率の算出=((終値-安値)-(高値-安値))/(高値-安値)
  2. マネーフロー量の算出=マネーフロー倍率×期間の量
  3. ADライン=前回のADライン値+現在のマネーフロー量

ここで、ある商品について次のようなデータがある場合、これらの手順を適用してADラインを計算する例を考えてみましょう。

高値 安値 終値 数量
1 55 53 54 12000
2 56 54 55 10000
3 61 59 60 15000
4 67 64 65 20000
5 63 58 60 10000
6 58 52 55 5000
7 64 58 60 7000
8 52 47 50 7500
9 52 48 48 8000
10 50 48 49 5000
11 49 47 48 6000
12 48 47 47 7500
13 50 46 48 9000
14 52 45 47 10000
15 55 46 49 7000
16 53 45 47 7500
17 51 43 46 6000
18 50 42 44 5000
19 50 43 45 15000

では、先に与えられたデータをもとに、ADラインを計算してみましょう。計算は次のようになります。

まず、マネーフロー倍率=((終値-安値)-(高値-安値))/(高値-安値)を計算すると、下図と同じになります。

AD計算

次に、マネーフロー量=マネーフロー倍率×期間数量で計算すると、下図と同じになります。

AD計算1

第三に、ADライン=前回のADライン値+今回のマネーフロー量を計算すると、下図と同じになります。

AD計算2

ADラインを手動で計算したのですが、これはAD指標の概念を理解するためにやりました。実際には計算する必要はありません。現在、AD指標を見るには、MetaTrader 5ターミナルで利用可能な指標の中から選択するだけです。

まず、MetaTrader 5を開き、[挿入]タブ→[インディケータ]→[ボリューム系]→[Accumulation/Distribution]をクリックします。

ADの挿入

指標を選択すると、AD指標のパラメータを設定するための以下のウィンドウが表示されます。

ADの挿入ウィンドウ

1.出来高の種類:ティックまたはリアル

2.ADラインの色

3.ADラインの種類

4.ADラインの太さ

必要なものを決めて[OK]を押すと、AD指標に下図が表示されます。

ADの接続

次に、AD指標の使い方を知っておく必要があります。


ADの戦略

このセクションでは、AD指標をどのように有利に使い、簡単な戦略によって取引を強化することができるかを学びます。読者の取引に役立つ新しいアイディアが得られることを願っています。

これらの戦略を最適化する必要があることがわかるかもしれません。なぜなら、ここでの主な目的は、AD指標の基本的な概念と、MQL5によってどのように取引システムを作ることができるかを理解してもらうために役立つ、簡単な戦略を共有することだからです。実際の口座で使用する前に、最適化や編集が必要な場合があるため、すべての戦略をテストする必要があります。また、使用可能な期間の長さを、より有意にしたり、取引に適した長さに編集することもできます。

では、AD指標で使える簡単な戦略を紹介します。

  • 戦略1:Simple AD Movement

この戦略では、ADラインが上昇しているのか、下降しているのか、その動きを知る必要があります。現在のAD値と前のAD値との単純な比較をおこなうことにします。現在のAD値が前の値より大きい場合、ADラインは上昇し、その逆も同様です。逆に、現在値が前回値より小さい場合は、ADラインは下降しています。

単純に、こうも言えます。

現在のAD>以前のAD→ADラインが上昇

現在のAD<以前のAD→ADラインが下降

  • 戦略2:Simple AD Strength

この戦略では、ADラインの現在の動きが強いか弱いかを知る必要があり、現在のAD値と過去10回のAD値の最大値または最小値を単純に比較することでそれを実現します。現在の値が過去10回のAD値の最大値より大きければ、現在のAD値は強いということです。その逆も同じです。現在の値が過去10回のAD値の最小値より小さい場合、現在のAD値は弱いと判断します。

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

現在のAD値>過去10回のAD値の最大値→AD現在値が強い

現在のAD値<過去10回のAD値の最小値→AD現在値が弱い

  • 戦略3:Simple AD - Uptrend

この戦略では、上昇トレンド中の現在の上昇の動きが強いか、あるいはその単純な形で弱気のダイバージェンスがあるかを知る必要があります。弱気のダイバージェンスとは、価格が高値を更新しているにもかかわらず、指標がその動きを確認せず、下降していることを意味します。ここでは、簡潔化のためにADの最後の2つの連続した値と高値の最後の2つの連続した値を比較することによってそれを確認しますが、より重要な洞察を得るために、調べる期間を編集することができます。つまり、トレンドに沿った出来高を見るのが良いという考え方です。上昇トレンドでは、出来高は上昇とともに増加し、修正された場合には減少します。

現在のAD値と前回のAD値、現在の高値と前回の高値を比較することになります。現在のAD値が以前のAD値より大きく、現在の高値が以前の高値より大きい場合、上昇トレンドの間に強い上昇の動きがあります。あるいは、現在のAD値が以前のAD値より小さく、現在の高値が以前の高値より大きければ、弱気のダイバージェンスがあることになります。

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

現在のAD>前回のAD、現在の高値>前回の高値→上昇トレンド中の強い上昇の動き

現在のAD<前回のAD、現在の高値>前回の高値→弱気の乖離

  • 戦略4:Simple AD - Downtrend

この戦略は、Simple AD - Uptrend戦略の反対になります。下降トレンドの間に現在の下降の動きが強いか、その単純な形で強気の乖離があるかどうかを知る必要があります。強気の乖離は、価格が安値を更新しているにもかかわらず、指標がこの動きを確認せず、上昇に転じた場合であり、AD指標の直近の2連続値と安値の直近の2連続値を比較することで確認することができます。現在のAD値が以前のAD値より小さく、現在の安値が前回の安値より小さい場合、下降トレンドの間に強い下降があることになります。あるいは、現在のAD値が前回のAD値より大きく、現在の安値が前回の安値より小さければ、強気のダイバージェンスがあることになります。

次のようにシンプルです。

現在のAD<前回のAD、現在の安値<前回の安値→下降トレンド中の強い下降の動き

現在のAD>前回のAD、現在の安値<前回の安値→強気のダイバージェンス 


AD戦略の設計図

さて、いよいよ取引システムを作るための手順を整理していきます。このパートでは、取引システムをスムーズに作るために、各戦略のステップバイステップの設計図を作成します。このステップは、取引システムを作る上で非常に重要だと考えています。そこで、それぞれの戦略について、何をすべきかを知るための設計図を作成することになりますが、それらは次のようなものでしょう。

まず、今後の戦略のベースとなる、ADの現在値をチャート上にコメントとして提示するシンプルな戦略の設計図が必要です。これをSimple ADと呼ぶことにします。このシステムで必要なことは、現在のADの値をコメントとしてチャートに表示することだけで、以下がそのための設計図です。

Simple ADの設計図 

さて、ここで述べた各戦略の設計図を作成する必要があります。

  • 戦略1:Simple AD Movement

取引システムが実行されている間、1ティックごとに現在のADと前回のADの2つの値を連続的に確認し、現在のものが前回より大きいかどうかを判断する必要があります。ADの上昇ライン、ADの現在値、ADの前回値をチャート上のコメントとして返す必要があります。各値は別々の行になります。一方、現在値が前回値より小さい場合、ADラインの下降、ADの現在値、ADの前回値をチャート上のコメントとして返す必要があります。各値は別々の行にあります。以下はこの取引システムを作るための設計図です。

Simple AD Movementの設計図

  • 戦略2:Simple AD Strength

この戦略では、3つの値から連続的に1ティックごとに約定するかどうかを確認できる売買システムを設計する必要があります。3つの値とは、現在のAD値、過去10回のAD値の最大値、過去10回のAD値の最小値です。ADの現在値が最大値より大きい場合、AD現在値、AD最大値、AD最小値という適切な通知をシステムが返すことが必要です。各値は別行に設定されます。ADの現在値が最小値を下回っている場合、AD現在値、AD最大値、AD最小値という適切な通知をシステムが返すことが必要です。各値は別行に設定されます。

そのための設計図を以下に示します。

Simple AD Strengthの設計図

  • 戦略3:Simple AD - Uptrend

この戦略では、現在のAD、前回のAD、現在の高値、前回の高値の4つの値を確認できる取引システムを作成し、上昇トレンドの間はティックごとに確認を実行する必要がありますそして、現在のADが前回のADより大きいかどうか、現在の高値が前回の高値より大きいかどうかをシステムに判断させる必要があります。上昇トレンド中の強い上昇の動き、AD現在値、AD前回値、現在高値、前回高値を含んだチャート上のコメントとして返すシステムが必要です。各値は別行に設定されます。もう1つフラグする必要があるのは、現在のADが前回のADより小さく、現在の高値が前回の高値より大きい場合です。弱気のダイバージェンス、現在のAD、前回のAD、現在の高値,前回の高値、それぞれの値を別々の行で返すシステムが必要です。

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

Simple AD Uptrendの設計図

  • 戦略4:Simple AD - Downtrend

この戦略では、現在のAD、前回のAD、現在の安値、前回の安値の4つの値を確認できる取引システムを作成し、下降トレンドの間はティックごとに確認を実行する必要があります。そして、現在のADが前回のADより小さいかどうか、現在の安値が前回の安値より小さいかどうかをシステムに判断させる必要があります。下降トレンド中の強い下降の動き、AD現在値、AD前回値、現在安値、前回安値をそれぞれ別の行でチャート上のコメントとして返すシステムが必要です。もう1つフラグする必要があるのは、現在のADが前回のADより大きく、現在の安値が前回の高値より大きい場合です。システムが、強気のダイバージェンス、現在のAD、前回のAD、現在の安値と前回の安値、そしてそれぞれの値を別々の行でコメントとして返す必要があるのです。

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

Simple AD - Downtrendの設計図


AD戦略取引システム

この興味深いコーナーでは、やるべきことを理解し設計した上で、どのように取引システムを作っていくかを学びます。まずは、ADの現在値のみを返すシンプルなADシステムを作り、戦略のベースとします。以下はそのコーディング方法です。

  • 値を小数部で表現するdouble型でAD用の配列を作成します。
double ADArray[];
  • ArraySetAsSeries関数を使用して、現在のデータから配列を並べ替えます。
ArraySetAsSeries(ADArray,true);
  • ADDefの整数型変数を作成した後、iAD関数を使用してADを定義します。iAD関数は、AD指標のハンドルを返し、そのパラメータは(銘柄、期間、適用取引高)です。
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
  • コピーしたデータ数を返すCopyBuffer関数とそのパラメータ(指標ハンドル、バッファ番号、開始時間、停止時間、バッファ)を使用してOBVArrayにOBVDefを入力します。
CopyBuffer(ADDef,0,0,3,ADArray);
  • ADValueの整数型変数を作成後、double型の値を返すNormalizeDouble関数を使用してAD電流値を計算します。 
int ADValue=NormalizeDouble(ADArray[0],5);
  • コメント機能でチャートにコメントを生成します。
Comment("AD Value is: ",ADValue);

以下は、Simple ADのフルコードです。

//+------------------------------------------------------------------+
//|                                                    Simple AD.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()
  {
   //create an array for AD
   double ADArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(ADArray,true);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD value
   int ADValue=NormalizeDouble(ADArray[0],5);
   
   //creating a comment with AD value
   Comment("AD Value is: ",ADValue);  
  }
//+------------------------------------------------------------------+

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

ADナビゲータ

チャート上にEAをドラッグ&ドロップすることで実行できます。次のウィンドウが表示されます。

Simple ADのウィンドウ

[OK]をクリックすると、下図のようにチャートにの接続されます。

Simple ADの接続

以下は、このEAに従って生成されたコメントのテスト例です。

Simple ADのテストシグナル

EAが元のMetaTrader 5指標と同じ値を生成することを確認する必要がある場合、指標を接続してEAを同時に挿入することができます。同じであることがわかります。

Simple AD - 同じシグナル

  • 戦略1:Simple AD Movement

以下は、この戦略に従って実行され、望ましいシグナルを生成することができるEAを作成するための完全なコードです。

//+------------------------------------------------------------------+
//|                                           Simple AD 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()
  {
   //create array for AD
   double ADArray[];
   
   //sorting array from the current data
   ArraySetAsSeries(ADArray,true);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   //Comparing two values and giving signal
   //Rising AD
   if(ADCurrrentValue>ADPrevValue)
   {
      Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue);
   }
   
   //Declining AD
   if(ADCurrrentValue<ADPrevValue)
   {
      Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue);
   }  
  }
//+------------------------------------------------------------------+

以前のコードはベースコードとでは次の違いがあります。

  • 現在のADと以前のADの2つの値を計算する
int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);
  • この戦略に沿って条件を設定し、コメントを生成する
    • ADラインの上昇
if(ADCurrrentValue>ADPrevValue)
{
 Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
}
    • ADラインの下降
if(ADCurrrentValue<ADPrevValue)
{
 Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
} 

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

ADナビゲータ2

それをダブルクリックすると、次のようなウィンドウが表示されます。

Simple AD movement:ウィンドウ

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

Simple AD movementの接続

以下は、現在と前回のデータウィンドウを提示した場合の生成シグナルの例です。

ADラインの上昇

現在のデータ: 

Simple AD movement - ADの上昇 - 現在 

前回のデータ:

Simple AD movement - ADの上昇 - 前

ADの下降

現在のデータ:

Simple AD movement - ADの下降 - 現在

前回のデータ:

Simple AD movement - ADの下降 - 前

  • 戦略2:Simple AD Strength

以下は、取引戦略を実行するEAを作成するための完全なコードです。

//+------------------------------------------------------------------+
//|                                           Simple AD strength.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
void OnTick()
  {
   //Create array for AD
   double ADArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(ADArray,true);
  
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,10,ADArray);
 
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
  
   //Defining Max and Min values from the last 10 AD values
   int ADMax =ArrayMaximum(ADArray,1,10);
   int ADMin =ArrayMinimum(ADArray,1,10);
   
   //Calculating Max and Min values
   int ADMaxValue=ADArray[ADMax];
   int ADMinValue=ADArray[ADMin];

   //Comparing two values and giving signal
   //AD current is strong
   if(ADCurrrentValue>ADMaxValue)
   {
      Comment("AD Current value is strong","\n","AD current value is: ,",ADCurrrentValue,
   "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
   }
   
   //AD current is weak
   if(ADCurrrentValue<ADMinValue)
   {
      Comment("AD Current value is weak","\n","AD current value is: ,",ADCurrrentValue,
   "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
   }
  }
//+------------------------------------------------------------------+

これまでのコードは、戦略やEAに求めることとの関係で多くの相違点があり、以下はその相違点を明確にしたものです。

  • ADMaxValue、ADMinValueの整数変数を作成後、ArrayMaximum、ArrayMinimum関数でADの最大値、最小値を定義します。ArrayMaximumは、配列のシリアルを考慮して、見つかった要素のインデックスを返し、最大の要素を検索します。パラメータは、数値配列、開始するインデックス、検索する要素数です。ArrayMinimumはArrayMaximumと同じですが、最も小さい要素を検索します。
int ADMax =ArrayMaximum(ADArray,1,10);
int ADMin =ArrayMinimum(ADArray,1,10);
  • ADMaxValueとADMinValueの整数型変数を作成した後に計算する。
int ADMaxValue=ADArray[ADMax];
int ADMinValue=ADArray[ADMin];
  • 戦略の条件設定と、各条件に基づいたコメント。
    • 強いAD値
if(ADCurrrentValue>ADMaxValue)
{
 Comment("AD Current value is strong","\n","AD current value is: ,",ADCurrrentValue,
 "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
}
    • 弱いAD値
if(ADCurrrentValue<ADMinValue)
{
 Comment("AD Current value is weak","\n","AD current value is: ,",ADCurrrentValue,
 "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
}

このコードをコンパイルすると、ナビゲータでEAが利用できるようになります。

ADナビゲータ3

 

チャート上にドラッグ&ドロップすると、そのウィンドウが表示されます。

Simple AD strengthのウィンドウ

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

Simple AD strengthの接続

以下は、テストによって生成されたシグナルの例です。

強いAD

Simple AD strengthのシグナル - 強

弱いAD

Simple AD strengthのシグナル - 弱

  • 戦略3:simple AD uptrend:

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

//+------------------------------------------------------------------+
//|                                          Simple AD - uptrend.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()
  {
   //Create two arrays for AD and price
   double ADArray[];
   MqlRates PriceArray[];
   
   //sorting the two arrays
   ArraySetAsSeries(ADArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   //calculating current and previous highs
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);         
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); 
   
   //Comparing two values and giving signal
   //Strong Up move
   if(ADCurrrentValue > ADPrevValue && CurrentHighValue>PrevHighValue)
   {
      Comment("Strong Up Move During The Uptrend","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current high value is: ",CurrentHighValue,
      "\n","Previous high value is: ",PrevHighValue);    
   }   
   
   //in case of divergence
   if(ADCurrrentValue < ADPrevValue && CurrentHighValue>PrevHighValue)
   {
      Comment("Bearish Divergence","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentHighValue,
      "\n","Previous low value is: ",PrevHighValue);      
   }   
  }
//+------------------------------------------------------------------+

このコードの相違点

  • AD用のdouble型配列を作成し、MqlRates関数で価格情報を格納する配列を作成します。
double ADArray[];
MqlRates PriceArray[];

  • ArraySetAsSeries関数でAD、CopyRates関数で価格の2つの配列を並び替え、Dataに整数変数を作成した後で、MqlRates構造体の過去データを取得します。
ArraySetAsSeries(ADArray,true);
int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
  • ADの定義、AD配列を入力します。
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);

CopyBuffer(ADDef,0,0,3,ADArray);
  • 現在のAD、前回のAD、現在の高値、前回の高値を計算します。
int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);

double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);         
double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); 
  • 攻略の条件と希望するコメントを設定します。
    • 強い上昇
if(ADCurrrentValue > ADPrevValue && CurrentHighValue>PrevHighValue)
{
 Comment("Strong Up Move During The Uptrend","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current high value is: ",CurrentHighValue,
 "\n","Previous high value is: ",PrevHighValue);    
} 
    • 弱気のダイバージェンス
if(ADCurrrentValue < ADPrevValue && CurrentHighValue>PrevHighValue)
{
 Comment("Bearish Divergence","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentHighValue,
 "\n","Previous low value is: ",PrevHighValue);      
} 

このコードをコンパイルすると、ナビゲータウィンドウのExpert Advisorsフォルダに表示されます。

ADナビゲータ4

ダブルクリックで実行すると、そのウィンドウが表示されます。

Simple AD uptrendのウィンドウ

[OK]をクリックすると、チャートに接続されます。

Simple AD Uptrendの接続

以下は、現在値と前回値を持つデータウィンドウで生成されたシグナルの例です。

強い上昇

現在のデータ:

Simple AD uptrend - 強い上昇シグナル - 現在

前回のデータ:

Simple AD uptrend - 強い上昇シグナル - 前回

弱気のダイバージェンス

現在のデータ:

Simple AD uptrend - 弱気シグナル - 現在

前回のデータ:

Simple AD uptrend - 弱気シグナル - 前

  • 戦略4:Simple AD - Downtrend

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

//+------------------------------------------------------------------+
//|                                        Simple AD - downtrend.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 a string variable for signal
   string signal="";
   
   //Create two arrays for AD and price
   double ADArray[];
   MqlRates PriceArray[];
   
   //sorting the two arrays
   ArraySetAsSeries(ADArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);         
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5); 
   
   //Comparing two values and giving signal
   //Strong down move
   if(ADCurrrentValue < ADPrevValue && CurrentLowValue<PrevLowValue)
   {
      Comment("Strong Down Move During The Downtrend","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentLowValue,
      "\n","Previous low value is: ",PrevLowValue);      
   }
   
   //in case of divergence
   if(ADCurrrentValue > ADPrevValue && CurrentLowValue<PrevLowValue)
   {
      Comment("Bullish Divergence","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentLowValue,
      "\n","Previous low value is: ",PrevLowValue);      
   }  
  }
//+------------------------------------------------------------------+

このコードの違いは、同じです。

  • 本戦略の条件と本戦略に基づく必要なコメント
    • 強い下降
if(ADCurrrentValue < ADPrevValue && CurrentLowValue<PrevLowValue)
{
 Comment("Strong Down Move During The Downtrend","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentLowValue,
 "\n","Previous low value is: ",PrevLowValue);      
}
    • 強気のダイバージェンス
if(ADCurrrentValue > ADPrevValue && CurrentLowValue<PrevLowValue)
{
 Comment("Bullish Divergence","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentLowValue,
 "\n","Previous low value is: ",PrevLowValue);      
} 

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

ADナビゲータ5

チャート上にドラッグ&ドロップすると、そのウィンドウが表示されます。

Simple AD downtrendのウィンドウ

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

Simple AD Downtrendの接続

現在値と前回値のデータウィンドウでこの戦略によって生成されたシグナルの例を以下に示します。

強い下降

現在のデータ:

Simple AD downtrend - 強い下降シグナル - 現在

前回のデータ:

Simple AD downtrend - 強い下降シグナル - 前

強気のダイバージェンス

現在のデータ:

Simple AD downtrend - 強気のダイバージェンスシグナル - 現在

前回のデータ:

Simple AD downtrend - 強気のダイバージェンスシグナル - 前回


結論

今回は、出来高型指標の1つであるAD指標の話題を取り上げました。AD指標とは何か、何を測る指標なのか、どのように手動で計算すればいいのか、その考え方を学びました。AD指標を簡単な戦略で使う方法がわかりました。これらの戦略は、Simple AD Movement、Simple AD Strength、 Simple AD - Uptrend、Simple AD - Downtrendです。そして、それぞれの戦略に合わせた設計図を作成し、取引システムを構築しました。その後、MQL5で各戦略のEAを作成し、MetaTrader5取引プラットフォームで実行することで取引システムを実装する方法を学び、各戦略で生成されるシグナルの例を確認しました。ターミナルでは、これらの戦略を自動化してシグナルを発生させることができます。これは素晴らしい機能です。コンピューターが私たちに代わって取引をおこない、少なくとも、有害な感情を伴わずに取引の決定を強化するのに役立つ、明確で正確かつ迅速な洞察を提供します。

戦略はすべての人に適したものはないか、少なくとも、より良い結果を得るための最適化が必要である可能性があるため、実際の口座で使用する前に戦略をテストする必要があることを再度言及することが重要です。この記事とこの連載の他の記事の主な目的は、最も人気のあるテクニカル指標に対してMQL5を使用して簡単な戦略をコード化する方法を学ぶことです。実践はあらゆる学習プロセスにおいて重要な要素です。得られた知識を応用してご自分でコーディングしてみてください。

この記事がこのテーマあるいは関連するトピックに関して有用で洞察に満ちたものであることを願っています。同じような記事をもっと読みたい方は、この連載の過去の記事を見て、最も人気のあるテクニカル指標に基づいて簡単な取引システムを設計する方法を学ぶことができます。

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

ビデオ:MetaTrader5とMQL5での簡単な自動売買の設定方法 ビデオ:MetaTrader5とMQL5での簡単な自動売買の設定方法
このビデオコースでは、MetaTrader 5をダウンロード、インストールして自動売買のために設定する方法を学びます。また、チャートの設定や自動売買のオプションの調整方法についても学びます。最初のバックテストをおこないます。このコースの終わりには、画面の前に座らなくても、24時間365日自動的に取引できるエキスパートアドバイザー(EA)をインポートする方法が分かります。
一からの取引エキスパートアドバイザーの開発(第17部):Web上のデータにアクセスする(III) 一からの取引エキスパートアドバイザーの開発(第17部):Web上のデータにアクセスする(III)
今回は、Webからデータを取得し、エキスパートアドバイザー(EA)で使用する方法について引き続き考えていきます。今回は、代用できるシステムの開発に進みます。
DoEasy - コントロール(第7部):テキストラベルコントロール DoEasy - コントロール(第7部):テキストラベルコントロール
今回の記事では、WinFormsテキストラベルコントロールオブジェクトのクラスを作成します。このようなオブジェクトはコンテナをどこにでも配置できますが、独自の機能はMS Visual Studioテキストラベルの機能を繰り返します。表示されるテキストのフォントパラメータは設定できます。
チャート上のインタラクティブなコントロールを備えたインジケーター チャート上のインタラクティブなコントロールを備えたインジケーター
この記事は、インジケーターインターフェイスに関する新しい視点を提供します。利便性を重視していきます。何年にもわたって数十の異なる取引戦略を試し、数百の異なるインジケーターをテストしてきた結果、この記事で共有したいいくつかの結論に達しました。