MQL5: 검증:-(이미 그것이 무엇인지, 그리고 어떻게 해결되는지에 대한 검색으로 내 두뇌를 곤두박질쳤습니다. - 페이지 2

 
Alexandr Gavrilin :

다른 메시지는 여백이 부족합니다.

설명된 대로 실수로 계기 에 대한 모든 로트를 주어진 방향으로 요약하려고 시도했습니다. 보류 중인 주문을 고려하고 열지 명령을 내리지 않고 초과된 경우 열려 있는 주문을 고려하면 아무 소용이 없습니다. .

오류는 동일합니다. 검증하는 동안 내 디버깅 메시지가 보고서 로그에 표시되지 않습니다. 이 처리를 포착하고 디버그하는 방법이나 내 터미널에서 해당 오류를 에뮬레이트하는 방법을 모르겠습니다.

오류 .

 
Alexandr Gavrilin :

....

오류는 동일합니다. 검증하는 동안 내 디버깅 메시지가 보고서 로그에 표시되지 않습니다. 이 처리를 포착하고 디버그하는 방법이나 내 터미널에서 해당 오류를 에뮬레이트하는 방법을 모르겠습니다.

매우 큰 볼륨으로 포지션을 열어보십시오. Expert Advisor가 이 오류를 포착 하는지 확인하십시오.

 
Alexandr Gavrilin :

다른 메시지는 여백이 부족합니다.

설명 된대로 실수로 주어진 방향으로 악기에 대한 모든 로트를 요약하려고 시도했습니다. 보류중인 주문을 고려하고 열지 명령을 내리지 않고 초과 된 경우 열려있는 주문을 고려하면 쓸모가 없습니다 .

오류는 동일합니다. 검증하는 동안 내 디버깅 메시지가 보고서 로그에 표시되지 않습니다. 이 처리를 포착하고 디버그하는 방법이나 내 터미널에서 해당 오류를 에뮬레이트하는 방법을 모르겠습니다.

마진 레벨을 확인할 수 있습니다. 5000% 미만이면 트랜잭션을 실행하지 마십시오.

 
Vladimir Karputov :

오류 .

나는 결정했다.

 //в функции до открытия ордера.

double max_volume= SymbolInfoDouble (m_name, SYMBOL_VOLUME_LIMIT );

       double current_lots=getAllVolume();

       if (max_volume> 0 && max_volume-current_lots-dlot<= 0 )
        {
         //PrintFormat("%.2f - %.2f",max_volume , dlot);
         return 0 ;
        }
//...
//функция подсчета объема
double getAllVolume()
     {
       int itotal= PositionsTotal ();
       ulong uticket=- 1 ;
       double dVolume= 0 ;

       for ( int i=itotal- 1 ;i>= 0 ;i--)
        {
         if (!(uticket= PositionGetTicket (i))) continue ;

         if ( PositionGetString ( POSITION_SYMBOL )==m_symbol.Name())
            dVolume+= PositionGetDouble ( POSITION_VOLUME );
        }

      itotal= OrdersTotal ();

       for ( int i=itotal- 1 ;i>= 0 ;i--)
        {
         if (!(uticket= OrderGetTicket (i))) continue ;

         if ( OrderGetString ( ORDER_SYMBOL )==m_symbol.Name())
            dVolume+= OrderGetDouble ( ORDER_VOLUME_CURRENT );
        }

       return dVolume;
     }
그 후 제품은 테스트를 성공적으로 통과했습니다.
 
Alexandr Gavrilin :

나는 결정했다.

그 후 제품은 테스트를 성공적으로 통과했습니다.

:)

 

그건 그렇고, SYMBOL_VOLUME_LIMIT 는 계산에서 "0.0"과 같을 수 있다는 점에 유의하십시오.

정밀 조사를 피하려면:

 if (check_volume > SymbolInfoDouble (Symbol(), SYMBOL_VOLUME_LIMIT ))
   return ;
 
Vladimir Karputov :

그건 그렇고, SYMBOL_VOLUME_LIMIT 는 계산에서 "0.0"과 같을 수 있다는 점에 유의하십시오.

정밀 조사를 피하려면:

이 메시지와 관련하여 문제가 있습니다. 즉석 판매 실패 3.30 EURUSD at 1.14380 [ 거래량 제한 도달]

나는 상계 계정이 있었고 제한이나 보류 주문이 없었습니다. 모든 수표가 있었습니다.

방금 SYMBOL_VOLUME_LIMIT 을 확인했는데 미결제 주문 여부에 관계없이 항상 0을 반환합니다. 저는 항상 하나의 포지션(상계형이기 때문에)을 가지고 있으며 이 메시지는 로트 증액 시에만 자동 증액 시에만 나타납니다. 확인.

 
Petros Shatakhtsyan :

이 메시지와 관련하여 문제가 있습니다. 즉석 판매 실패 3.30 EURUSD at 1.14380 [ 거래량 제한 도달]

나는 상계 계정이 있었고 제한이나 보류 주문이 없었습니다. 모든 수표가 있었습니다.

방금 SYMBOL_VOLUME_LIMIT 확인했는데 오픈오더 여부와 상관없이 항상 0을 반환합니다. 저는 항상 하나의 포지션(네팅 타입이기 때문에)을 가지고 있고, 이 메시지는 로트 증액 시에만 자동 밸리데이션 시에만 나타납니다. .

일부 서버에서 작업한다고 해서 주변의 모든 서버가 동일한 설정을 갖는 것은 아닙니다. :) .

 
Vladimir Karputov :

일부 서버에서 작업한다고 해서 주변의 모든 서버가 동일한 설정을 갖는 것은 아닙니다. :) .

그래서 다른 유형의 실행이 있는 다른 서버(약 5-6개)를 확인합니다. 여기 이 메시지 실행 유형은 Instant 입니다.

하지만 그게 핵심이 아닙니다. 자동 유효성 검사는 정보를 거의 제공하지 않으므로 오류를 찾기가 어렵습니다. 그리고 당신은 항상 그것을 우회할 수 있습니다.

 
어제 나는 업데이트에 대한 자동 검증을 거쳤습니다. MT5에서 반쯤 찌르고 MT4는 거의 모든 주문을받지 않고 저녁 내내 보냈습니다. 스프레드를 설정하지 않았습니다. 피곤, 몇 시간 만에 갔다. 문제없이 통과했습니다. 그래서 때때로 문제는 전문가가 아니라 서비스에 있습니다.