여러 주문 문제 - 페이지 5

 
RaptorUK :

실행 오류 코드 를 읽고 코드가 여기에 제공된 정보(예: . . .

ERR_TRADE_TIMEOUT 128 거래 시간 초과에 도달했습니다. 재시도 전( 최소 1분 이내 ) 거래 조작이 실제로 성공하지 않았는지(새 포지션이 열리지 않았는지, 기존 주문이 수정 또는 삭제되지 않았는지, 기존 포지션이 있는지 확인하는 것이 필요합니다. 닫히지 않았습니다)


안녕하세요 RaptorUK입니다.

힌트를 주셔서 감사합니다.

또 다른 문제(하나 더.....);

ECN Broker에서 하나의 거래가 열려 있고 " 거래를 할 때의 요구 사항 및 제한 사항 "에 따라 정지 거리 내에 있는 손절매가 있는 경우 시장 주문을 닫을 수 없습니다. 이 경우 이 CloseAll 기능은 동결 범위 내에 있는 주문도 닫을 것입니다. 거리 ?

친애하는

루이스

 void CloseAllOnSL()
 {
   int OrdType, GLError;
   double OrderClosed;   
        RefreshRates(); 

   int LastClosedTicket=GetTicketFromHistory( Symbol (),MagicNumber);  
   if (LastClosedTicket> 0 )                                          
   { //28                                                  
       Print ( "LastClosedTicket=" ,LastClosedTicket);                   
       if ( OrderSelect (LastClosedTicket,SELECT_BY_TICKET))             
      { //29        
         if ( MathAbs (OrderTakeProfit()-OrderClosePrice())>            
             MathAbs (OrderStopLoss()-OrderClosePrice()))              
            { //30        
             Print ( "Order with ticketnr: " , LastClosedTicket,
                   " hit SL! Close all open orders" );

       for ( int OrderPos = OrdersTotal ()- 1 ; OrderPos >= 0 ; OrderPos--)       
         if ( OrderSelect (OrderPos, SELECT_BY_POS, MODE_TRADES)
            && OrderMagicNumber()== MagicNumber 
            && OrderSymbol()== Symbol ())                                       
            { //31
            OrdType = OrderType();
             if (OrdType == OP_BUY || OrdType==OP_SELL)
              { //32
               if (!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(),RealSlippage, Yellow))
                  GLError = GetLastError ();
              } //32               
             } //31      
         } //28 
      } //29     
   } //30 
 
   if (GLError > 0 ) Print ( "Error Closing/Deleting Order, error # " , GLError, " for ticket: " , OrderTicket());           
}
 
luisneves :


안녕하세요 RaptorUK입니다.

힌트를 주셔서 감사합니다.

또 다른 문제(하나 더.....);

ECN Broker에서 하나의 거래가 열려 있고 " 거래를 할 때의 요구 사항 및 제한 사항 "에 따라 정지 거리 내에 있는 손절매가 있는 경우 시장 주문을 닫을 수 없습니다. 이 경우 이 CloseAll 기능은 동결 범위 내에 있는 주문도 닫을 것입니다. 거리 ?

아니요, 실패할 것입니다. 아마도 오류 130 일 것입니다.
 

안녕하세요 RaptorUK입니다.

가능하다면 이 문제에 대해 도움을 요청하고 싶습니다.

이 코드 조각은 마지막 OrderLots()를 찾아 승수 요소로 곱하지만 때때로 이 요소를 통과하고 이런 식으로 주문이 있습니다. 0.01, 196,83, 590,49 등

나는 주문을 여는 데 한계가 있다고 말해야합니다.이 경우 5입니다. 이제이 논리를 보니 5 이상의 주문을 여는 조건이 와도 열리지 않고 다음 주문의 수 풀은 5로 제한되므로 코드가 풀에서 5개의 주문만 볼 수 있는 경우 해당 주문의 로트 크기는 다음과 같아야 합니다. 0.01, 0.02, 0.04, 0.08, 0.16. 이 코드에 내가 알지 못하는 문제가 있습니까?

(들여쓰기가 잘 되기를...)

 for ( int cnt = 0 ; cnt < OrdersTotal (); cnt++)
   { //11
  if ( OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES))
   { //12
  if (OrderSymbol() == Symbol ()&& OrderMagicNumber() == MagicNumber)
   { //13
     LastLot = OrderLots();
   } //13              
     MLots = 0 ;                       
     MLots = LastLot * Multiplier;        
   } //12
  else MLots = LotSize;
   } //11 
 return ( 0 );
 } //0 

친애하는

루이스

 
luisneves :

안녕하세요 RaptorUK입니다.

가능하다면 이 문제에 대해 도움을 요청하고 싶습니다.

이 코드 조각은 마지막 OrderLots()를 찾아 승수 요소로 곱하지만 때때로 이 요소를 통과하고 이런 식으로 주문이 있습니다. 0.01, 196,83, 590,49 등

나는 주문을 여는 데 한계가 있다고 말해야합니다.이 경우 5입니다. 이제이 논리를 보니 5 이상의 주문을 여는 조건이 와도 열리지 않고 다음 주문의 수 풀은 5로 제한되므로 코드가 풀에서 5개의 주문만 볼 수 있는 경우 해당 주문의 로트 크기는 다음과 같아야 합니다. 0.01, 0.02, 0.04, 0.08, 0.16. 이 코드에 내가 알지 못하는 문제가 있습니까?

(들여쓰기가 잘 되기를...)

나는 이렇게 한다. . .

 for ( int cnt = 0 ; cnt < OrdersTotal (); cnt++)
   { //11
   if ( OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES))
      { //12
       if (OrderSymbol() == Symbol ()&& OrderMagicNumber() == MagicNumber)
         { //13
         LastLot = OrderLots();
         } //13              
      MLots = 0 ;                       
      MLots = LastLot * Multiplier;        
      } //12
   else MLots = LotSize;
   } //11 
return ( 0 );
} //0 

OrderSelect()가 실패하면 MLots = LotSize ?? 왜요 ? 들여쓰기는 if 문과 중괄호에서 무슨 일이 일어나는지 확인하는 데 도움이 되지 않습니다. . . 이걸 하려고 했지?

 for ( int cnt = 0 ; cnt < OrdersTotal (); cnt++)
   { //11
   if ( OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES))
      { //12
       if (OrderSymbol() == Symbol ()&& OrderMagicNumber() == MagicNumber)
         { //13
         LastLot = OrderLots();
         MLots = 0 ;                       
         MLots = LastLot * Multiplier; 
         } //13              
      } //12
   } //11 
if (MLots < 0.001 ) MLots = LotSize;   //   if MLots == 0.0
return ( 0 );
} //0 

난 이걸했다 . . .

 if (MLots < 0.001 )

. . 이중 비교 문제를 피하기 위한 빠르고 더러운 방법으로, 이것을 읽었습니까? 가격 수 != 가격 ?

 
RaptorUK :

나는 이렇게 한다. . .

OrderSelect()가 실패하면 MLots = LotSize ?? 왜요 ? 들여쓰기는 if 문과 중괄호에서 무슨 일이 일어나는지 확인하는 데 도움이 되지 않습니다. . . 이걸 하려고 했지?

난 이걸했다 . . .

. . 이중 비교 문제를 피하기 위한 빠르고 더러운 방법으로, 이것을 읽었습니까? 가격 수 != 가격 ?


안녕하세요 RaptorUk입니다.

귀하의 신속한 응답에 감사드립니다.

따라서 다른 것은 쓸모가 없기 때문에 사용하지 않는 것이 좋습니다. 그리고 제공된 링크에 감사드립니다.

베스트 에가드

루이스

 

안녕하세요 RaptorUK입니다.

문제가 하나 더 있습니다(하나 더.....)

일부 주문은 시간 전에 마감됩니다. 제 말은 다음과 같습니다.

이 주문은 개설되었으며 최대 6개까지 열 수 있습니다. 모든 주문은 TrailingStop을 통해 마감되어야 하지만 주문 1. 3 및 5는 (07:43) 이후에 마감된 다른 주문보다 먼저 마감되었습니다.

이 3개의 주문으로 인해 다른 주문보다 먼저 마감되어 주문 7, 8 및 9를 열 수 있는 공간이 제공되고 이 주문은 마지막 로트(2.43)를 기반으로 하는 로트로 시작됩니다.

그래서 제가 알기로는 07:23에 주문이 불규칙하게 마감되는 일이 발생해서는 안 되며 오류가 발견되지 않았습니다...

1 - 4951819 2013.01.28 19:51 팔다 0.01 유로디 1.34547 1.35047 1.34347 2013.01.29 07:23 1.34347 -0.06 0.00 0.00 1.49
2 - 4952036 2013.01.28 20:04 구입 0.03 유로디 1.34579 1.34079 1.34779 2013.01.29 07:43 1.34421 -0.17 0.00 -0.04 -3.53
3 - 4952074 2013.01.28 20:12 팔다 0.09 유로디 1.34548 1.35048 1.34348 2013.01.29 07:23 1.34348 -0.50 0.00 0.00 13.40
4 - 4952093 2013.01.28 20:20 구입 0.27 유로디 1.34579 1.34079 1.34779 2013.01.29 07:43 1.34421 -1.49 0.00 -0.38 -31.74
5 - 4952110 2013.01.28 20:27 팔다 0.81 유로디 1.34548 1.35048 1.34348 2013.01.29 07:23 1.34348 -4.46 0.00 0.00 120.58
6 - 4952150 2013.01.28 20:48 구입 2.43 유로디 1.34579 1.34079 1.34779 2013.01.29 07:43 1.34421 -13.37 0.00 -3.43 -285.63
7 - 4959337 2013.01.29 07:23 팔다 7.29 유로디 1.34351 1.34851 1.34151 2013.01.29 07:43 1.34424 -40.10 0.00 0.00 -395.89
8 - 4959858 2013.01.29 07:40 구입 21.87 유로디 1.34382 1.34422 1.34582 2013.01.29 07:43 1.34422 -120.29 0.00 0.00 650.79
9 - 4959860 2013.01.29 07:40 팔다 65.61 유로디 1.34382 1.34882 1.34182 2013.01.29 07:43 1.34424 -360.86 0.00 0.00 -2 049.95

TrailingStop을 사용하여 모두 닫는 코드는 다음과 같습니다.

이 코드가 실패하고 다른 시간에 주문을 마감할 수 있습니까?

 void CloseAllOnSL()
 {
   int OrdType, GLError;
   double OrderClosed;
        
   int LastClosedTicket=GetTicketFromHistory( Symbol (),MagicNumber);  
   if (LastClosedTicket > 0 )                                          
   { //28                                                  
       Print ( "LastClosedTicket=" ,LastClosedTicket);                   
       if ( OrderSelect (LastClosedTicket,SELECT_BY_TICKET))             
      { //29        
         if ( MathAbs (OrderTakeProfit()- OrderClosePrice())>            
             MathAbs (OrderStopLoss()- OrderClosePrice()))             
            { //30        
             Print ( "Order with ticketnr: " , LastClosedTicket,
                   " hit SL! Close all open orders" );

       for ( int OrderPos = OrdersTotal ()- 1 ; OrderPos >= 0 ; OrderPos--)       
         if ( OrderSelect (OrderPos, SELECT_BY_POS, MODE_TRADES)
            && OrderMagicNumber()== MagicNumber 
            && OrderSymbol()== Symbol ())                                       
            { //31
            OrdType = OrderType();
             if (OrdType == OP_BUY || OrdType==OP_SELL)
              { //32
               while (IsTradeContextBusy()) Sleep (SleepTime);  
                   RefreshRates();
               if (!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(),RealSlippage, Yellow))                
                 GLError = GetLastError ();
              } //32               
             } //31      
         } //28 
      } //29     
   } //30 

친애하는

루이스

 
luisneves :


TrailingStop을 사용하여 모두 닫는 코드는 다음과 같습니다.

이 코드가 실패하고 다른 시간에 주문을 마감할 수 있습니까?

알겠습니다. 말이 안 됩니다. . . 후행 SL은 가격이 주문과 함께 가면 SL이 가격 쪽으로 이동하도록 설정되어 새 SL에 도달하면 손실이나 이익이 적습니다. 어쨌든 거래를 OrderClose()하려는 경우 왜 후행 SL이 있습니까? 나에게 그것은 후행 SL이 아니며 SL이 아닌 EA를 통해 거래를 적극적으로 마감하기 때문에 어떤 종류의 SL도 아닙니다.

CloseAllOnSL() 함수 가 내가 생각하는 것과 다른 작업을 수행할 수 있지만 코드가 수행하려는 작업을 설명하는 주석이 없습니다. OrderModify()가 없으므로 후행 Sl이 없습니다.

 

읽어보기: 함수 반환 값이란 무엇입니까? 어떻게 사용합니까?

 if (OrdType == OP_BUY || OrdType==OP_SELL)
              { //32
               while (IsTradeContextBusy()) Sleep (SleepTime);  
                   RefreshRates();
               if (!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(),RealSlippage, Yellow))                
                 {
                 GLError = GetLastError ();

                 //  ? ? ? ? ?  why aren't you printing the information about the OrderClose() failure ? ? 
                 Print ( "OrderClose failed, error# " , GLError);   //<-----  like this  but more info
                 } 
              } //32 

