AD(蓄積/分散、Accumulation/Distribution)による取引システムの設計方法を学ぶ
はじめに
この連載は、最も人気のあるテクニカル指標を詳しく学び、シンプルな戦略の形で応用することを目的としています。これらの戦略の取引システムはMQL5を使用して設計され、MetaTrader 5取引プラットフォームで実行されます。今回はAD指標について学習します。これは、商品の別の視点を示すことができる新しい出来高に基づいたテクニカル指標です。この指標を次のトピックを通してカバーしていきます。
まず、この新しいテクニカル指標について、何を測定しているのか、また、どのように使用してどのように手動で計算するのかを詳しく学び、その背後にある主な概念を理解します。そして、それを基に取引システムを設計していきます。概念をよりよく理解するために、この計算を例に応用します。AD指標の基本を詳しく学んだ後は、シンプルな戦略でどのように使えるかを学びます。そして、言及された各戦略の設計図を作成し、その取引システムを作成するのに役立てます。言及されたすべてのシンプルな戦略のすべての設計図を作成したら、MetaTrader 5取引プラットフォームで実行できる取引システムを作成するためにMQL5コードを作成または記述する方法を学習するという、この記事の最も興味深い部分に到達します。
その時までに、AD指標の使い方を習得しておくことで、より詳細にカバーします。その後、シンプルな戦略の取引システムを作成します。この記事の主な目的は(この連載の他のものと同様に)、最も人気のある指標に基づいて取引システムをコーディングまたは設計する方法について、初心者プログラマに洞察を与えることです。理解を深めるのに役立つので、言及されたコードを自分で書くことによって学んだことを適用することをお勧めします。また、MetaTrader 5に組み込まれたMetaEditorでコードを書くために、MetaQuotes言語(MQL5)を使用する予定です。MetaTrader 5のインストール方法やMetaEditorの使い方を知りたい方は、前回の記事のMetaEditorでMQL5コードを書くのトピックを読んでみてください。
免責条項:すべての情報は「現状有姿」で提供され、情報提供のみを目的としており、取引目的やアドバイスを目的としたものではありません。いかなる結果も保証するものではありません。読者がこれらの資料を自分の取引口座で使用する場合、自己責任でおこなってください。
それでは、取引とMQL5に関する学習の旅でさらに前進するために、トピックを進めていきましょう。
ADの定義
ここでは、AD指標とは何か、何を測定するのか、どのように計算するのか、その背後にある概念は何なのかについて詳しく説明します。ADライン指標はマーク・チャイキンによって開発されました。これは出来高に基づいた指標です。つまり、その計算には出来高が使用され、取引全般において重要な視点である、商品に出入りする累積的な資金の流れを測定する出来高についての洞察を与えてくれます。さらに、トレンドを確認したり、反転を警告するために出来高を使用します。トレンド、その種類、そしてトレンドの見分け方について詳しく知りたい方は、前回の記事のトレンドの定義サブセクションを読んでみてください。
他の累積指標と同様、ADラインは各期間のマネーフロー量の実行合計です。この事実は、指標計算の際に非常に明確になります。以下の手順でADラインを計算する方法を見てみましょう。
ADラインの計算には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ライン値+今回のマネーフロー量を計算すると、下図と同じになります。
ADラインを手動で計算したのですが、これはAD指標の概念を理解するためにやりました。実際には計算する必要はありません。現在、AD指標を見るには、MetaTrader 5ターミナルで利用可能な指標の中から選択するだけです。
まず、MetaTrader 5を開き、[挿入]タブ→[インディケータ]→[ボリューム系]→[Accumulation/Distribution]をクリックします。
指標を選択すると、AD指標のパラメータを設定するための以下のウィンドウが表示されます。
1.出来高の種類:ティックまたはリアル
2.ADラインの色
3.ADラインの種類
4.ADラインの太さ
必要なものを決めて[OK]を押すと、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の値をコメントとしてチャートに表示することだけで、以下がそのための設計図です。
さて、ここで述べた各戦略の設計図を作成する必要があります。
- 戦略1:Simple AD Movement
取引システムが実行されている間、1ティックごとに現在のADと前回のADの2つの値を連続的に確認し、現在のものが前回より大きいかどうかを判断する必要があります。ADの上昇ライン、ADの現在値、ADの前回値をチャート上のコメントとして返す必要があります。各値は別々の行になります。一方、現在値が前回値より小さい場合、ADラインの下降、ADの現在値、ADの前回値をチャート上のコメントとして返す必要があります。各値は別々の行にあります。以下はこの取引システムを作るための設計図です。
- 戦略2:Simple AD Strength
この戦略では、3つの値から連続的に1ティックごとに約定するかどうかを確認できる売買システムを設計する必要があります。3つの値とは、現在のAD値、過去10回のAD値の最大値、過去10回のAD値の最小値です。ADの現在値が最大値より大きい場合、AD現在値、AD最大値、AD最小値という適切な通知をシステムが返すことが必要です。各値は別行に設定されます。ADの現在値が最小値を下回っている場合、AD現在値、AD最大値、AD最小値という適切な通知をシステムが返すことが必要です。各値は別行に設定されます。
そのための設計図を以下に示します。
- 戦略3:Simple AD - Uptrend
この戦略では、現在のAD、前回のAD、現在の高値、前回の高値の4つの値を確認できる取引システムを作成し、上昇トレンドの間はティックごとに確認を実行する必要がありますそして、現在のADが前回のADより大きいかどうか、現在の高値が前回の高値より大きいかどうかをシステムに判断させる必要があります。上昇トレンド中の強い上昇の動き、AD現在値、AD前回値、現在高値、前回高値を含んだチャート上のコメントとして返すシステムが必要です。各値は別行に設定されます。もう1つフラグする必要があるのは、現在のADが前回のADより小さく、現在の高値が前回の高値より大きい場合です。弱気のダイバージェンス、現在のAD、前回のAD、現在の高値,前回の高値、それぞれの値を別々の行で返すシステムが必要です。
この取引システムを作るための設計図は以下の通りです。
- 戦略4:Simple AD - Downtrend
この戦略では、現在のAD、前回のAD、現在の安値、前回の安値の4つの値を確認できる取引システムを作成し、下降トレンドの間はティックごとに確認を実行する必要があります。そして、現在のADが前回のADより小さいかどうか、現在の安値が前回の安値より小さいかどうかをシステムに判断させる必要があります。下降トレンド中の強い下降の動き、AD現在値、AD前回値、現在安値、前回安値をそれぞれ別の行でチャート上のコメントとして返すシステムが必要です。もう1つフラグする必要があるのは、現在のADが前回のADより大きく、現在の安値が前回の高値より大きい場合です。システムが、強気のダイバージェンス、現在のAD、前回のAD、現在の安値と前回の安値、そしてそれぞれの値を別々の行でコメントとして返す必要があるのです。
この取引システムを作るための設計図は以下の通りです。
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フォルダの中に表示されるようになります。
チャート上にEAをドラッグ&ドロップすることで実行できます。次のウィンドウが表示されます。
[OK]をクリックすると、下図のようにチャートにの接続されます。
以下は、このEAに従って生成されたコメントのテスト例です。
EAが元のMetaTrader 5指標と同じ値を生成することを確認する必要がある場合、指標を接続してEAを同時に挿入することができます。同じであることがわかります。
- 戦略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が表示されるようになります。
それをダブルクリックすると、次のようなウィンドウが表示されます。
[OK]を押すと、チャートに接続されます。
以下は、現在と前回のデータウィンドウを提示した場合の生成シグナルの例です。
ADラインの上昇
現在のデータ:
前回のデータ:
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が利用できるようになります。
チャート上にドラッグ&ドロップすると、そのウィンドウが表示されます。
[OK]を押すと、チャートに接続されます。
以下は、テストによって生成されたシグナルの例です。
強いAD
弱いAD
- 戦略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フォルダに表示されます。
ダブルクリックで実行すると、そのウィンドウが表示されます。
[OK]をクリックすると、チャートに接続されます。
以下は、現在値と前回値を持つデータウィンドウで生成されたシグナルの例です。
強い上昇
現在のデータ:
前回のデータ:
弱気のダイバージェンス
現在のデータ:
前回のデータ:
- 戦略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が表示されるようになります。
チャート上にドラッグ&ドロップすると、そのウィンドウが表示されます。
[OK]をクリックすると、EAがチャートに接続されます。
現在値と前回値のデータウィンドウでこの戦略によって生成されたシグナルの例を以下に示します。
強い下降
現在のデータ:
前回のデータ:
強気のダイバージェンス
現在のデータ:
前回のデータ:
結論
今回は、出来高型指標の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
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索