MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1720

 
MakarFX # :
오류는 끝에서 두 번째 검색 코드에 있는 것이 아니라 정보를 텍스트로 출력하는 데 있을 가능성이 가장 높습니다.

코드의 오류에 대한 이야기는 없었습니다. 이 코드는 새로운 최대 주문이 열렸을 때 작동하며 이것이 발생하지 않을 때 고문은 끝에서 두 번째 주문 = 마지막 주문으로 간주합니다. 그게 다야

 
MakarFX # :
오류는 끝에서 두 번째 검색 코드에 있는 것이 아니라 정보를 텍스트로 출력하는 데 있을 가능성이 가장 높습니다.

Makar, 강조 표시된 조건이 작동하지 않는 이유를 더 잘 알려주세요.

 //+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0 ;
     {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--)
        {
         if ( OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   if (OrderTicket() > penultimate_ticket)
                     if (penultimate_ticket < GetTicketMaxOrder())
                        penultimate_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return (penultimate_ticket);
  }
 
EVGENII SHELIPOV # :

Makar, 강조 표시된 조건이 작동하지 않는 이유를 더 잘 알려주세요.

이 줄에서 최대 티켓을 찾습니다.

 if (OrderTicket() > penultimate_ticket)

이 줄에서 최대값과 최대값을 비교합니다.

 if (penultimate_ticket < GetTicketMaxOrder())
그래서 항상 거짓
 
EVGENII SHELIPOV # :

코드의 오류에 대한 이야기는 없었습니다. 이 코드는 새로운 최대 주문이 열렸을 때 작동하며 이것이 발생하지 않을 때 고문은 끝에서 두 번째 주문 = 마지막 주문으로 간주합니다. 그게 다야

이는 어드바이저가 다시 시작하는 경우에만 해당됩니다.

 
MakarFX # :

이는 어드바이저가 다시 시작하는 경우에만 해당됩니다.

No Makar, 봐봐, 내가 모니터에 마지막에서 두 번째 오더 변수와 마지막 오더 기능을 표시했어

 ObjectCreate ( "signal400" , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 );
   ObjectSet( "signal400" , OBJPROP_XDISTANCE , 100 );
   ObjectSet( "signal400" , OBJPROP_YDISTANCE , 740 );
   ObjectSetText( "signal400" , DoubleToString (FindPenultimateLots(), 2 ), 14 , "Tahoma" , clrRed );
   ObjectCreate ( "signal401" , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 );
   ObjectSet( "signal401" , OBJPROP_XDISTANCE , 200 );
   ObjectSet( "signal401" , OBJPROP_YDISTANCE , 740 );
   ObjectSetText( "signal401" , DoubleToString (prev_ticket, 0 ), 14 , "Tahoma" , clrRed );
 
MakarFX # :

이 줄에서 최대 티켓을 찾습니다.

이 줄에서 최대값과 최대값을 비교합니다.

그래서 항상 거짓

글쎄, 모든 티켓에서 기능별로 정렬되도록 만드는 방법

(OrderTicket()

동일한 티켓을 제거

 GetTicketMaxOrder()
 
EVGENII SHELIPOV # :

Makar, 강조 표시된 조건이 작동하지 않는 이유를 더 잘 알려주세요.

 //+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0 ;
     {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--)
        {
         if ( OrderSelect ( ticket , SELECT_BY_TICKET, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   if (OrderTicket() > penultimate_ticket)
                     if (penultimate_ticket < GetTicketMaxOrder())
                        penultimate_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return (penultimate_ticket);
  }

유진, 티켓 변수는 어디에서 바뀌나요? 아니면 전체 주기가 하나의 주문으로 작동합니까?

 
Alexey Viktorov # :

유진, 티켓 변수는 어디에서 바뀌나요? 아니면 전체 주기가 하나의 주문으로 작동합니까?

나는 이미 그에게 편지를 썼다 .
 
EVGENII SHELIPOV # :

No Makar, 봐, 내가 모니터에 끝에서 두 번째 순서 변수와 마지막 주문 기능을 표시했습니다

EA가 다시 시작되면 prev_ticket이 재설정됩니다.
 
MakarFX # :

다시 한 번... 작동 코드를 주었습니다!

테스터에서 실행하고 버튼을 누릅니다.

이를 보려면 주문이 마감되었는지 확인해야 하지만 이 Expert Advisor에서는 이러한 일이 발생하지 않습니다. 그리고 전체 문제는 최대 주문 마감 후에 발생합니다.

사유: