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

 

サイモン

"あなたのwhileループはチケットを見つけられませんでした... .. ."

履歴プールにあるチケットのインデックスを「見つけるかもしれない」のではなく、「見つけるか、次の関数を実行するか」です。)


" a pool index != a ticket number haven't we been through this before ?" (プールのインデックス != チケット番号)

今、はっきりさせましょう。

注文チケット番号は、リクエストが送信された後、その注文に割り当てられたユニークなチケット番号 です。

注文ポジション 番号は、配列に 似た注文プール・ インデックス(理解 することが重要)における注文のポジション です。


"なぜ、クローズしたUSDJPY注文が、全く別のプール、Historyプールで同じポジションになることを期待しているのですか?"

それは別のプールなので、してはいけません。

私が提示したコードでは

   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());
     }

これは どうやら履歴プールから注文を選択しているようですね?少なくとも、これは私がDocumentationから収集したものです。また、私は最近、別々の通貨 ペアで約5つの注文を開いてみて、1つを閉じ、そしてEAをオンにし、それはまだ印刷(OrderCloseTime());を含むすべての機能を実行しました。


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

 
WhooDoo22:

サイモン

"あなたのwhileループはチケットを見つけられませんでした... .. ."

履歴プールにあるチケットのインデックスを「見つけるかもしれない」のではなく、「見つけた」のです、でなければ以下の関数は実行されなかったでしょう :)。

チケット番号を使用する関数は どれですか? あなたのOrderSelectsはすべてSELECT_BY_POS ... POSはPOSitionの意味です、ですから繰り返します、あなたのwhileループはチケットを見つけず、Orderプールの インデックスを見つけます。


履歴プールから選択しているのは、インデックス位置i の注文です。iの 値は、USDJPYの注文がOrderプール内にあった場所です。
 

サイモン

"あなたのwhileループはチケットを見つけるのではなく、オーダープールの インデックスを見つけます。"

ええ、私はこれを理解していると思います。これは問題ないはずです。


"プールは完全に分離されており、どのような形であれリンクされていない"

このことは理解していますが、OrderClose()関数のコードブロックは意図したとおりに動作しているようです。注文チケット 番号の値を保存するようにコードブロックを調整し、あなたが対処したいことを続けられるようにします。同意しますか?

まず最初に、この質問をします。注文の履歴プールポジション番号は、なぜ現在のプールポジション番号と同じではないのですか? 私は、この 番号は同じであると信じています。


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

 
WhooDoo22:

サイモン

"あなたのwhileループはチケットを見つけるのではなく、オーダープールの インデックスを見つけます。"

ええ、私はこれを理解していると思います。これは問題ないはずです。


"プールは完全に分離されており、どのような形であれリンクされていない"

このことは理解していますが、OrderClose()関数のコードブロックは意図したとおりに動作しているようです。

OrderClose()呼び出しに変更はないので、まだ動作するはずです。


しかし、このコンセプトには致命的な欠陥があるため、意図したとおりに動作しません ... 続けることに意味がない理由がわかるまで ...

 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());
     }
 
WhooDoo22:


まず、こんな質問をさせていただきます。なぜ、オーダーの履歴のプールポジション番号は、現在のプールポジション番号と同じでないのでしょうか? 私は、同じ番号であると信じています。


あなたがテストしているデモ口座に行って ください ... ... いくつオープンオーダーを持っていますか? いくつアカウント履歴タブの履歴にオーダーを持っていますか?
 

サイモン

'Account History'には56件含まれています。

'Trade'(未決済注文)には3つ含まれています。


私はあなたが「WhooDooは機能しているようだ」と書いてくれるのを待っています。:)"

Hooold on、返されたPrint()関数の チケット番号を確認したら、USDJPYの注文と異なるチケット番号が返されました。

動作しない。確認済み。でもやってみてよかったです、このレッスンは議論する価値がありました。

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

 
WhooDoo22:

サイモン

'Account History'には56件含まれています。

'取引'(未決済注文)には3つ含まれています。

新しいUSDJPY注文を作成し、あなたのコードを実行すると、この新しい注文iは 3の値を持っていることがわかります、あなたがそれを閉じるときにUSDJPY注文は履歴プールのどの位置になりますか? すでに56があるので位置3はすでに取られ、位置4、5、6、7 ..... 55
 

サイモン

57.

   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 usdjpy_ticket_number=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(usdjpy_ticket_number,SELECT_BY_TICKET,MODE_TRADES)==true)
      
      Print("Ticket number for USDJPY = ",usdjpy_ticket_number);
      Print("Order close time = ",OrderCloseTime());
     }

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

ファイル:
 
WhooDoo22:

サイモン

57.

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

iは 3なので、履歴プールで3の位置の注文を選択すると、57の位置の注文を取得するためにどのように管理するのでしょうか??
 

サイモン

それはないでしょう。最近、再発見しました。

ありがとうございます。