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

 
WhooDoo22:


私はあなたが私のポイントを見逃していると思う... ...私はいくつかのブレースを追加した場合、多分それは明確になるだろう... ...。... あなたはこれをやった ...

私はこれをするつもりだったと思います.

これは、私が条件...を望んだからです。

を中括弧("{ }")の中にあるコードの部分に適用させたいと思ったからです。

では、なぜ最新版のコードでそのような変更をしなかったのですか.......もしそうするつもりなら、なぜそうしないのですか?

 
WhooDoo22:

サイモン


あなたの画像の0は、おそらく... ..


なーんてね!(笑)

ドキュメントレーンを旅してみましょうか?ハハハ。

datetimeOrderCloseTime( )
現在選択されている注文の終了時刻を返します。注文の終了時刻が0でない場合、選択された注文は終了しており、口座の履歴から取得されます。未決済注文および保留中の注文の終了時刻は0になります。

注:注文はOrderSelect() 関数で事前に選択されている必要があります。


まず、私が最近コーディングしたOrderClose()関数のコードブロックを見てみましょう...

次に、「エキスパート」ペインのスナップショットで、表示された結果を覗いてみましょう。

ああ、これは何だろう?)

Print(OrderCloseTime())は明らかに間違っていますが、あなたのコードにはまだそれが残っています。
 

サイモン

では、なぜ最新版のコードにその変更を加えないのですか?......もし、あなたがそれを行うことを意図していた場合、なぜあなたはそれを行っていないのですか?

ちょっと見てみます。

私は以前これをコード化するつもり でしたが、現在これをコード化するつもりは ありません。これをコード化する理由はありません...。

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
      {
      if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
      if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}           
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
         {
         OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
         Print(OrderCloseTime());
         GetLastError();
         }
      }

代わりにこれをコーディングすることができたら...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      Print(OrderCloseTime());
     }

すべての'if'条件は、中括弧("{}")の中にあるものに適用されます。このブロックのコードに中括弧を追加することは(私が意図 した方法で)非効率的であり、何の目的もありません。


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

 

サイモン


何を言いたいのかよくわからないのですが、説明してもらえますか?

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      Print(OrderCloseTime());
     }

// replace above code block with...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
//      Print(OrderCloseTime());
     }

デモ口座のターミナルでEAを(Print()関数 なしで)素早く動かして、「エキスパート」ペインをクリックして、「エキスパート」ペインの残りの結果からゼロ(0)がないことを可視化してください。

0がないことに注意してください。ふーん、そうなんだ?)

今度はEAを動かしてみましょう(Print()関数が含まれている場合)。

Experts」ペインに「0」が表示されていることに注目してください。


あなたは以前、'Experts'ペインの結果に0がある理由を推測しましたが、それは正しかったのです(メッセージの最初に "Nah-uh-uh! ;) "を書きました)。

あなたの画像の0は、おそらく.....

Print(OrderCloseTime());

覚えてますか?もちろんです(笑)


Print(OrderCloseTime())は明らかに間違っているのに、あなたのコードにはまだそれがある、なぜ?

なぜそれが間違いだと思うのか、説明してください。

私は、あなたにポイントを 示すために、コードにそれを入れています。そのポイントとは このコードがあるために、「エキスパート」ペインにゼロが表示されるのです。


私が提案した2行のコードを追加したらどうなったのでしょうか?

私は現在、この件に関して迅速に取り組んでいます :)


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

 
WhooDoo22:

Print(OrderCloseTime())は明らかに間違っていますが、あなたのコードにはまだそれがあります、なぜですか?

なぜそれが間違いだと思うのか、説明してください。

私は、あなたにポイントを 示すために、コードにそれを入れています。そのポイントとは このコードがコード内にあるために、「エキスパート」ペインにゼロが表示されるのです。


あなたが投稿した最後の画像は、USDJPY注文が01:45:35にクローズされたことを示しています。OrderCloseTime()の戻り値が0であることは、注文がオープンであるか、保留中の注文 である場合にも起こり得ると、あなたは正しく指摘しました。ですから、0という値がどうして正しいのでしょうか? 答えは、正しいはずがない、つまり、間違っているということです。

 

サイモン

今、取り組んでいるのは...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}           
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      int ClosedTicketNum = OrderTicket();   //  <---- add this line
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      
      OrderSelect(ClosedTicketNum, SELECT_BY_TICKET);   //  <---- add this line

      Print(OrderCloseTime());
      GetLastError();
     }

ありがとうございます。

 
WhooDoo22:

サイモン

では、なぜ最新版のコードにその変更を加えないのですか?......もし、あなたがそれを行うことを意図していた場合、なぜあなたはそれを行っていないのですか?

ちょっと時間をください。

私は以前これをコード化するつもり でしたが、現在これをコード化するつもりは ありません。これをコード化する理由はありません...。

代わりにこれをコーディングすることができたら...

すべての'if'条件は、中括弧("{}")の中にあるものに適用されます。このコードブロックに中括弧を追加することは(私が意図した 方法で)非効率的であり、何の役にも立ちません。

さて、このコードを見てみると.. . .

if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))                                  // 1.
if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}                   // 2.
if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}                  // 3.
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))   // 4.
     {  
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);                   // 5.
      Print(OrderCloseTime());                                                    // 6.
     }

議論しやすいように行に番号を振ってあります。

1行目を見て、OrderStopLoss() と OrderTakeProfit() が両方とも0 の場合、他の番号のついたコードのどの行が実行されるのでしょうか?

 

サイモン

修正されたので、意図したとおりに動作するようになりました。

if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}                   // 2.
if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}                  // 3.
if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))                                  // 1.
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))   // 4.
     {  
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);                   // 5.
      Print(OrderCloseTime());                                                    // 6.
     }

2行目と3行目です。

ありがとうございます。

 

サイモン

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      int ClosedTicketNum=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      OrderSelect(ClosedTicketNum,SELECT_BY_TICKET);
      
      Print(OrderCloseTime());
     }

結果発表

エキスパート」ペインの結果。

なぜ注文の終了時刻がこのような形式(1357306061)で表現されるのでしょうか?

Print()関数が動作する理由は、OrderSelect()関数(中括弧内)が未決済注文ではなく、決済済み注文を選択しなければならないからでしょうか?これは、中括弧の中で行わなければならないのですね?)トリッキー、トリッキー。

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

 

サイモン

来たぞ...バーン!

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }

さらにいい感じ!ハハハ ;)

ありがとうございます。

ファイル: