
ADXによる取引システムの設計方法を学ぶ
はじめに
この記事では、新しいテクニカル取引ツールを紹介します。このツールは、より良い取引をおこない、市場の動きを理解するのに役立つ、最も便利で有意義なツールの1つです。テクニカル指標の最も有用な機能の1つは、価格が示すことができないものを示すことができるということであり、これはすべての指標の計算に基づいて行われます。これらの有用な指標の1つは、平均方向性指数(ADX)指標です。この指標を詳しく学習してよく理解し、単純な戦略を通じて簡単に使用する方法を学びます。何かを深く学ぶと、より多くの洞察を得ることができ、より適切に使用できるようになるからです。
それを以下のトピックを通して学んでいきます。
「ADXの定義」を通じて、ADX (Average Directional Index)とは何か、何を測定する指標なのか、そしてどのように手動で計算すれば深く理解でき、利益につながる使い方ができるのかを詳しく解説していきます。そして、指標とその仕組みをよく理解した上で、取引で使用できる簡単な戦略を学びます。これは「ADX戦略」の後で知られることになります。そして、「ADX戦略の設計図」では、この戦略の取引システムを設計するためのコードとして書くのに役立つ設計図をどのように設計するかを学びます。そして、この戦略を使った取引システムの書き方を、ADX取引システムというトピックを通して学びます。
MetaTrader 5取引プラットフォームとMetaTrader 5に内蔵されているMetaQuotes言語エディタを使用します。これはhttps://www.metatrader5.com/ja/downloadからダウンロードできます。
MetaTrader 5をダウンロードし、インストールすると、取引プラットフォームとして以下の画像と同じものが表示されます。
この記事に書かれていることをすべて自分で実践してみることをお勧めします。それによって、早くスキルが身につき、深い理解が得られると思います。練習はあらゆる開発にとって重要な鍵であるため、すべての概念を適用して自分でテストすることをお勧めします。テクニカルツールを使用して取引システムを設計する方法を学び、うまく取引できるように、EAまたはプログラムを作成するためのコードを記述してMQL5でそれをおこなうためです。また、テストして適用するためのデモ口座を持っていることも不可欠です。MetaTrader 5 ターミナルから直接デモ口座を解説するには、 [ファイル] タブを押して、[口座を開]を選択し、自分の証券会社の名前を入力してこのデモ口座を開設します。または、[MetaQuotes]->[次へ]->[デモ口座を開いてリスクなしのバーチャルマネーで取引する]->[次へ]を選択して、データを入力して口座の要件を確認し、[次へ]->[同意する]->[次へ]をクリックするとデモ 口座の資格情報が表示されるので、確認して[完了]をクリックします。
[ファイル]タブ→[取引口座にログイン]を選択し、デモ口座の認証情報を入力して[OK]をクリックして開くと、この口座を使ってバーチャルに取引できるようになります。
免責条項:すべての情報は、教育目的でのみ使用されており、取引目的または助言のために作成されたものではありません。すべての情報は、いかなる種類の結果も保証するものではありません。読者がこれらの資料を自分の取引口座で使用する場合、自己責任でおこなってください。
さて、取引結果をより良いものにするために、新しいツールの学習を始めましょう。
ADXの定義
このセクションでは、テクニカルトレーディングの世界で最も人気のある指標の1つについて、その内容、測定方法、計算方法を詳しく説明し、それをよく理解した上で、利用できる戦略や新しいアイデアでそれをうまく利用できるようにします。この指標はADX (Average Directional Index)といい、ウェルス・ワイルダーが開発したもので、トレンドを測定し、トレンドがあるかどうかを確認するものです。その計算によって、期間の取引範囲と前の期間の取引範囲が比較されるためです。
この比較の結果、次があることがわかります。
- 上昇または下降(正の方向への動き、負の方向への動き)
- 進退なし
- 進退
正の方向の動きがあれば、ある期間の高値が前期の高値を上回っており、その記号は(+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のみが考慮されます。
2 - TR (True Range)を算出する+DM<-DM = -DMのみが考慮されます。
+DM=-DM = 両方とも無視されます。
この手順では、DMを計算した後、(TR)を計算し、以下の中から最も大きい値を採用します。
- 現在の高値と安値の差
- 現在の高値と前回の終値の差
- 現在の安値と前回の終値の差
最初の14期間(+DM、-DM、TR)を計算した後、以下の計算式で14以降の値を計算することになります。
4 - 14期間+DIと-DIを計算する+DM 15 = (前回の+DM - (前回の+DM/14)) + 現在の+DM
-DM 15 = (前回の-DM - (前回の-DM/14)) + 現在の-DM
TR 15 = (前回のTR - (前回のTR/14)) + 現在のTR
+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 = 現在の安値 - 前回の安値
2 - 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日目)
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)
7- DX:を計算する
DX = 100*((+DIと-DIの差)/(+DIと-DIの和))
8- ADXを計算する(ADXを計算するために多くの14日間を必要とするため、最初の計算は28)
ADX=DXの14期間平均→DIの平均(15日目:28日目)
さて、ADXを手動で計算しましたが、MetaTrader 5に組み込まれているため、計算する必要はありません。ADXとその仕組みの理解を深めるために計算方法を学んだだけです。この指標をチャートに挿入するには、取引ターミナルで利用可能な指標の中から[挿入]-->[インディケータ--]>[トレンド系]-->[Average Directional Movement Index]を選択します。
[Average Directional Movement Index]を選択すると、以下のウィンドウが表示されます。
- 希望する期間を決定する
- ADXの線の色を決定する
- ADXの線の種類を決定する
- ADXの線の太さを決定する
- +DIの線の色を決定する
- +DIの線の種類を決定する
- +DIの線の太さを決定する
- -DIの線の色を決定する
- -DIの線の種類を決定する
- -DIの線の太さを決定する
ADXのパラメータを決定して[OK]を押すと、チャートに接続されます(下図はその例です)。
ADX戦略
このセクションでは、ADX指標で使用できる簡単な戦略を紹介します。ADX指標には、簡単な戦略から複雑な戦略まで多くの戦略がありますが、この記事では、指標の背後にある概念を理解し、その概念に基づいて取引システムを設計する方法を学ぶための簡単な戦略についてだけ言及したいと思います。
ADX指標の計算の背後にある概念に基づいて、トレンドがあるかどうかとトレンドの種類(上向きまたは下向き)が何であるかを示します。ADX曲線が上昇している場合はトレンドがあることを意味し、逆にADX曲線が下降している場合はトレンドがないことを意味します。しかし、次のように、最初にトレンドを定義する必要があります。
トレンドの定義
参考までに、3 つのタイプのトレンド (上昇トレンド、下降トレンド、横ばい) があることを知っているのと同じように、プライスアクションはトレンドタイプを示すので非常に重要です。
上昇トレンド:価格が安値と高値を形成し、価格が上昇し、買い手がこの市場の動きをコントロールするのを見ることができるのは、市場の方向性または傾向です。
この相場の方向性やトレンドの形成は、次の図のようになります。
次の図は、上昇トレンドの相場からの例です。
下降トレンド:価格が高値と安値を形成し、価格が下降し、売り手がこの市場の動きで市場をコントロールするのを見ることができるため、これは市場の方向性またはトレンドです。
この相場の方向性やトレンドの形成は、次のようになります。
次の図は、市場の下降トレンドの一例です。
横ばい:上昇トレンド、下降トレンド以外の相場で、明確な方向性がなく、買い手と売り手のバランスが取れている状態を指します。
この相場の方向性を示すいくつかの形成は以下の通りです。
以下は、相場からの横ばいの例です。
トレンドを特定した後で、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と等しい場合は、何もしません。
次の図は、この戦略の設計図です。
- 戦略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より大きくない場合は何もしません。
次の図は、この戦略の設計図です。
- 戦略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取引システム
この最も興味深い部分では、これらの単純な戦略をMetaTrader 5取引ターミナルで使用するための取引システムを作成する方法を学び、組み込みのMetaQuotes言語エディター(MQL5)を使用してこの取引のコードを記述します。MetaTrader 5取引ターミナルが開いている間にこのMetaQuotes言語エディターを開くには、F4を押すか、MetaTrader 5の[ツール]タブをクリックして、[MetaQuotes言語エディター]を選択します。
次の図は、その方法を示すものです。
または、IDEボタンを押すことができます。
その後、以下のようなMetaQuotes言語エディターのウィンドウが表示されます。
次に、[新規作成]をクリックして、取引システムを作成するための新しいファイルを開きます。
次に、次のウィンドウが開きます。
新しいファイルの種類を指定するオプションは次のとおりです。
- EA:EAとは、あらかじめ設定された条件に従って取引処理を自動化するためのターミナル内のプログラムです。
- カスタム指標:取引判断を改善するためにチャートを読み取るためのプログラムコードです。
- スクリプト:実行後、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取引ターミナルのナビゲータウィンドウで見ることができます。以下はそれを示すためのものです。
ファイルをダブルクリックするかチャート上にドラッグ&ドロップすると、次のようなウィンドウが表示されます。
[アルゴリズム取引を許可する]にチェックを入れて[OK]ボタンを押すと、チャートにファイルが接続されます。
この取引システムに従った結果が表示されます。次の図がその例です。
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); } //+------------------------------------------------------------------+
このプログラムを書いた後、ナビゲータウィンドウでそのファイルを見つけることができます。
ファイルをダブルクリックするかチャート上にドラッグ&ドロップすると、次のようなウィンドウが表示されます。
[アルゴリズム取引を許可する]にチェックを入れて[OK]ボタンを押すと、チャートにプログラムが接続されます。
その後、このEAの通りにチャートに値が表示されるようになります。
次に、ここで紹介した戦略(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を作成した後、ナビゲータウィンドウでそれを見つけることができます。
ダブルクリックまたはドラッグ&ドロップでチャート上に配置すると、次のようなウィンドウが表示されます。
[アルゴリズム取引を許可する]にチェックを入れて[OK]ボタンを押すと、チャートにEAが接続されます。
その後、その条件に応じた性能を発揮することができます。以下はテスト結果の一例です。
- ADXが上昇しているとき、EAは次の図のようなコメントとして値を表示することができます。
- ADXが下降しているとき、EAは次の図のようなコメントとして値を表示することができます。
- 戦略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を見つけることができます。
ダブルクリックまたはドラッグ&ドロップでチャート上に配置すると、以下のようなウィンドウが表示されます。
[アルゴリズム取引を許可する]にチェックを入れて[OK]ボタンを押すと、EAが接続されます。
その後、戦略に沿って表示されるシグナルを見つけることができます。
- 買いシグナル
- 現在のADXの値(新しい行)
- 前回のADXの値(新しい行)
- +DI値(新しい行)
- -DI値(新しい行)
- 戦略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のファイルを見つけることができます。
ファイルをダブルクリックするかチャート上にドラッグ&ドロップすると、次のようなウィンドウが表示されます。
[アルゴリズム取引を許可する]にチェックを入れて[OK]ボタンを押すと、EAがチャート接続されます。次の画像は例です。
そして、下降トレンドの戦略に沿って表示されるシグナルを見つけることができます。
- 売りシグナル
- 現在のADXの値(新しい行)
- 前回のADXの値(新しい行)
- +DI値(新しい行)
- -DI値(新しい行)
次の図は、この戦略のテストに沿って生成されたシグナルの例です。
結論
すでに言及したこの記事のトピックを経て、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





- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索