Print 문에 더 많은 정보를 추가하고, OrderTicket(), OrderLots(), OrderClosePrice(), Bid, Ask 등을 추가하십시오. 오류가 발생했을 때 문제가 무엇인지 확인하는 데 필요한 모든 정보는 쉽게 돌아갈 수 없습니다. 제 시간에 이 모든 것을 찾아내서 그것이 발생하면 그것을 로그에 인쇄하십시오.

 
luisneves :


그래서 제가 알기로는 07:23에 주문이 불규칙하게 마감되는 일이 발생해서는 안 되며 오류가 발견되지 않았습니다...

1 - 4951819 2013.01.28 19:51 팔다 0.01 유로디 1.34547 1.35047 1.34347 2013.01.29 07:23 1.34347 -0.06 0.00 0.00 1.49
2 - 4952036 2013.01.28 20:04 구입 0.03 유로디 1.34579 1.34079 1.34779 2013.01.29 07:43 1.34421 -0.17 0.00 -0.04 -3.53
3 - 4952074 2013.01.28 20:12 팔다 0.09 유로디 1.34548 1.35048 1.34348 2013.01.29 07:23 1.34348 -0.50 0.00 0.00 13.40
4 - 4952093 2013.01.28 20:20 구입 0.27 유로디 1.34579 1.34079 1.34779 2013.01.29 07:43 1.34421 -1.49 0.00 -0.38 -31.74
5 - 4952110 2013.01.28 20:27 팔다 0.81 유로디 1.34548 1.35048 1.34348 2013.01.29 07:23 1.34348 -4.46 0.00 0.00 120.58
6 - 4952150 2013.01.28 20:48 구입 2.43 유로디 1.34579 1.34079 1.34779 2013.01.29 07:43 1.34421 -13.37 0.00 -3.43 -285.63
7 - 4959337 2013.01.29 07:23 팔다 7.29 유로디 1.34351 1.34851 1.34151 2013.01.29 07:43 1.34424 -40.10 0.00 0.00 -395.89
8 - 4959858 2013.01.29 07:40 구입 21.87 유로디 1.34382 1.34422 1.34582 2013.01.29 07:43 1.34422 -120.29 0.00 0.00 650.79
9 - 4959860 2013.01.29 07:40 팔다 65.61 유로디 1.34382 1.34882 1.34182 2013.01.29 07:43 1.34424 -360.86 0.00 0.00 -2 049.95

이러한 일이 발생했을 때 로그의 출력을 표시합니다. . .
 
RaptorUK :

읽어보기: 함수 반환 값이란 무엇입니까? 어떻게 사용합니까?

Print 문에 더 많은 정보를 추가하고, OrderTicket(), OrderLots(), OrderClosePrice(), Bid, Ask 등을 추가하십시오. 오류가 발생했을 때 문제가 무엇인지 확인하는 데 필요한 모든 정보는 쉽게 돌아갈 수 없습니다. 제 시간에 이 모든 것을 찾아내서 그것이 발생하면 그것을 로그에 인쇄하십시오.


안녕하세요 RaptorUk입니다.

시간 내주셔서 감사합니다.

TrailingStop에 대한 코드는 다른 부분에 있으며, 전송된 코드는 TrailingStop을 통해 주문이 마감되면 모두 닫는 것입니다.

그럼에도 불구하고 나는 당신의 조언을 따라 주문이 다른 주문보다 먼저 마감되는 이유에 대해 추가 정보를 제공할 수 있는 오류를 찾습니다.

그건 그렇고, 다음 코드에서 MLots = 0의 위치를 변경하는 것이 합리적입니다. 실제 위치에서 for 루프 이전까지?

   MLots = 0 ;  <-----------------------------------------------------------------to here 
   for ( int cnt = 0 ; cnt < OrdersTotal (); cnt++)
      { //11
       if ( OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES))
         { //12
         if (OrderSymbol() == Symbol ()&& OrderMagicNumber() == MagicNumber)
            { //13
            LastLot = OrderLots();
            } //13            
         MLots = 0;  <-----------------------------------------------------------from here                      
         MLots = LastLot * Multiplier;        
         } //12      
      } //11 
   return ( 0 );
   } //0 

친애하는

루이스