mql4 언어의 기능, 미묘함 및 작업 방법 - 페이지 27

 
Andrey Khatimlianskii :

잘못된 매개변수 세트로 표시기가 호출됨

예, 표시기에 상당히 많은 매개변수가 있지만 iCustom이 메모리를 채우도록 할 수 있습니까? 메모리는 약 2시간 안에 가득 차므로 빈 iCustom을 테스트하고 한 번에 하나의 매개변수를 추가하는 데 오랜 시간이 걸립니다. 팁이 있나요?
추신 물론 모든 매개변수를 시각적으로 살펴보겠습니다.

 
Nauris Zukas :

예, 표시기에 상당히 많은 매개변수가 있지만 iCustom이 메모리를 채우도록 할 수 있습니까?

로그에 많은 지표가 있을 것입니다
 
TheXpert :
로그에 많은 지표가 있을 것입니다

네, 무슨 말씀이신지 압니다. 테스트 후 많은 지표가 나타날 때 전략 테스터 에서 이것을 보았습니다. 그러나 여기 전략 테스터에서는 모든 것이 잘 작동합니다. 그리고 실제 생활에서는 모든 것이 올바르게 표시됩니다.

 
Nauris Zukas :

예, 표시기에 상당히 많은 매개변수가 있지만 iCustom이 메모리를 채우도록 할 수 있습니까? 메모리는 약 2시간 안에 가득 차므로 빈 iCustom을 테스트하고 한 번에 하나의 매개변수를 추가하는 데 오랜 시간이 걸립니다. 팁이 있나요?
추신 물론 모든 매개변수를 시각적으로 살펴보겠습니다.

매개변수 없이 통화를 종료하고(기본적으로 사용됨) 지켜봅니다. 누수가 사라지면 그것이 문제입니다.

 
Nauris Zukas :

전문가는 점차 증가하는 메모리를 먹습니다.

"조금씩"은 얼마입니까?

어쩌면 정말 조금, 그리고 이것이 출시 이후 등장한 인용문의 역사입니까?

 
Andrey Khatimlianskii :

"조금씩"은 얼마입니까?

어쩌면 정말 조금, 그리고 이것이 출시 이후 등장한 인용문의 역사입니까?

여러 EA에서 MT4를 시작하고 메모리 녹음을 켭니다. 화살표가 출발을 나타내는 곳에서 "EX4 파일을 위한 메모리 부족"이 발생합니다.


 
Andrey Khatimlianskii :

매개변수 없이 통화를 종료하고(기본적으로 사용됨) 지켜봅니다. 누수가 사라지면 그것이 문제입니다.

알겠습니다. 그렇게 하겠습니다.

 
Nauris Zukas :

여러 EA에서 MT4를 시작하고 메모리 녹음을 켭니다. 화살표가 출발을 나타내는 곳에서 "EX4 파일을 위한 메모리 부족"이 발생합니다.

사용량의 40%?

콜 지표 곡선과 유사하게 선형적으로 성장합니다.

 
Andrey Khatimlianskii :

사용량의 40%?

콜 지표 곡선과 유사하게 선형적으로 성장합니다.

설정에 문제가 있는 것 같습니다. 고맙습니다!

 

MT4에서는 다음과 같은 상황이 가능합니다(이유에 대해서는 언급하지 않겠습니다).

  • 위치가 열려 있습니다. 잔액은 N입니다.
  • 특정 순간부터 위치가 사라집니다. 자본과 잔액은 N과 같습니다. 거래 내역에서 위치에 대한 단어는 없습니다.
  • 터미널을 다시 시작해도 도움이 되지 않습니다.
  • 몇 시간이 지나면 포지션이 거래 내역에 나타납니다(특정 조건에서 마감됨). 이에 따라 균형과 자본이 조정됩니다.

이것은 여러 상황이 복합적으로 작용하여 발생하는 매우 드문 상황입니다. 그러나 확률이 약 0이지만 발생할 수 있습니다.

나는 모든 전투 로봇이 그러한 상황을 식별하는 메커니즘을 반드시 설치한다고 제안합니다.

이렇게 하려면 열린 주문의 티켓을 기억하고 사라지면 거래 내역에 있는지 확인해야 합니다. 거래 내역에 없다면 Alertim!


그러한 보호의 기능.

 #define TICKET_TYPE int

// Получаем все текущие тикеты.
int GetTickets( TICKET_TYPE &Tickets[] )
{
   int Amount = ArraySize (Tickets);
    
   for ( int i = ArrayResize (Tickets, Amount + OrdersTotal ()) - Amount - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS))
      Tickets[Amount++] = OrderTicket();
          
   return ( ArrayResize (Tickets, Amount));
}

// Проверяет наличие потерянных тикетов.
int CheckTickets( void )
{
   static const bool IsTester = MQLInfoInteger ( MQL_TESTER );
   int Amount = 0 ;
  
   if (!IsTester)
  {
     static TICKET_TYPE Tickets[];
    TICKET_TYPE BadTickets[];
    
     for ( int i = ArrayResize (BadTickets, ArraySize (Tickets)) - 1 ; i >= 0 ; i--)
       if (! OrderSelect (Tickets[i], SELECT_BY_TICKET))
      {
        BadTickets[Amount++] = Tickets[i];
        
         Alert ( "Ticket " + ( string )Tickets[i] + " is not found!" );
      }
        
     ArrayResize (BadTickets, Amount);    
  
   #ifdef __MQL5__
     ArraySwap (Tickets, BadTickets);
   #else // __MQL5__
     ArrayFree (Tickets);
    
     ArrayCopy (Tickets, BadTickets);  
   #endif // __MQL5__
      
    GetTickets(Tickets);
  }
      
   return (Amount);
}
OnTick 시작 시 CheckTickets()를 호출합니다.