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

 
개발자 참고.


은 char 유형 의 크기만 보장합니다. 다른 유형의 길이는 구현에 따라 다릅니다. 조회 테이블이 올바르지 않으며 정의되지 않은 동작이 발생할 수 있습니다.

Целые типы - Типы данных - Основы языка - Справочник MQL4
Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Целые типы представлены в языке MQL4 одиннадцатью видами. Некоторые из типов могут использоваться вместе с другими, если этого требует логика программы, но при этом необходимо иметь ввиду правила преобразования типов. В таблице приведены характеристики каждого типа. Кроме того, в...
 
이 주제와 관련이 없는 댓글은 " MQL4 MT4 MetaTrader 4 초보자의 질문 "으로 이동되었습니다.
 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2018.12.01 11:15

슈퍼 제동 설계
 string Str[];
const int handle = FileOpen (FileName, FILE_READ | FILE_ANSI | FILE_TXT );  

FileReadArray (handle, Str);

100만 라인의 40MB 파일을 18초 만에 읽습니다.


동일한 출력이지만 다르게 수행됨

   uchar Bytes[];
   const int handle = FileOpen (FileName, FILE_READ | FILE_BIN );
  
   FileReadArray (handle, Bytes);

   string Str[];
   StringSplit ( CharArrayToString (Bytes), '\n' , Str);

0.5초만에 완료.


 

작업으로 16Gb RAM이 과부하되었습니다. 결과적으로 Chrome은 정지되고 최적화가 실행되는 MT5는 문제가 없습니다. 그러나 더 흥미로운 것은 MT4입니다.

표시기는 계속 쟁기질했고 Expert Advisors는 ArrayResize의 결과를 확인하지 않았기 때문에 "범위를 벗어남"으로 인해 중지되었습니다.

항상 ArrayResize를 확인하고 싶지는 않지만 이 확인이 없으면 VPS의 전투 고문과 같이 중지할 수 있다는 확인이 있습니다.


그러나 이전에 ArrayResize가 큰 Reserve로 만들어진 경우 "범위를 벗어남"이 어떻게 발생했는지 이해할 수 없습니다.

 
fxsaber :

작업으로 16Gb RAM이 과부하되었습니다. 결과적으로 Chrome은 정지되고 최적화가 실행되는 MT5는 문제가 없습니다. 그러나 더 흥미로운 것은 MT4입니다.

표시기는 계속 쟁기질했고 Expert Advisors는 ArrayResize의 결과를 확인하지 않았기 때문에 "범위를 벗어남"으로 인해 중지되었습니다.

항상 ArrayResize를 확인하고 싶지는 않지만 이 확인이 없으면 VPS의 전투 고문과 같이 중지할 수 있다는 확인이 있습니다.


그러나 이전에 ArrayResize가 큰 Reserve로 만들어진 경우 "범위를 벗어남"이 어떻게 발생했는지 이해할 수 없습니다.

쉬운 :-) 대부분의 언어/시스템에서 그렇습니다.

할당된(수신된) 가상 메모리를 예약하고 물리적 메모리가 소진되었을 때 메모리에 액세스할 때 여유 페이지가 없었습니다. 일련의 처리 후에 범위를 벗어난 프로세서 예외가 발생했습니다.

그건 그렇고, MT가 전혀 무너지지 않았다는 사실이 작품의 품질을 확인합니다 :-)

 

그는 역사의 순서 정렬이라는 주제에 대해 심각한 오류 를 범했습니다. 마감 시간순으로 정렬하는 것은 불행히도 항상 그런 것은 아닙니다.

스크립트 확인

 #property strict

void OnStart ()
{
   datetime time = INT_MAX ;
  
   for ( int i = OrdersHistoryTotal () - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
    {
       if ( OrderCloseTime () > time)
      {
         Print (time);
         OrderPrint ();
        
//        break;
      }
      
      time = OrderCloseTime ();
    }
}


자체 테스트를 위해 그러한 기본 코드가 즉시 삭제되지 않은 이유는 미스터리입니다.

수수께끼처럼 어떻게 주문이 시간순으로 정렬되지 않을 수 있습니까? KB에 커스텀 테스터를 게시했기 때문에 이 질문을 하는 것입니다. 그리고 그 명령이 역사에 들어왔기 때문에 거기에 대한 기록은 더 일찍 얻은 기록보다 나중에 있다는 것이 논리적입니다. 이 논리가 어떻게 흔들릴 수 있는지 전혀 명확하지 않습니다.

아마도 주문이 다른 MT5 서버에 저장된 다음 동기화 중에 그런 말도 안되는 소리가 나옵니다. 이것이 MT4 거래 서버가 아닌 터미널의 버그였으면 합니다. 글쎄요, MT에서의 거래에서는 이런 일이 일어나지 않았으면 합니다.

 
fxsaber :

그는 역사의 순서 정렬이라는 주제에 대해 심각한 오류 를 범했습니다. 마감 시간순으로 정렬하는 것은 불행히도 항상 그런 것은 아닙니다.

스크립트 확인


자체 테스트를 위해 그러한 기본 코드가 즉시 삭제되지 않은 이유는 미스터리입니다.

수수께끼처럼 어떻게 주문이 시간순으로 정렬되지 않을 수 있습니까? KB에 커스텀 테스터를 게시했기 때문에 이 질문을 하는 것입니다. 그리고 그 명령이 역사에 들어왔기 때문에 거기에 대한 기록은 더 일찍 얻은 기록보다 나중에 있다는 것이 논리적입니다. 이 논리가 어떻게 흔들릴 수 있는지 전혀 명확하지 않습니다.

아마도 주문이 다른 MT5 서버에 저장된 다음 동기화 중에 그런 말도 안되는 소리가 나옵니다. 나는 이것이 MT4 거래 서버가 아니라 터미널의 버그이기를 바랍니다. 글쎄요, MT에서의 거래에서는 이런 일이 일어나지 않았으면 합니다.

계정 내역에서 정렬을 변경해 보셨나요?

 
Artyom Trishkin :

계정 내역에서 정렬을 변경해 보셨나요?

결과에 영향을 미치지 않습니다.

 
Artyom Trishkin :

계정 내역에서 정렬을 변경해 보셨나요?

예, 중요하지 않습니다. "계정 내역" 탭 의 주문 수 에만 영향을 줍니다. 이것은 모니터링해야 합니다.

 
fxsaber :

결과에 영향을 미치지 않습니다.

포지션 마감 시간은 서버에서 제공합니다.

사유: