サイクルオペレーター「for」の質問

 

こんにちは、MQL4コミュニティです。


最初のリファレンス:https://book.mql4.com/operators/for

1つ目のリファレンスによると、'for'演算子の書式例はこのように書かれています。

  for (Expression_1; Condition; Expression_2)         // Cycle operator header
      One operator, cycle body                     // Cycle body is one operator


第二の文献:https://docs.mql4.com/basis/operators/for

2つ目のリファレンスによると、'for'演算子の提供される例は、このように記述されています。

for (Expression1; Expression2; Expression3)
   operator;


この最初の例では2番目のパラメータとして「条件」が含まれているのに、2番目の例では、 2番目のパラメータ として「Expression2」が含まれているのはなぜか?

この矛盾は何を意味するのでしょうか?

また、それは重要なことなのだろうか?

forサイクル演算子を使うには、すべてのパラメータを理解する必要があると思うのですが。

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

 

forループを理解するには、まずwhileループを理解するのがよいでしょう ... forループは、初期条件とインクリメントが組み込まれたwhileループにすぎません ... ...

forの ドキュメントを見てみると、こう書いてある.

for演算子は、次の演算子の連続と等価である。

Expression1;
while(Expression2)
  {
   operator;
   Expression3;
  };


具体的には、「なぜ、最初の例では2番目のパラメータに "condition "が含まれているのに、2番目の例では2番目のパラメータに "Expression2"が含まれているのですか?「式は条件であり、条件は または偽の 値、例えば (a > b) または (c || d) または (OrdersTotal() >= 0) をもたらします、また、ドキュメントには次のように記述されています。... "式2はサイクル終了のための条件テスト です。"

 

サイモン

式は条件になりうる

for' 演算子のヘッダーのパラメータ 2 は、式 OR 条件になるのですか?Expression_1とExpression_3は、条件にはならず、式のままである必要があると思いますが、いかがでしょうか?式1&3が条件にならない理由はわかりません。式1、式3は、どちらも入力されるパラメータに過ぎません。(条件であることは、代わりにパラメータ2、つまりExpression_2の目的である可能性もあります)

考えを確認してください。

式は、算術演算(2+2=4)、代入などです。(すべてMetaEditor辞書に記載されています)。

条件は、真|偽(例:a>b, a>=b, a==bなど)。

演算もMetaEditor辞書に含まれています(例:Break, Continue, Return, while, for, etc)。

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

 
WhooDoo22:

サイモン

式は条件になりうる

for' 演算子のヘッダーのパラメータ 2 は、式 OR 条件になるのですか?Expression_1とExpression_3は、条件にはならず、式のままである必要があると思いますが、いかがでしょうか?式1&3が条件にならない理由はわかりません。式1、式3は、どちらも入力されるパラメータに過ぎません。(条件である代わりに、パラメータ2、つまりExpression_2の目的である可能性もあります)

whileの 正しい使い方を覚えましょう ... ...for ループはwhile ループをより美しくアレンジしたものです。 そうすれば、式と条件というのはすべて意味をなします ....... 自分のために、頭を痛める選択肢を減らす ... 勉強するwhile

ドキュメント - while

本 - while
 
WhooDoo22: では、for演算子ヘッダーのパラメータ2は、式 OR 条件になるのでしょうか?
どんな式でも結果は数字になります。ブーリアンに変換された数値は、条件です。同じことです。あなたは、 ツゥメィトゥと言い、私は、ツゥマァトゥと 言う。
 

Simonさん、while演算の使い方を練習してみます。この響きが好きなんだ!:)ありがとうございます。

ウィリアム、ブーリアンに変換された数値は、条件と なる...。(1=true,0=false)です。ありがとうございます。

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

 

Simon,

私は、あなたが要求したようにすることができるはずのEAを書きました;)。

このEAと、ターミナルの「エキスパート」タブからの結果のスナップショットの組み合わせを共有します。


