ADXによる取引システムの設計方法を学ぶ

Mohamed Abdelmaaboud | 8 8月, 2022

はじめに

この記事では、新しいテクニカル取引ツールを紹介します。このツールは、より良い取引をおこない、市場の動きを理解するのに役立つ、最も便利で有意義なツールの1つです。テクニカル指標の最も有用な機能の1つは、価格が示すことができないものを示すことができるということであり、これはすべての指標の計算に基づいて行われます。これらの有用な指標の1つは、平均方向性指数(ADX)指標です。この指標を詳しく学習してよく理解し、単純な戦略を通じて簡単に使用する方法を学びます。何かを深く学ぶと、より多くの洞察を得ることができ、より適切に使用できるようになるからです。

それを以下のトピックを通して学んでいきます。

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

「ADXの定義」を通じて、ADX (Average Directional Index)とは何か、何を測定する指標なのか、そしてどのように手動で計算すれば深く理解でき、利益につながる使い方ができるのかを詳しく解説していきます。そして、指標とその仕組みをよく理解した上で、取引で使用できる簡単な戦略を学びます。これは「ADX戦略」の後で知られることになります。そして、「ADX戦略の設計図」では、この戦略の取引システムを設計するためのコードとして書くのに役立つ設計図をどのように設計するかを学びます。そして、この戦略を使った取引システムの書き方を、ADX取引システムというトピックを通して学びます。

MetaTrader 5取引プラットフォームとMetaTrader 5に内蔵されているMetaQuotes言語エディタを使用します。これはhttps://www.metatrader5.com/ja/downloadからダウンロードできます。

MetaTrader 5をダウンロードし、インストールすると、取引プラットフォームとして以下の画像と同じものが表示されます。

MT5 

この記事に書かれていることをすべて自分で実践してみることをお勧めします。それによって、早くスキルが身につき、深い理解が得られると思います。練習はあらゆる開発にとって重要な鍵であるため、すべての概念を適用して自分でテストすることをお勧めします。テクニカルツールを使用して取引システムを設計する方法を学び、うまく取引できるように、EAまたはプログラムを作成するためのコードを記述してMQL5でそれをおこなうためです。また、テストして適用するためのデモ口座を持っていることも不可欠です。MetaTrader 5 ターミナルから直接デモ口座を解説するには、 [ファイル] タブを押して、[口座を開]を選択し、自分の証券会社の名前を入力してこのデモ口座を開設します。または、[MetaQuotes]->[次へ]->[デモ口座を開いてリスクなしのバーチャルマネーで取引する]->[次へ]を選択して、データを入力して口座の要件を確認し、[次へ]->[同意する]->[次へ]をクリックするとデモ 口座の資格情報が表示されるので、確認して[完了]をクリックします。

[ファイル]タブ→[取引口座にログイン]を選択し、デモ口座の認証情報を入力して[OK]をクリックして開くと、この口座を使ってバーチャルに取引できるようになります。

免責条項:すべての情報は、教育目的でのみ使用されており、取引目的または助言のために作成されたものではありません。すべての情報は、いかなる種類の結果も保証するものではありません。読者がこれらの資料を自分の取引口座で使用する場合、自己責任でおこなってください。

さて、取引結果をより良いものにするために、新しいツールの学習を始めましょう。


ADXの定義

このセクションでは、テクニカルトレーディングの世界で最も人気のある指標の1つについて、その内容、測定方法、計算方法を詳しく説明し、それをよく理解した上で、利用できる戦略や新しいアイデアでそれをうまく利用できるようにします。この指標はADX (Average Directional Index)といい、ウェルス・ワイルダーが開発したもので、トレンドを測定し、トレンドがあるかどうかを確認するものです。その計算によって、期間の取引範囲と前の期間の取引範囲が比較されるためです。

この比較の結果、次があることがわかります。

正の方向の動きがあれば、ある期間の高値が前期の高値を上回っており、その記号は(+DM)となります。

次の図は、プライスアクションによってチャート上でどのようになるかを示しています。

+DM

また、その逆で、負の方向の動きがあれば、ある期間の安値が前期の安値を上回っっており、その記号は(-DM)となります。

次の図は、プライスアクションによってチャート上でどのようになるかを示しています。

-DM

正の方向の動きも負の方向の動きもない場合、高値は前回の高値を超えず、安値は前回の安値を超えません。

次の図は、プライスアクションによってチャート上でどのようになるかを示しています。

+DM-DMなし

正の方向への動きと負の方向への動きの両方がある場合、高値は前回の高値を超え、安値は前回の安値を超えます。

次の図は、プライスアクションによってチャート上でどのようになるかを示しています。 

 +DM-DM

どのように計算すればより多くの知見が得られるかを知るべきです。次は(ADX)の計算手順ですが、すべての値は絶対値でなければならないことに留意する必要があります。

1- +DMと-DMを計算する

この手順では、前回の動きと比較して、今回の動きが上か下かを判断します。2つのことを計算します。

(+DM=現在の高値-前回の高値)で計算されます。
(-DM=現在の安値-前回の安値)で計算されます。

そこで、計算期間ごとにチェックし、+DMか、-DMか、それ以外かを確認します。

+DM = n
-DM = 0

-DM = n

+DM = 0

場合によっては、他の、(+DMと-DM)の値がないシナリオや(+DMと-DM)の両方の値が見つかるシナリオもあります。その場合の対処法は以下の通りです。

+DM = 0

-DM = 0

DMなし

+DM>-DM = +DMのみが考慮されます。

より大きい+DM

+DM<-DM = -DMのみが考慮されます。

-より大きい-DM

+DM=-DM = 両方とも無視されます。

+DMは-DMに等しい

2 - TR (True Range)を算出する

この手順では、DMを計算した後、(TR)を計算し、以下の中から最も大きい値を採用します。

3 - 計算された14期間の合計を計算する(+DM、-DM、TR)

最初の14期間(+DM、-DM、TR)を計算した後、以下の計算式で14以降の値を計算することになります。

+DM 15 = (前回の+DM - (前回の+DM/14)) + 現在の+DM

-DM 15 = (前回の-DM - (前回の-DM/14)) + 現在の-DM

TR 15 = (前回のTR - (前回のTR/14)) + 現在のTR

4 - 14期間+DIと-DIを計算する
+DI 14 = 100*(+DM14/TR14)
-DI 14 = 100*(-DM14/TR14)

5 - +DIと-DIの差を計算する

DI 14 Diff = (+DI 14) - (-DI 14)

6 - +DIと-DIの和を計算する

DI 14 Sum = (+DI 14) + (-DI 14)

7 - DXを計算する

DX = 100*((+DIと-DIの差)/(+DIと-DIの和))
8 - ADXを計算する
ADX = 14期間DXの平均

前の手順でADXを計算することができました。次のデータがある場合、これらの手順を適用する例を見てみましょう。

高値 安値 終値
1 110 90 100
2 140 120 130
3 160 120 140
4 150 110 130
5 140 100 130
6 150 130 140
7 170 150 160
8 180 160 170
9 170 150 155
10 170 130 140
11 180 155 160
12 190 175 180
13 220 190 190
14 230 200 200
15 215 205 210
16 200 190 200
17 195 180 190
18 195 180 185
19 210 185 195
20 220 190 200
21 233 195 208
22 246 200 216
23 258 205 223
24 271 210 231
25 283 215 238
26 296 220 246
27 308 225 253
28 321 230 261
29 333 235 268
30 346 240 276

前回のデータに対して、ADXを計算してみましょう。

1- +DMと-DMを計算する

+DM = 現在の高値 - 前回の高値

-DM = 現在の安値 - 前回の安値

例:DM

2 - TRを計算する

以下の中から最も大きな値となります。

次の図は、TR計算後のものです。

例:TR

3 - 14期間で計算された+DM、-DM、TRの和を計算する

+DM 14 = Sum +DM 1(2日目:15日目)

-DM 14 = Sum -DM 1(2日目:15日目)

TR 14=Sum TR(2日目:15日目)

例:14 DM-TR

4 - 14期間+DIと-DIを計算する(14DIを計算するために14DMが必要なので、最初の計算は15日目からになる)

+DI14 = 100*(+DM14/TR14)

-DI14 = 100*(-DM14/TR14)


5 - +DIと-DIの差を計算する

DI 14 Diff = (+DI 14) - (-DI 14)

6 - +DIと-DIの和を計算する

DI 14 Sum = (+DI 14) + (-DI 14)

DI14 - 差と和

7- DX:を計算する

DX = 100*((+DIと-DIの差)/(+DIと-DIの和))


DX

8- ADXを計算する(ADXを計算するために多くの14日間を必要とするため、最初の計算は28)

ADX=DXの14期間平均→DIの平均(15日目:28日目)


ADX

さて、ADXを手動で計算しましたが、MetaTrader 5に組み込まれているため、計算する必要はありません。ADXとその仕組みの理解を深めるために計算方法を学んだだけです。この指標をチャートに挿入するには、取引ターミナルで利用可能な指標の中から[挿入]-->[インディケータ--]>[トレンド系]-->[Average Directional Movement Index]を選択します。

ADXの挿入

[Average Directional Movement Index]を選択すると、以下のウィンドウが表示されます。

ADXウィンドウ

このウィンドウは、ADX指標のパラメータを設定するためのもので、次と同じです。
  1. 希望する期間を決定する
  2. ADXの線の色を決定する
  3. ADXの線の種類を決定する
  4. ADXの線の太さを決定する
  5. +DIの線の色を決定する
  6. +DIの線の種類を決定する
  7. +DIの線の太さを決定する
  8. -DIの線の色を決定する
  9. -DIの線の種類を決定する
  10. -DIの線の太さを決定する

ADXのパラメータを決定して[OK]を押すと、チャートに接続されます(下図はその例です)。

ADXの接続

ADX戦略

このセクションでは、ADX指標で使用できる簡単な戦略を紹介します。ADX指標には、簡単な戦略から複雑な戦略まで多くの戦略がありますが、この記事では、指標の背後にある概念を理解し、その概念に基づいて取引システムを設計する方法を学ぶための簡単な戦略についてだけ言及したいと思います。

ADX指標の計算の背後にある概念に基づいて、トレンドがあるかどうかとトレンドの種類(上向きまたは下向き)が何であるかを示します。ADX曲線が上昇している場合はトレンドがあることを意味し、逆にADX曲線が下降している場合はトレンドがないことを意味します。しかし、次のように、最初にトレンドを定義する必要があります。

トレンドの定義

参考までに、3 つのタイプのトレンド (上昇トレンド、下降トレンド、横ばい) があることを知っているのと同じように、プライスアクションはトレンドタイプを示すので非常に重要です。

上昇トレンド:価格が安値と高値を形成し、価格が上昇し、買い手がこの市場の動きをコントロールするのを見ることができるのは、市場の方向性または傾向です。

この相場の方向性やトレンドの形成は、次の図のようになります。

上昇トレンドの形成

次の図は、上昇トレンドの相場からの例です。

上昇トレンドの例

下降トレンド:価格が高値と安値を形成し、価格が下降し、売り手がこの市場の動きで市場をコントロールするのを見ることができるため、これは市場の方向性またはトレンドです。

この相場の方向性やトレンドの形成は、次のようになります。

下降トレンドの形成

次の図は、市場の下降トレンドの一例です。

下降トレンドの例

横ばい:上昇トレンド、下降トレンド以外の相場で、明確な方向性がなく、買い手と売り手のバランスが取れている状態を指します。

この相場の方向性を示すいくつかの形成は以下の通りです。

横ばいフォーム1

横ばいフォーム2

横ばいフォーム3

横ばいフォーム4

以下は、相場からの横ばいの例です。

横ばいライブ例

トレンドを特定した後で、ADXの概念に従って使える簡単な戦略を見ていきます。

ADX曲線の動きを利用した戦略です。

現在のADX値>前回のADX値=ADXが上昇している

現在のADX値<前回のADX値=ADXが下降している

この戦略によると、上昇トレンドの時に

ADX値>25 かつ 現在のADX値>前回のADX値 →+DI値>-DI値=買う

この戦略によると、下降トレンドの時に

ADX値>25 かつ 現在のADX値>前回のADX値 → + DI値<-DI値= 売る


ADX戦略の設計図

このセクションでは、取引システムを作るために、各戦略の設計図を作成します。この設計図では、プログラムやシステムに必要なことを段階的に整理して設定します。

この戦略によると、現在のADX値と前回のADX値をティックごとにチェックし、現在のADX値が前回のADX値よりも大きいかどうかを判断します。現在のADXが前回の値よりも大きい場合はチャート上に「ADX is rising」、「ADX Value is (n)」、「ADX Value last is (n)」と3行のコメントを表示します。現在のADXの値が前回のADXより小さい場合、チャートに「ADX is falling」というコメントを表示します。現在のADXが前回のADXと等しい場合は、何もしません。

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

