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

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

MetaTrader 5トレーディング | 8 8月 2022, 14:57
773 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

この記事では、新しいテクニカル取引ツールを紹介します。このツールは、より良い取引をおこない、市場の動きを理解するのに役立つ、最も便利で有意義なツールの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か、-DMか、それ以外かを確認します。

  • +DMの場合
+DM = n
-DM = 0
  • -DMの場合

-DM = n

+DM = 0

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

  • (+DMと-DM)がない場合

+DM = 0

-DM = 0

DMなし

  • (+DMと-DM)の両方がある場合、+DMと-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の概念に従って使える簡単な戦略を見ていきます。

  • 戦略1:Simple ADX System - ADXの動き

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

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

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

  • 戦略2:Simple ADX System - 上昇トレンド

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

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

  • 戦略3:Simple ADX System - 下降トレンド

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

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


ADX戦略の設計図

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

  • 戦略1:Simple ADX System - 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の動きの設計図

  • 戦略2:Simple ADX System - 上昇トレンド

この戦略によると、現在の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 - 買いシグナルの設計図

  • 戦略3:Simple ADX System - 下降トレンド

この戦略によれば、現在の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型を使用します。
double PriceArray[];
  • 「ArraySetAsSeries」関数を使用して、作成された価格配列を現在のデータから並び替えます。この関数は、成功するとTrueを、失敗するとFalseを返します(bool)。次は必要なパラメータです。
参照による配列とフラグ

ArraySetAsSeries(PriceArray,true);

  • 「iADX」関数を使用してADX指標を識別します。この関数はADXテクニカル指標のハンドルを返し、そのパラメータは次のとおりです。
銘柄を文字列、期間を時間枠、期間をADXの期間で指定すると、以下のようになります。
  • _Symbol:現在の銘柄
  • _Period:現在の時間枠
  • 14:期間
int ADXDef = iADX(_Symbol,_Period,14);
  • 「CopyBuffer」関数を使用して、作成したADX指標に従ってデータを入力し、コピーしたデータ数を返すか、エラーの場合は-1を返します。そのパラメータは次の通りです。
指標ハンドル、buffer_num(指標バッファ番号)、start_time(開始日時)、stop_time(終了日時)、buffer[](対象配列)
CopyBuffer(ADXDef,0,0,3,PriceArray);
  • ADXの値を取得するには、double型の変数「ADXValue」を「NormalizeDouble」関数を使用して作成します。この関数はあらかじめ設定した精度でdouble型の値を返します、そのパラメータは次のとおりです。 
double value(正規化された数値)、integer digits(小数点以下の桁数)
double ADXValue=NormalizeDouble(PriceArray[0],2);
  • 「comment」関数を使用して現在のADX値をコメントで表示します。そのパラメータは次のとおりです。
任意の値をカンマで区切ります。その一部を改行する場合は、改行記号 「\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 値) を表示するのに役立つプログラムをコーディングすることにします。

  • 各値(ADX値、+DI、-DI)ごとに価格配列を作成し、double型の変数を作成する
    • ADXArray:ADX値
    • PDIArray:+DI値
    • NDIArray:-DI値
double ADXArray[];
double PDIArray[];
double NDIArray[];
  • 「ArraySetAsSeries」関数を使用して、現在のデータから各値段の配列を並び替える
ArraySetAsSeries(ADXArray,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);

  • 「iADX」関数を使用してADX指標を特定する
int ADXDef = iADX(_Symbol,_Period,14);
  • 「CopyBuffer」関数を使用して、特定されたADXに応じたデータフィリングをおこなう
CopyBuffer(ADXDef,0,0,3,ADXArray);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
  • 現在のデータの値を取得し、「NormalizeDouble:」関数を使用して各値のdouble型変数を作成する
double ADXValue=NormalizeDouble(ADXArray[0],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
  • 「comment」関数を使用して、各値を改行したコメントを表示する
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の動き、上昇トレンド、下降トレンド)に対して、取引システムを作成することにします。

  • 戦略1:Simple ADX System - ADXの動き

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

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

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

  • ADX値(現在、前回)用の価格配列を作成する
    • ADXArray0:現在のADXの値
    • ADXArray1:前回のADX値
double ADXArray0[];
double ADXArray1[];

  • 現在のデータから価格配列を並び替える
ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);

  • ADXを特定する
int ADXDef = iADX(_Symbol,_Period,14);
  • ADXに応じたデータを入力する
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
  • 変数を作成した後に値を取得する
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
  • ADXの値に応じて、ADXの動きの条件を設定する
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が上昇しているとき、EAは次の図のようなコメントとして値を表示することができます。

ADX movement - 上昇 


  • ADXが下降しているとき、EAは次の図のようなコメントとして値を表示することができます。

ADX movement2.png

  • 戦略2:Simple ADX System - 上昇トレンド

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

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

  • 後に計算するstring型「signal」変数を空の代入で作成する
string signal="";
  • 現在のADX値、前回のADX値、+DI値、-DI値の配列を作成する
    • ADXArray0:現在のADX値
    • ADXArray1:前回のADX値
    • PDIArray:+DI値
    • NDIArray:-DI値 
double ADXArray0[];
double ADXArray1[];
double PDIArray[];
double NDIArray[];
  • 現在のデータから価格配列を並び替える
ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);
  • ADX指標を確認する
int ADXDef = iADX(_Symbol,_Period,14);
  • 作成された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);
  • 現在のデータの値を取得する
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の接続

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

  • 買いシグナル
  • 現在のADXの値(新しい行)
  • 前回のADXの値(新しい行)
  • +DI値(新しい行)
  • -DI値(新しい行)
次の図は、この戦略またはEAのテスト結果の例です。


ADX - 買いシグナル

  • 戦略3:Simple ADX System - 下降トレンド

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の値(新しい行)
  • +DI値(新しい行)
  • -DI値(新しい行)

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

ADX - 売りシグナル

結論

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

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

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

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

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


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

DoEasy - コントロール(第4部):パネルコントロールとPadding and Dockパラメータ DoEasy - コントロール(第4部):パネルコントロールとPadding and Dockパラメータ
今回は、Paddingパラメータ(要素の四辺の内部インデント/マージン)とDockパラメータ(コンテナ内のオブジェクトの配置方法)の扱いを実装します。
DoEasy - コントロール(第3部):バインドされたコントロールの作成 DoEasy - コントロール(第3部):バインドされたコントロールの作成
本稿では、基本要素にバインドされた従属コントロールを作成します。開発は、基本的な制御機能を使用して実行されます。さらに、影を持つことができるオブジェクトに適用するとまだいくつかのロジックエラーが発生するため、グラフィック要素の影オブジェクトを少しいじります。
DoEasy - コントロール(第5部):WinForms基本オブジェクト、Panelコントロール、AutoSizeパラメータ DoEasy - コントロール(第5部):WinForms基本オブジェクト、Panelコントロール、AutoSizeパラメータ
本稿では、すべてのライブラリWinFormsオブジェクトの基本オブジェクトを作成し、Panel WinFormsオブジェクトのAutoSizeプロパティ(オブジェクトの内部コンテンツに合わせた自動サイズ変更)の実装を開始する予定です。
ストキャスティクスによる取引システムの設計方法を学ぶ ストキャスティクスによる取引システムの設計方法を学ぶ
この記事では、学習シリーズを継続します。今回は、基本的な知識の新しいブロックを構築するために、最も人気があり、便利な指標の1つであるストキャスティックスオシレータ指標を使用して取引システムを設計する方法を学びます。