MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 847

 

手に入れ、変えた。

   uint n=0;

は、エラーがなくなりました。ありがとうございます。

 
Sergey Voytsekhovsky:

手に入れ、変えた。

は、エラーがなくなりました。ありがとうございます。

これらはエラーではなく、警告です。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。

アルチョム・トリシキン さん 2019.05.20 15:16

変数nと period_findの 型は何ですか? 一番大事なものを、見せなかった...。

試してみてください。

for(n=0; n<(int)period_find; n++)

また、一般的には、なぜOnTick()ハンドラレベルでループ変数を宣言するのでしょうか?

こんなやり方もあるんですね。

for(int n=0; n<(int)period_find; n++)

OnTick() から n 宣言は削除できます。


 
Artyom Trishkin:

これは間違いではなく、警告なのです。


いいね、直そう。

もし差し支えなければ、アローズが作られた価格の値を知るためのヒントを教えてください。すでに彼らのインデックスを持っているとして。???

 

今は別の意味で罵倒している。

'n' - 宣言されていない識別子 Test_iCustom.mq5 82 48

おそらく、nはループの外側で、ファウンドインデックスとして使われているからでしょう?
 
         for(int n=0; n<(int)period_find; n++)
            {
               if(Buf_Arrow_Buy[n]!=EMPTY_VALUE)break;
            }
         Last_Arrow_Buy_volume = Buf_Arrow_Buy[n];
         Last_Arrow_Buy_index  = n;
 
Sergey Voytsekhovsky:

いいね、直そう。

もし差し支えなければ、アローズが作られた価格の値を知るためのヒントを教えてください。すでに彼らのインデックスを持っているとして。???

iOpen()CopyOpen()、または一度に複数の価格を取得する場合はCopyRates() のいずれかを使用します。

私見ですが、このインジケーターでは、チャート上の矢印は、バーの始値の位置に配置されています。

Документация по MQL5: Доступ к таймсериям и индикаторам / iOpen
Документация по MQL5: Доступ к таймсериям и индикаторам / iOpen
  • www.mql5.com
Значение цены открытия бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError(). Функция всегда возвращает актуальные данные, для этого она при каждом вызове делает запрос к таймсерии по указанным символу/периоду. Это означает...
 
Artyom Trishkin:

iOpen()CopyOpen()、または一度に複数の価格を取得する場合はCopyRates() のいずれかを使用します。

私見ですが、このインジケータは、バーの始値でチャートに矢印が表示されます。

そう、そこに書いてあるんです。

SetArrow(prefix+"ChartArrowUP_"+TimeToString(time[i]),InpColorBullishArrow,time[i],open[i],(char)241,ANCHOR_TOP,InpArrowSize);

iOpen() を試してみる。

そして、nの代わりに別の変数を追加する、またはこのようにすることができます:?

   int n=0;
   
   if (CopyBuffer(CrossAD, 1, 0, period_find, Buf_Arrow_Buy) != period_find)
      {  
         Print("НЕ удалось правильно скопировать данные из 1-го буфера индикатора iCrossAD, error code %d",GetLastError());
         return;
      }
         for(n=0; n<(int)period_find; n++)
            {
               if(Buf_Arrow_Buy[n]!=EMPTY_VALUE)break;
            }
         Last_Arrow_Buy_volume = Buf_Arrow_Buy[n];
         Last_Arrow_Buy_index  = n;
         Print("Last_Arrow_Buy_volume = ",Last_Arrow_Buy_volume,", Last_Arrow_Buy_index = ",Last_Arrow_Buy_index);
 
Sergey Voytsekhovsky:

ループ変数のスコープは、ループ本体に限定されます。ブレーク前に必要な値を割り当てる。

//+------------------------------------------------------------------+
for(int i=0; i<(int)period_find; i++)
  {
   if(Buf_Arrow_Buy[i]!=EMPTY_VALUE)
     {
      Last_Arrow_Buy_volume = Buf_Arrow_Buy[i];
      Last_Arrow_Buy_index  = i;
      break;
     }
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

ループ変数のスコープは、ループ本体に限定されます。ブレーク前に必要な値を割り当てる。

了解しました、両方向に機能します、警告は出ません。

ループ本体の中で、breakの 前に計算をするのが正しいのか、ループの外に計算を 出すのが良いのか、教えてください。

 
Sergey Voytsekhovsky:

了解しました、両方向に機能します、警告は出ません。

ループの中で計算するのと、ループの外で計算 するのと、どちらがいいのでしょうか?

どのような計算をするのですか?