ADXの動きの設計図

この戦略によると、現在のADX値、前回のADX値、+DI値、-DI値をティックごとにチェックし、現在のADX値が25より大きくで前回のADX値より大きいかどうかを判断します。両方より大きくない場合は、何もしません。両方より大きい場合は、+DIと-DIをチェックして、+DIが-DIより大きい場合は、買いシグナル、Value is (n)、ADX Value last is (n)、+DI Value is (n)、-DI Value is (n)とコメントし、+DIが-DIより大きくない場合は何もしません。

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

ADX - 買いシグナルの設計図

この戦略によれば、現在のADX値、前回のADX値、+DI値、-DI値をティックごとにチェックし、現在のADX値が25より小さくて前回のADX値より小さいかどうかを判断します。両方より小さくない場合は、何もしません。両方より小さい場合は、+DIと-DIをチェックして、+DIが-DIより小さい場合は、売りシグナル、ADX Value is (n)、ADX Value last is (n)、+DI Value is (n)、-DI Value is (n)とコメントし、+DIが-DIより小さくない場合は何もしません。

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

ADX - 売りのシグナルの設計図

ADX取引システム

この最も興味深い部分では、これらの単純な戦略をMetaTrader 5取引ターミナルで使用するための取引システムを作成する方法を学び、組み込みのMetaQuotes言語エディター(MQL5)を使用してこの取引のコードを記述します。MetaTrader 5取引ターミナルが開いている間にこのMetaQuotes言語エディターを開くには、F4を押すか、MetaTrader 5の[ツール]タブをクリックして、[MetaQuotes言語エディター]を選択します。

次の図は、その方法を示すものです。

MetaEditorを開く1

または、IDEボタンを押すことができます。

MetaEditorを開く2

その後、以下のようなMetaQuotes言語エディターのウィンドウが表示されます。

MetaEditorウィンドウ

次に、[新規作成]をクリックして、取引システムを作成するための新しいファイルを開きます。

MetaEditorウィンドウ2

次に、次のウィンドウが開きます。

MetaEditor - 新規ファイル

新しいファイルの種類を指定するオプションは次のとおりです。

  1. EA:EAとは、あらかじめ設定された条件に従って取引処理を自動化するためのターミナル内のプログラムです。
  2. カスタム指標:取引判断を改善するためにチャートを読み取るためのプログラムコードです。
  3. スクリプト:実行後、1回だけある作業をおこなうことができるプログラムです。

ここで、EAファイルを選択して、取引システムを作成します。

まず、現在のADXの値をチャート上にコメントとして表示できるプログラムを作成します。その手順は以下の通りです。

double PriceArray[];
参照による配列とフラグ

ArraySetAsSeries(PriceArray,true);

銘柄を文字列、期間を時間枠、期間をADXの期間で指定すると、以下のようになります。
int ADXDef = iADX(_Symbol,_Period,14);
指標ハンドル、buffer_num(指標バッファ番号)、start_time(開始日時)、stop_time(終了日時)、buffer[](対象配列)
CopyBuffer(ADXDef,0,0,3,PriceArray);
double value(正規化された数値)、integer digits(小数点以下の桁数)
double ADXValue=NormalizeDouble(PriceArray[0],2);
任意の値をカンマで区切ります。その一部を改行する場合は、改行記号 「\n」を使用します。 
Comment("ADX Value is ", ADXValue);

このプログラムの全コードをご覧になりたい場合は、以下を通してください。

//+------------------------------------------------------------------+
//|                                            Simple ADX 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 an array for prices
   double PriceArray[];

//sort price array from current data
   ArraySetAsSeries(PriceArray,true);

//identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);

//Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,PriceArray);

//Getting value of current data
   double ADXValue=NormalizeDouble(PriceArray[0],2);

//Comment with ADX value
   Comment("ADX Value is ", ADXValue);
  }
//+------------------------------------------------------------------+

プログラムを書いた後は、このプログラムファイルをMetaTrader 5取引ターミナルのナビゲータウィンドウで見ることができます。以下はそれを示すためのものです。

ナビゲータ

