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

 
Vadim_2015:

アルゴリズムは明確であり、それを理解した。例題を実行したところ、すべてうまくいきました。

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

また、最初の質問(マキシマムについて)ですが、どのように実装するのか、もう少し詳しく説明してください。できれば、小さなアルゴリズムをお願いします。上手なんですね :)

自分以外の人に理解されるのは嬉しい。

Vadim_2015年
フォーラムユーザーの皆様、こんにちは。

MQL4言語の勉強を始め、簡単なインジケーターを書いているのですが、解決できない問題に直面しました。問題のキモ

1_High[i - end of day]を見つける方法。 Close[i]-Open[i+1] のシンプルなサイクルを持っていますが、High[i - end of day]を見つける必要があります。例えば、from[i],[1],[2] and to the end of day (PERIOD_H1) .どうすればいいのかわからない。iHigh」機能もありますが、ちょっと違うんです。


これこそ、私たちが必要としているものです。終了までの残り時間に関係なく、その日の最高値を表示します。

double  iHigh( 
   string           symbol,          // _Symbol
   int              timeframe,       // PERIOD_D1
   int              shift            // 0
   );

質問の理解が正しければ

 
AlexeyVik:

自分以外に理解してくれる人がいて嬉しい。

それは、まさに正しいことなのです。どんなに時間が経っても高電流日。

質問の理解が正しければ

私が理解していたのとは少し違うようです。そういうものなんです。
bar=iBarShift(NULL,0,t1,false);   //по времени, находим индекс бара
barH=iHighest(NULL,0,MODE_HIGH,bar+1,1);  //находим максимум, в этом промежутке    
 
r772ra:
微妙に違うんですね、私の理解では。そういうものなんです。

まあ、それこそ以前からアドバイスされていたことではあるのですが。
しかし、iHighest(NULL, MODE_HIGH, bar+1, 1) は、この区間で他のすべての高値より高いバーのインデックスを 返すのに対し、質問者は現在の日の高値について聞いています。

 
AlexeyVik:

まあ、それこそ以前からアドバイスされていたことではあるのですが。
しかし、iHighest(NULL, MODE_HIGH, bar+1, 1) は、この区間で他のすべてのものより高いバーインデックス Highを返し、あなたは現在の日のHighについて質問しました。

私は、「iHighest(NULL, MODE_HIGH, bar+1, 1) は、この区間で 他のすべてのバーより 高いバー Highのインデックスを 返す」ことに同意します。そして、ハイの意味 残日 その日のうちに

もう少しわかりやすく説明すると...。

#property indicator_separate_window
#property indicator_buffers 1

#property  indicator_label1  "longBars"

#property  indicator_color1 clrBlue

#property  indicator_width1 2

//---углубление в историю на...
extern int barsToProcess = 100;
//---indicators Buffers
double   longBarsBuffer[];        
                

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,longBarsBuffer);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   
   IndicatorDigits(Digits);
  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int counted_bars=IndicatorCounted(), 
       limit;

   if (counted_bars<0) return(-1);
   if (counted_bars>0)       
       counted_bars--;       
      
   limit=Bars-counted_bars;
   if(limit>barsToProcess)                                  
      limit=barsToProcess;
  
   double  longValue;
      
                            
   for(int i=0;i<limit;i++)
      {
       longValue = Close[i+1]-Open[i+3];
       
//--- само условие
         
       if(longValue>0) 

//---собственно что необходимо получить: если на i-том баре выполнилось условие(i>0), то находим High от этого бара и 
//---до конца этого дня,я имею ввиду максимум всего этого промежутка. Примерно: Если условие выполнилось 
//---на i=12h,то High от 12 до 00:00,
//--- если i=01:00, то High от 01:00 до 00:00, если i=22:00, то High от 22:00 до 00:00. Как то так.  Возможно ли это реализовать?  
//---Может я не правильно сделал цикл? Как его правильно организовать?
                  
       longBarsBuffer[i]=High[от i - и до конца дня] - то что необходимо получить. 
       else 
          longBarsBuffer[i]=0.0; 
       

あまり叱らないでください :) ...どうすればいいのか説明してください。

 
Vadim_2015:

私は、「iHighest(NULL, MODE_HIGH, bar+1, 1) は、この区間で 他のすべてのバーより 高いバー Highのインデックスを 返す」ことに同意します。そして、ハイの意味 残基 その日のうちに

もう少し具体的に説明すると...。

できればあまり叱らないでください :) ...やり方を説明してもらえますか?

最初は単なる誤字かと思ったが、今は間違いない、未来を見据えるのか?それなら、『バック・トゥ・ザ・フューチャー』の博士にしかできないことがある。
 
AlexeyVik:
最初は単純なタイプミスかと思ったが、今となっては間違いない、未来を見据えるのか?それなら、『バック・トゥ・ザ・フューチャー』の博士にしかできないことがある。

ドクは私を助けられないと思う...彼は間違ったビジネスをしているのだ:)

そう、その質問、「ハイは、現在のものの残りの部分です。 of the day. "ちょっとわかりにくいですね。本当にこの日に未来を見ようとしたのかと思うほど、思い当たる節があります。ちょっとずれていますね。を数えたかったのですが、_ハイあとは現行品。 価格配列の先頭から最後から2番目の日(昨日)までのすべてのデータが揃っているためです。そして、最後(今日)の一日は、終了次第、再計算されるはずです。そうでなければ、あなたが言ったように、未来を 見ようとしているように見えてしまうでしょう。価格配列の先頭から始まり、最後(昨日の日)まで移動すると、その後のバーをチェックするたびにHighが変化します。 そのため、Highを残りの部分から引く方法を質問しました。言い忘れましたが、現在の日はまだ完成していないので、考慮されていません。すみません、すぐには理解できませんでした :) .このような計算をどのように整理したらよいか、アドバイスをお願いします。そんなことが可能なのか?

 
Vadim_2015:

ドクは私を助けられないと思う...彼は間違ったビジネスをしているのだ:)

そう、その質問、「ハイは、現在のものの残りの部分です。 of the day. "では、ちょっとわかりにくいですね。この日、未来を見ようとしたのだろうと、今になって思いました。ちょっと語弊がありますね。を数えたかったのですが、_ハイ♪ the rest of the current one ♪ 価格配列の先頭から最後から2番目の日(昨日)までのすべてのデータが揃っているためです。そして、最後(今日)の一日は、終了次第、再計算すること。そうでなければ、あなたが言ったように、未来を 見ようとしているように見えてしまうでしょう。価格配列の先頭から始まり、最後(昨日の日)まで移動すると、その後のバーをチェックするたびにHighが変化します。 そのため、Highを残りの部分から引く方法を質問しました。言い忘れましたが、現在の日はまだ完成していないので、考慮されていません。すみません、すぐには理解できませんでした :) .そのような計算を整理する方法を教えてください。そんなことが可能なのか?

ご質問を理解するために努力します。1)前日と今日持っているもの、2)今日持っているもの、どちらのバーが高いかを探す必要があります。iHighest() で解決できるかも?
 
paladin80:
ご質問を理解するために努力します。High among bars 1) 前日と今日の日付、または2) 今日の日付だけを探す必要があるのでしょうか?iHighest() で解決できるかも?

親愛なる友人たちへ、私が実現したいことをできる限り説明しよう...。...........................................................................

見てください、価格の配列があります、_1.02.2015.から15.12.2015(今日の日)までとしましょう、PERIOD_H1 を取ります。

1_簡単な計算式_val=Close[i]-Open[i]をとります。

2_set simple condition if (val>0) - check should start from _1.02.2015.

-例えばある小節で条件を満たした場合、この小節から今日の終わりまで_Highを求めます。例えば、こんな感じです。Close[4]-Open[4]>0, すなわち、インデックス[i=4]のバーが_1.02に属していると仮定します。2015 10:00 なので、この日の 10:00 から この日の終わりである 00:00 まで、_High を見つけることができます。また、別の日にうまくいった場合にも、同じ原理で行動します。そして、それは価格配列全体を貫くのです。2015.02.1~2015.12.14(最終日)までの計算を開始すべき、なぜ最終日まで、-最終日がまだ完了しておらず、全日のHighが不明なためです。最終日が終わるとすぐに、その状態もチェックします。2015.02.1.から2015.12.14(ペナルト) までのデータがわかっているので、-tryingto look into the future :) という感じにはならないでしょう。

- 条件を満たさない場合 - 何もせず、空の値を配列に書き込みます。

それが実は、全体の「考え方」なんです。どうすればいいのか、ループで定義するのか......考えられない!

 
Vadim_2015:

ドクは私を助けられないと思う...彼は間違ったビジネスをしているのだ:)

そう、その質問、「ハイの残りは、現在のものです。 of the day. "では、ちょっとわかりにくいですね。この日、未来を見ようとしたのだろうと、今になって思いました。ちょっと語弊がありますね。を数えたかったのですが、_ハイ♪ the rest of the current one ♪ 価格配列の先頭から最後から2番目の日(昨日)までのすべてのデータが揃っているためです。そして、最後(今日)の一日は、終了次第、再計算すること。そうでなければ、あなたが言ったように、未来を 見ようとしているように見えてしまうでしょう。価格配列の先頭から始まり、最後(昨日の日)まで移動すると、その後のバーをチェックするたびにHighが変化します。 そのため、Highを残りの部分から引く方法を質問しました。言い忘れましたが、現在の日はまだ完成していないので、考慮されていません。すみません、すぐには理解できませんでした :) .そのような計算を整理する方法を教えてください。そんなことが可能なのか?

もしそうなら、iHighest()に戻りますが、何本目のバーからカウントするか は、iBarShift()を使用して計算する必要があります。
 
AlexeyVik:
その場合、iHighest()に戻りますが、何本目のバーからカウントするか、またどのバーから カウントするかは、iBarShift()を使用して計算する必要があります。

ループで行う方法を教えてください。正しいやり方がわからない。