記事「ADXによる取引システムの設計方法を学ぶ」についてのディスカッション - ページ 2

 
こんにちは。私はadxとdmiについて学び始めて数ヶ月になります。このためのEAがあればと思います。
 

こんにちは、モハメド、

代わりに

   double ADXArray0[];
   double ADXArray1[];
...
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);

で十分ではないでしょうか?

      double ADXArray[];
...
      double ADXValue=NormalizeDouble(ADXArray[0],2);
      double ADXValueLast=NormalizeDouble(ADXArray[1],2);

よろしく、

ファン・ルイス

Learn how to design a trading system by ADX
Learn how to design a trading system by ADX
  • www.mql5.com
In this article, we will continue our series about designing a trading system using the most popular indicators and we will talk about the average directional index (ADX) indicator. We will learn this indicator in detail to understand it well and we will learn how we to use it through a simple strategy. By learning something deeply we can get more insights and we can use it better.
 
Juan Luis De Frutos Blanco #:

こんにちは、モハメド、

代わりに

それで十分ではないですか?

よろしく、

ファン・ルイス

こんにちは、ファン、

あなたのおっしゃる通りです。


ありがとう、

 
良い記事だ。私が今作っているEAの足の1つだ。
ありがとう、モハメド。🏅🏅🏅

 
ADXのラインが25を超え、dmiプラスがdmiマイナスを上回ったとき、ローソク足の色が緑色になり、トレンドが強気であることを示すというアイデアがあります。
 
1
 

素晴らしい記事です!しかし、私は1つのエラーを発見し、ヒントの機会も見つけました。 エラーはCopyBuffersと、同じハンドルに同じバッファインデックスを 使用することです。 MQL5のインジケータハンドルは、CopyBuffer()関数の呼び出しで、対応する一意のバッファインデックスを使用して特定のバッファにのみアクセスできます


そのため

CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);


とする必要があります:

CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,1,0,2,ADXArray1);
CopyBuffer(ADXDef,2,0,3,PDIArray);
CopyBuffer(ADXDef,3,0,3,NDIArray);


インジケータ・ハンドルとバッファに関する重要なポイントは次のとおりです:
  • 一意のインデックス:各インジケーターハンドルは内部バッファーのセットを管理し、それぞれが一意のインデックス(0から始まる)によって識別されます。
  • 一つのハンドル、一つのインデックス:CopyBuffer(handle,buffer_index,・・・)を 使用する 場合 その ハンドルに関連付けられたどの単一 バッファから データをコピー するかを 指定することになります。
  • 複数の呼び出し:インジケータに複数のデータ・バッファがある場合 (例えば、チャネルの上限バンドと下限バンド)、同じハンドルを使用して、異なるバッファ・インデックス (例えば、上限バンドはインデックス 0、下限バンドはインデックス 1) で CopyBuffer() を複数回呼び出す必要があります
インデックスがそのハンドル内のデータシリーズに対する一意の識別子であるため、同じ ハンドル内の同じ バッファインデックスに対して、何らかの方法で異なるデータを指す2つの別々のCopyBuffer呼び出しを行うことはできません


これはタイプミスだと思いますが、念のため指摘しておきます。 コード全体では正しいのですが、例では正しくありません。


さて、ちょっとしたヒントだ。

大したことではないのだが、書くときに無駄なキーストロークを省くことができるだろう:


 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);


単純化するために、このようにすることができます:


 Comment("Simple ADX System - Signal is ",signal,"\nADX Value is ", ADXValue,
   "\nADX Value Last is ", ADXValueLast, "\n+DI Value is ", PDIValue,
   "\n-DI Value is ", NDIValue);


それ以外は、とても有益で詳細な記事でした。


 

その他に追加するとしたら、OnInit()とDeOnit()でのエラー処理と、変数名をADXDefからh_ADXDef(またはhandle_ADXDef)に変更することです。そうすることで、コードを読むときにわかりやすくなり、特定の目的を示すより良い識別子になります。

OnInit()内:


  if(h_ADXDef == INVALID_HANDLE)
   {
      Print("Error creating indicator handles: ", GetLastError());
      return(INIT_FAILED);
   }


また、DeOninit() では


if(h_ADXDef != INVALID_HANDLE) IndicatorRelease(h_ADXDef);