ファイルをダブルクリックするかチャート上にドラッグ&ドロップすると、次のようなウィンドウが表示されます。

Simple ADXウィンドウ

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

Simple ADXの接続

この取引システムに従った結果が表示されます。次の図がその例です。

Simple ADX

ADX値の現在値を表示するのに役立つものを作成したので、次に、取引システムの設計に役立つ何かを追加する必要があります。 次のように、ADX指標の他の値 (+DI 値、および -DI 値) を表示するのに役立つプログラムをコーディングすることにします。

double ADXArray[];
double PDIArray[];
double NDIArray[];
ArraySetAsSeries(ADXArray,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);

int ADXDef = iADX(_Symbol,_Period,14);
CopyBuffer(ADXDef,0,0,3,ADXArray);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
double ADXValue=NormalizeDouble(ADXArray[0],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
Comment("ADX Value is ", ADXValue,"\n""+DI Value is ", 
PDIValue,"\n""-DI Value is ", NDIValue);

以下は、このEAの完全なコードです。

//+------------------------------------------------------------------+
//|                                  Simple ADX System - 3 lines.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 an array for prices
   double ADXArray[];
   double PDIArray[];
   double NDIArray[];
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);

   //identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray[0],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with ADX value
   Comment("ADX Value is ", ADXValue,"\n""+DI Value is ", 
   PDIValue,"\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

このプログラムを書いた後、ナビゲータウィンドウでそのファイルを見つけることができます。

ナビゲータ2

ファイルをダブルクリックするかチャート上にドラッグ&ドロップすると、次のようなウィンドウが表示されます。

Simple ADX - 3 linesウィンドウ

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

Simple ADX - 3 linesの接続

その後、このEAの通りにチャートに値が表示されるようになります。

Simple ADX - 3 lines

次に、ここで紹介した戦略(ADXの動き、上昇トレンド、下降トレンド)に対して、取引システムを作成することにします。

現在のADX値>前回のADX値=ADXが上昇

現在のADX値<前回のADX値=ADXが下降

以下で、それができるプログラムまたはEAのコードを書きます。

double ADXArray0[];
double ADXArray1[];

ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);

int ADXDef = iADX(_Symbol,_Period,14);
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
if (ADXValue>ADXValuelast)
      {
       Comment("ADX is rising","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
   
if (ADXValue<ADXValuelast)
     {
      Comment("ADX is falling","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }

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

//+------------------------------------------------------------------+
//|                             Simple ADX System - ADX 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()
  {
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];

   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
      
   //identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
   
   //ADX movement signal
   if (ADXValue>ADXValuelast)
      {
         Comment("ADX is rising","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
   
   if (ADXValue<ADXValuelast)
     {
         Comment("ADX is falling","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
  }
//+------------------------------------------------------------------+

このEAを作成した後、ナビゲータウィンドウでそれを見つけることができます。

ナビゲータ - adx3

ダブルクリックまたはドラッグ&ドロップでチャート上に配置すると、次のようなウィンドウが表示されます。

ADX movementウィンドウ 

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

ADX movementを接続

その後、その条件に応じた性能を発揮することができます。以下はテスト結果の一例です。

ADX movement - 上昇 


ADX movement2.png

ADX値>25 かつ 現在のADX値>前回のADX値 →+DI値>-DI値=買う

以下は、この戦略を実行するためのEAの作成方法です。

string signal="";
double ADXArray0[];
double ADXArray1[];
double PDIArray[];
double NDIArray[];
ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);
int ADXDef = iADX(_Symbol,_Period,14);
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
if (ADXValue>25&&ADXValue>ADXValueLast)
   if(PDIValue>NDIValue)
   {
    signal = "BUY";
   }
Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
"\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
"\n""-DI Value is ", NDIValue);

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

//+------------------------------------------------------------------+
//|                     Simple ADX System - Uptrend - Buy Signal.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 variable for signal
   string signal="";
   
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];
   double PDIArray[];
   double NDIArray[];
   
   //identify ADX, positive DI, negative DI
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with Buy signal according to Buy Strategy
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue>NDIValue)
      {
         signal = "BUY";
      }
      
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

その後、ナビゲータウィンドウでEAを見つけることができます。

ナビゲータ - ADX4

ダブルクリックまたはドラッグ&ドロップでチャート上に配置すると、以下のようなウィンドウが表示されます。

ADX - Uptrendのウィンドウ

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

ADX - Uptrendの接続

その後、戦略に沿って表示されるシグナルを見つけることができます。

次の図は、この戦略またはEAのテスト結果の例です。


ADX - 買いシグナル

ADX値>25 かつ 現在のADX値>前回のADX値 → + DI値<-DI値= 売る

この戦略を実行するEAの作成方法は以下の通りです。

//+------------------------------------------------------------------+
//|                Simple ADX System - Downtrend - Sell Strategy.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 variable for signal
   string signal="";
   
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];
   double PDIArray[];
   double NDIArray[];
   
   //identify ADX, positive DI, negative DI
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with Buy signal according to Buy Strategy
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue<NDIValue)
      {
         signal = "SELL";
      }
      
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

これらは、上昇トレンド戦略の手順と同じですが、次のような違いがあります。

    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue<NDIValue)
      {
         signal = "SELL";
      }
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);

この戦略のコードを書いたら、ナビゲータウィンドウでEAのファイルを見つけることができます。

ナビゲータ - ADX5

ファイルをダブルクリックするかチャート上にドラッグ&ドロップすると、次のようなウィンドウが表示されます。

ADX - 下降トレンドのウィンドウ 

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

ADX - 下降トレンドの接続

そして、下降トレンドの戦略に沿って表示されるシグナルを見つけることができます。

次の図は、この戦略のテストに沿って生成されたシグナルの例です。

ADX - 売りシグナル

結論

すでに言及したこの記事のトピックを経て、ADXとは何か、何を測定するのか、どのように手動で計算するのかが分かったので、人気で便利な指標の一つであるADX指標を詳しく知り、それを使って取引システムを設計する方法が分かったと思います。ADX指標を元にした、上昇トレンド時、下降トレンド時の簡単な戦略を知り、これらの戦略の設計図を作成し、取引システムを一歩ずつ設計してプログラムに正確に何をさせる必要があるかを理解するのに役立てました。このADX戦略に基づいて自動的に動作する取引システムを設計する方法と、この取引戦略のコードをMQL5(MetaQuotes Language)で記述する方法がわかりました。

ADX指標は、簡単なものから複雑なものまで、取引に使用できる多くの戦略がありますが、ここでは、指標の基本的な概念と記事の基本的な概念を学ぶための簡単な戦略のみを挙げ、主な目的は、MetaTrader 5取引プラットフォームで使用するために、MQL5によって、テクニカルなアプローチに基づいて取引戦略を学び、その取引システムを設計することです。

取引に使える便利なツールや戦略はたくさんあります。これらのツールは個別に使用することも、有効なものを組み合わせて組み合わせることで、より良い結果を得ることができます。 これは、テクニカル分析の最も有用な機能の 1 つです。さまざまな概念に基づくさまざまなツールがあり、取引決定を強化して取引からより良い結果が得られるからです。いくつかの簡単な戦略で使用することができる他の一般的な指標と、これらの戦略に基づいてMetaTrader 5で使用するための簡単な取引システムをMQL5によって設計する方法についての私の以前の記事を読むことをお勧めします。私たちの使命は、これらの概念やツールを学び、何が自分の取引スタイルやプランに適しているかを確認することです。多くの戦略がありますが、その有用さは人によって違います。すべての人は自分の取引戦略に基づいて取引計画を立てる必要があります。

この段階でプログラミングが非常に役に立つのは、さまざまな理由から、それを簡単に、スムーズに、そして正確におこなうことができるからです。また、収益性の高い戦略を見つけたら、その取引システムを設計し、設計されたプログラムの条件に従ってコンピュータが自動的に作業するようにすることも可能です。プログラミングは、取引プロセスにも関与しかねない有害な感情を回避することができるので、うまく取引するための最も重要な鍵の1つである規律を持って取引するのに役立ちます。プログラミングやMQL5を学ぶことは、これらの目標を達成するために役に立つので、良いことだと思います。

この記事が、新しいアイデアに目を向け、記事のトピックまたは関連するトピックについて洞察を与えて、取引結果を改善して継続的により良い結果を得るのに役立つことによって、読者取引に役立つことを願っています。 取引の主な目的は、良い結果を得て利益の一貫性を達成することであり、この記事がこの貴重な目標を達成するのに役立つことを願っています.