このEAはUSDJPYの注文を選択し、その情報をExpertsタブにプリントすることができるようです。なぜEAは注文の情報を印刷するだけでなく、注文を閉じないのでしょうか?

ありがとうございます。

ファイル:
 
WhooDoo22:

Simon,

私は、あなたが要求したようにすることができるはずのEAを書きました;)。

このEAと、ターミナルの「エキスパート」タブからの結果のスナップショットの組み合わせを共有します。


このEAはUSDJPYの注文を選択し、その情報をExpertsタブにプリントすることができるようです。なぜEAは注文の情報を印刷するだけでなく、注文を閉じないのでしょうか?

ありがとうございます。

あなたは、中括弧を理解していると言いましたね?https://www.mql5.com/en/forum/142732


あなたのコードとそれが何を意味するのかを説明してください ... ... 特に、暫く私に話してください。
 

Simonです。

あなたのコードとその目的について説明してください ... ... 特に、その間に私に話してください。

私はコードとその目的を 説明 するために最善を尽くします。


コードの目的

1.1. USDJPYの注文を3つの注文のプールから選択します。

2.2. USDJPY注文のTPとSLを変更する。

3.OrderPrint()関数を実行する。

4.USDJPY注文をクローズする。


コードの説明

まず、変数が宣言されています。

   int i;
   double bid_ask;

次に、'while'ループが実行されます。

while'ループのロジックです。

OrderSelect()関数 では、変数'i'を数字1、2、3などの代用として使用します。(この点だけ注意してください)

OrderSelect()関数とOrderSymbol()関数内の変数iがUSDJPYでない場合 変数iを1つ増やす( i++; )

   while(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!="USDJPY")

         i++;

while」ループは、OrderSelect()関数が適切な注文券を選択し、OrderSymbol()関数がUSDJPYの注文を選択するまで変数「i」を増やします。両方の目的が達成されると、whileループはfalseになり、制御はi++;(whileループの本体)以下に渡されます。

3 番目に、OrderModify()関数が実行される。

OrderModify(i,OrderOpenPrice(),50*Point,50*Point,0,CLR_NONE);

第四に、OrderPrint()関数が実行される。

OrderPrint();

5つ目は、決済する注文が買い注文なのか売り注文なのかを判別するためのパラメータを入れることです。

         if(OrderType()==OP_BUY){bid_ask=Bid;}
         if(OrderType()==OP_SELL){bid_ask=Ask;}

6 番目に、プログラムが注文が買いか売りかを区別したら、OrderClose()関数を実行する。

OrderClose(i,OrderLots(),bid_ask,3,CLR_NONE);

7番目(そして最後)に、ストラテジーテスターでのビジュアルテストの際に、チケット番号が本当にUSDJPYのチケットであることを確認するために、変数「i」を表示するコメントをプログラム内に記述しています。

Comment("i = " ,i);

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

 
WhooDoo22:

サイモン


'while' ループのロジック。

OrderSelect() 関数は、変数 'i' を数字 1,2,3 などの代用として使用します。(これだけは覚えておいてください)

つまり、OrderSelect()関数とOrderSymbol()関数内の変数iがUSDJPYでない場合 変数iを1増加させる(i++; )

while」ループは、OrderSelect()関数が適切な注文券を選択し、OrderSymbol()関数がUSDJPY注文を選択するまで変数「i」を増やします。両方の目的が達成されると、whileループはfalseになり、制御はi++;(whileループ本体)以下に渡されます。

すみません、私はあなたのコードを読み間違えていました.あなたが抱えている問題は非常に単純で、あなたが投稿したスクリーングラブのエラーメッセージを見るだけです。

もし、戻り値のチェックと エラー報告が含まれていれば、おそらくあなた自身が問題を発見したことでしょう。
 

サイモン

あなたが見ているものが何であるかは分かりませんが、;)早速、GetLastOrder()関数を入れて、この問題に光を当ててみたいと思います。GetLastOrder()関数をコードに含めずに質問を投稿したことをお詫びします。

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

理由: