ヘルプEAが取引を終了しない理由 - ページ 4

 

SRCボタンを使ってコードを投稿しないと、誰も返信してくれないという問題が発生します :D

 
crossy:

こんにちは、フレンズです。


OrderT はオーダーチケットの番号です。




私の問題点はEAは時々、非常にうまく取引を終了しますが、時々、EAは取引を終了しますが、すでに終了しているにもかかわらず、それを終了するためにチケットを探し続けていることです。

(エラー: "Unknown ticket number..." が出ます。

ロジックを間違えてしまったようです。

よろしくお願いします。

Y

それは非常に、非常に簡単です。

この簡単な質問に答えるだけで、あなたの答えが見つかります.

チケット 番号を関数に渡して、チケットをクローズすることができます ... ... なぜ、他のすべての 注文をループするのですか? あなたはすでにクローズする必要があるチケット 番号を知っている... なぜループするのですか?

 
...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
      {  
         if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
         {   
            Check = false;
            if ( TREN == "LONG" )
              PRC = MarketInfo(SYMB,MODE_BID);
            else
            if ( TREN == "SHORT" )
               PRC = MarketInfo(SYMB,MODE_ASK);
         
            Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
            if ( Check )
               break;
         }      
      } 
   }
   return;
}
//-----------------------------------------------+

これで、より明確になったかと思います。

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

 
RaptorUK:

それはとても、とてもシンプルなことです ... ...

この簡単な質問に答えるだけで、あなたの答えが見つかります ... ...

チケット 番号を関数に渡すと、そのチケットはクローズできます ... ... なぜ、他のすべての 注文をループするのですか? あなたはすでにクローズする必要があるチケット 番号を知って います ... ... なぜループするのですか?


Raptorさん、ありがとうございます!一度ORDERSELECTなしでやってみたのですが、同じようなミスがありました。

Y.

 
最初のページですでにヒントを出しています。 https://www.mql5.com/en/forum/139543
 

Onewithzachyさん、ありがとうございます。

が表示され、TICKETが見つかりませんでした。

 
crossy:

こんにちは、フレンズです。


OrderT はオーダーチケットの番号です。




私の問題点はEAは時々、非常にうまく取引を終了しますが、時々、EAは取引を終了しますが、すでに終了しているにもかかわらず、それを終了するためにチケットを探し続けていることです。

(エラー: "Unknown ticket number..." が出ます。

ロジックを間違えてしまったようです。

よろしくお願いします。

Y

それは非常に、非常に簡単です。

この簡単な質問に答えるだけで、あなたの答えが見つかります.

チケット 番号を関数に渡して、チケットをクローズすることができます ... ... なぜ、他のすべての 注文をループするのですか? あなたはすでにクローズする必要があるチケット 番号を知っている... なぜループするのですか?

 
onewithzachy:
最初のページですでにヒントを出しています。 https://www.mql5.com/en/forum/139543
そして、その答えも出したのですが ... https://www.mql5.com/en/forum/139543
 
crossy:


Raptorさんありがとうございます!一度ORDERSELECTなしでやってみたのですが、同じようなミスがありました。

あなたは私が書いたものを読んでいないし、尋ねた... ...なぜループなのですか? この状況でのループの機能は 何ですか?
 
...
   for(int cnt = OrdersTotal()-1; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
      if ( OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol();
         OrderT   = OrderTicket();
         OrderM   = OrderMagicNumber();
         OrderTyp = OrderType();
         OrderL   = OrderLots();
      }   
      if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt=0; cntt<20000; cntt++ )
   {
      if ( Check )
      {
         Check_Ini();
         return;
      }
      Check = false;
      if ( TREN == "LONG" )
         PRC = MarketInfo(SYMB,MODE_BID);
      else
      if ( TREN == "SHORT" )
         PRC = MarketInfo(SYMB,MODE_ASK);
         
      Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
   }
   return;
}
//-----------------------------------------------+

O.K.同じミスをした修正版を紹介します。

Y.