どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 252

 
ALXIMIKS:
この記事を見て ください、言うほど簡単なことではありませんし、一般的にかなり有用です。

RSI_Extremums_Sample.mq4 に似たようなことが書いてあるの ですが、 私にはできません。 とか、必要ないんだけど...。
 
lottamer:

RSI_Extremums_Sample.mq4 )に似たようなものが あるが、このコードは扱えない。不要なものが多すぎるし、インジケータが描画する・・・。 とか、必要 ないんだけど...。


3173
artmedia70 2013.10.27 15:42#.
フォレックスマン77

ArrayMaximum "関数を使用して、カスタムインジケータの最も近い最大値を計算することは可能でしょうか?

それとも、そのために他の機能が必要なのでしょうか?

私はこの方法で試してみました。

そして、何も出てきません。達人たちよ、その方法を教えてくれ!

   for (i=2; i<nBars; i++) {                    
      double a=iCustom(NULL, 0, "EMAF",0,0,i+1);
      double b=iCustom(NULL, 0, "EMAF",0,0,i);
      double c=iCustom(NULL, 0, "EMAF",0,0,i-1);
      if ((a-b)*(b-c)<0) {
         if (b<c) {                                
            // Нашли донышко
            }
         if (b>c) {                           
            // Нашли пичок
            }
         }
      }   
EAで検索する場合。インジケーターではありません。

 
lottamer:

ただ一つわからないのは、例えばMACD指標の極値を計算する場合、n期間の価格の極値ではなく、どのように計算するのでしょうか?

キーブロックのHIGHとLOWをMACDに変更する必要があると思うのですが・・・。でも、どうしてなのか......私がふざけようとしたことは、すべて無効化で終わってしまったんです。

MACDの配列を作成する必要があることは理解したのですが...。

double MACDBuffer[];

他のExpert Advisorでもこのような文字列を見たことがあります。

でも、片方だけ測るわけにもいかないし......。

どうすればいいのか、アドバイスをお願いします。


記事.
 

は、Kim'sの中で同じようなものを見つけました。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.05.2008                                                     |
//|  Описание : Возвращает значение максимального элемента массива.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//+----------------------------------------------------------------------------+
double ArrayMax(double& x[]) {
  if (ArraySize(x)>0) return(x[ArrayMaximum(x)]);
  else {
    Print("ArrayMax(): Массив пуст!");
    return(0);
  }
}

question: インジケータ値の配列を作成するにはどうすればよいですか?

 
lottamer:

は、Kim'sに似たようなものがありました。

質問:インジケータ値の配列を作成する方法は?

質問されたことを読み返したら、最初間違えてた(

で、インジケーターデータのバッファを取得することができます。

1)バッファに iMACDの値を集めてループを実行する

2) MACDからソースコードを取り、そこにバッファがあります。

int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
   return(0);
  }
 
ALXIMIKS:

質問されたことを読み返すと、最初は間違えていました(

インジケーターのデータでバッファを取得するには、次のようにします。

1) バッファにiMACDの値を集めてループを実行する

2) バッファのあるMACDからソースコードを取り出します。


バッファをどう可視化すればいいのか、そうでないと理解できない......。

Print(MACDBuffer[1]); ?ゼロと表示される...なぜ?理論的には1本目のバーの値であるべきだが...。

そしてもうひとつ...iMACDという直接の関数があるのに、なぜMAを使ってMACDを計算するのでしょうか?

 
lottamer:


また、バッファをどのように可視化すればいいのかがわからない......。

Print(MACDBuffer[1]); ?ゼロと表示される...なぜ?1本目のバーの値のはず...。

そしてもうひとつ...なぜMACDをMAで計算するのですか?


必要なものを教えてください。

が、頭の悪い人でもわかるように、もっとわかりやすくすべきです。

 
ALXIMIKS:


ご要望をお聞かせください。

を、頭の悪い人にもわかるように、わかりやすく説明します。

MACDインジケータの 最小値(画像)と最大値を、指定された数のバーに対して決定する必要があります。(この場合は20)。

価格に対してこれを行うコードを見つけ、愚かにもHIGH LOWをMACDに置き換えてみたのですが、何の効果もありませんでした......。



 
artmedia70:
いい話をするのがDCの仕事です。怠け者で、いつもMCのせいにしている。


ありがとうございました。
 
lottamer:

与えられたバー数に対して、MACD指標の最小値(図のように)と最大値を決定する必要があるのですが。(この場合は20)。

価格に対してこれを行うコードを見つけ、愚かにもHIGH LOWをMACDに置き換えてみたのですが、何の効果もありませんでした...。

カスタムMACDの末尾に挿入します。
   int max,min,maxlast,minlast;
   max = ArrayMaximum(MacdBuffer,20,1);
   min = ArrayMinimum(MacdBuffer,20,1);
   if (max!=maxlast){
      ObjectDelete  ("highline");   
      ObjectCreate  ("highline",1,WindowOnDropped( ) ,0,MacdBuffer[max],0,0);
   }
   if (min!=minlast){
      ObjectDelete  ("lowline");   
      ObjectCreate  ("lowline",1,WindowOnDropped( ) ,0,MacdBuffer[min],0,0);
   }

PS.こちらの方が正しくて良いのですが。

   int max,min;
   static double maxlast,minlast;
   max = ArrayMaximum(MacdBuffer,20,1);
   min = ArrayMinimum(MacdBuffer,20,1);
   if (MacdBuffer[max]!=maxlast){
      maxlast=MacdBuffer[max];
      ObjectDelete  ("highline");   
      ObjectCreate ("highline",1,WindowOnDropped( ) ,0,MacdBuffer[max],0,0);
   }
   if (MacdBuffer[min]!=minlast){
      minlast=MacdBuffer[min];
      ObjectDelete  ("lowline");   
      ObjectCreate ("lowline",1,WindowOnDropped( ) ,0,MacdBuffer[min],0,0);
   }