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

 
Artyom Trishkin #:

もちろん、プログラムは別スレッドで端末が何らかのデータを記録するのを待っているわけではありません。

ありがとうございます、つまり

 
for(i; i>0; i--)演算 子のブレーク後に実行されるのは "i--"式ですか、それとも "式3 "だけですか(ドキュメントによれば)。教科書には載っていなかった。

ブレーク後に Print(i); ブレーク前に i-- と if (i==0) がある場合、i が演算子内部で既に 0 に達していれば、それが終了コマンドとなるのですが、なぜ時々「-1」が投げられるのか理解できません。 i はコードのさらに下の Close[i] で使われているので、「範囲外のエラー」を発生させるのです。

 
Ivan Butko for(i; i>0; i--)演算 子のブレーク後に実行されるのは "i--"式ですか、それとも "式3 "だけですか(ドキュメントによれば)。教科書には載っていなかった。ブレーク後に Print(i); ブレーク前に i-- と if (i==0) がある場合、i が演算子内部で既に 0 に達していれば、それが終了コマンドとなるのですが、なぜ時々「-1」が投げられるのか理解できません。 i はコードのさらに下の Close[i] で使われているので、「範囲外のエラー」を発生させるのです。


私には理解できない。コードを表示する
 
Ivan Butko for(i; i>0; i--)演算 子のブレーク後に実行されるのは "i--"式ですか、それとも "式3 "だけですか(ドキュメントによれば)。教科書には載っていなかった。ブレーク後に Print(i); ブレーク前に i-- と if (i==0) がある場合、i が演算子内部で既に 0 に達していれば、それが終了コマンドとなるのですが、なぜ時々「-1」が投げられるのか理解できません。 i はコードのさらに下の Close[i] で使われているので、「範囲外のエラー」を発生させるのです。


ブレーク後、ループの次の演算子へ、その時点の反復の終わりまで反復し、新しいループを開始した後、ループを終了します。

 
Valeriy Yastremskiy for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);

// ログに(-1)と出ているのですが、どうしてでしょうか?で、Close[-1]が起きない ため、エラー配列の範囲外となっています。

つまり、ヘッダのブレーク後(i; i>0; i--)も3番目の式「i--」が実行
されると理解してよいでしょうか?

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Оператор цикла for - Операторы - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ivan Butko for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);

// ログに(-1)とありますが、どうしてでしょうか...。であり、したがって、Close[-1] が起こらないので、エラー配列の範囲外である。

つまり、ヘッダのブレークの後(i; i>0; i--)は、とにかく第3式「i--」が実行
されると理解してよいでしょうか?

正しい書き方

i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
Print(Close[i]);
ヘッダーだけでなく、ループの本体でも取り上げているんですね。
 
Konstantin Nikitin #:

正しく書き込むことができます。

私がコードにどんなくだらないことを書いているかなんて聞かないでください。この演算子のニュアンスを理解したいのですが)本文で「i=0だからそろそろここを出よう」と指定したようですが、次の演算子に制御を渡すべきなのに、演算子は受け取ってもう一度式を実行します。

 
Ivan Butko #:

どんなくだらないことを書いているかは聞かないでください。この演算子のニュアンスを理解したいのですが)ボディで「i=0だからそろそろここを出よう」と指定したようなものですが、次の演算子に制御を渡すべきなのに、演算子が受け取ってもう一度式を実行してしまうのです

はい、そうです。でも、このチェックの前に取り上げていますね。このように書きます。

i=10;
for (i; i>0; i--)
{
if (i==0) break;
i--;
}

Print(i);
Print(Close[i]);

賽は投げられた

 
Konstantin Nikitin #:

はい、そうです。でも、このチェックの前に取り上げていますね。このように書きます。


おうを手に入れた。了解しました。

皆様、早速のご返信ありがとうございました。

 
Ivan Butko #:

嗚呼...了解です。了解しました。

皆様、早速のご返信ありがとうございました。

あなたのコードは-1でなく0を表示します。

void OnStart()
  {
int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
  }
//+------------------------------------------------------------------+

おそらく-1がどこかから印刷されたもので、ほとんどの場合、コード全体がプリンターの中にあるのでしょう...。

問題を解決しようとする前に、その問題を特定する必要がある...。そこにあることを確認し、場所を特定してから解く...。