初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 807

 
DCodec:

正直、何もわからない。Close[2]、Close[1]、それだけでインジケーターのトップラインの値が必要です。

インジケーターのコードを "混乱 "させないために、どのインジケーターからこれらの値を引き出すか。


どのインジケーターのバッファの値も、クローズ時ではなく、どのBARでも取得することができます。iCustomの ヘルプをご覧ください。

アイカスタム

指定されたカスタムインジケータのハンドルを返します。

手順

  • OnInit() で、インジケータ・ハンドルを作成します。
  • OnTick()またはOnTime()で、必要なINDICATORバッファから指定されたBAR番号でインジケータデータを取得します。

 
Vladimir Karputov:

クローズ時ではなく、任意のBARで任意のインジケータのバッファの値を取得することができます...iCustomの ヘルプをご覧ください。

アイカスタム

指定されたカスタムインジケータのハンドルを返します。

手順

  • OnInit() で、インジケータ・ハンドルを作成します。
  • OnTick()またはOnTime()で、必要なINDICATORバッファから指定されたBAR番号でインジケータデータを取得します。

はい、間違えました。1本目と2本目のバーのインジケータの値が必要です。しかし、ボリンジャーバンドには3本の線があるとします。どの行で値を返すのか?くだらない質問で申し訳ないのですが、本当に困っています。
 
DCodec:
はい、言い間違えました。1本目と2本目のバーでインジケータの値が欲しい。しかし、ボリンジャーバンドには3本の線があるとします。どの行を返しているのでしょうか?くだらない質問で申し訳ないのですが、本当にstuporです。

ちょっとお待ちを.

以下は、iBandsから値を取得する関数です。

//+------------------------------------------------------------------+
//| Get value of buffers for the iBands                              |
//|  the buffer numbers are the following:                           |
//|   0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND                  |
//+------------------------------------------------------------------+
double iBandsGet(const int buffer,const int index)
  {
   double Bands[1];
//ArraySetAsSeries(Bands,true);
//--- reset error code 
   ResetLastError();
//--- fill a part of the iBands array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iBands,buffer,index,1,Bands)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iBands indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(Bands[0]);
  }

この関数は切り捨てられます。その目的は、小節番号「index」のインジケータ・バッファ「buffer」から常に1つの値だけを取得することです。

iBandsの3つのラインはすべて独自の定数を持っています。

//|   0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND                  |
 
Vladimir Karputov:

ちょっとお待ちを.

以下は、iBandsから値を取得する関数です。

この関数は切り捨てられます。その目的は、小節番号「index」のインジケータ・バッファ「buffer」から常に1つの値だけを取得することです。

iBandsの3つのラインは、それぞれ独自の定数を持っています。

はい...はい。それは、私がどのように応用すればよいのか理解していないだけです

//|   0 - BASE_LINE, 1 - UPPER_BAND, 2 - LOWER_BAND  

視野の狭さからくるものでしょう。やはりMQL4の時のように考えてしまいますね。

 
DCodec:

はい...はい。そんなわけで、応用の仕方がよくわからないのですが

視野の狭さが原因でしょう。やはりMQL4で考えています。


KodoBaseのiBandsを使用した例:ボリンジャーバンドRSI

 
DCodec:

...


運が良かった?または、インジケータからデータを取得する方法を段階的に書き出したトピックを作成しますか?

 
Vladimir Karputov:

調子はどうですか?または、インジケータからデータを取得する方法を段階的に書き出したトピックを作成しますか?

面白がっているんですね。そして、今頃になって気がついたのですが

CopyBuffer

それが私には必要なのです。

CopyBuffer(handle_iBands,buffer,index,1,Bands)

ありがとうございます。

 

もう1つ質問があります。インジケーターで不要なラインを無効にするには?

例えば、iEnvelopesのUPPER_LINEを無効にするとします。

 
DCodec:

笑ってしまいますね。そして、自分が面白くないということに今更ながら気がつきました。

それが必要なんです。

ありがとうございます。


気のせいだろう。笑っていたわけではなく、真剣に聞いていたのです。例えば、Simple Expert Advisorという トピックがあります。バーサイズを確認する。買う/売る


DCodec です。

もう1つだけ質問をさせてください。インジケーターの不要な行を無効にする方法を教えてください。

例えば、iEnvelopesのUPPER_LINEを無効にするとします。


質問が明確でない。どこで、何をしたいのか、より具体的に記述してください。

 
Vladimir Karputov:

想像していたんですね。笑っていたわけではなく、真剣に聞いていたんです。例えば、Simple Expert Advisorという トピックがあります。バーサイズを確認する。買う/売る



質問が明確でない。どこで、何をしたいのか、より具体的に記述してください。

EAがOnInit()でインジケーターハンドルを受け取ると ...

int OnInit()
  {
//--- Получить хэндл индикатора Envelopes_upper для отрисовки верхней линии
   EnvHandle_upper=iEnvelopes(NULL,0,Period_upper,0,MODE_SMA,PRICE_MEDIAN,Deviation_upper);

...ターミナルは両方の線を描きますが、私は上の線だけが必要です。

この線を描画しないようにするにはどうしたらよいですか?例えば、色をCLR_NONEに 変更したり、線種をDRAW_DONEに変更したり?

理由: