오류, 버그, 질문 - 페이지 1850

 
버그인가요?
 struct STRUCT
{
   int a;
  
  STRUCT() {} // Если закомментировать, ошибка пропадает
};

void OnStart ()
{
  STRUCT Struct = { 1 }; // cannot be initialized with initializer list
}
 

스타일러 를 사용할 때 버그?

탭을 사용하여 작성했다고 가정해 보겠습니다.

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
   input int x= 0 ;
   #define TWO_DIM ( 10000 )
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   double       massive[][TWO_DIM];
  }
//+------------------------------------------------------------------+

오류가 없습니다.

그런 다음 스타일러를 사용하여

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
input int x= 0 ;
#define TWO_DIM( 10000 )
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   double       massive[][TWO_DIM];
  }
//+------------------------------------------------------------------+
'10000' - unexpected in macro formal parameter list     bug.mq5 7       17
'[' - invalid index value       bug.mq5 13      25

저것들. 스타일러는 TWO_DIM( 10000 ) 사이의 공간을 지웁니다.

 
컴파일 오류
 template < typename T>
struct STRUCT
{
   template < typename T1>  
  STRUCT( T1 Value ) {} // 'STRUCT<int><int>' - declaration without type

};

void OnStart ()
{
  STRUCT< int > Struct( 0 ); // 'STRUCT<int>' - cannot to apply function template
}
 
약간의 해킹. 할당 우회
 template < typename T>
struct STRUCT_COPY
{
  T Value;
  
  STRUCT_COPY( const T& tValue)
  {
     this = (STRUCT_COPY)tValue;
  }  
};

struct STRUCT
{
   int i;
  
   void operator =( const STRUCT& )
  {
     this .i = 5 ;
  }
};

#define PRINT(A) :: Print ( #A + " = " + ( string )(A));

void OnStart ()
{
  STRUCT Struct;  
  Struct.i = 1 ;  
  PRINT(Struct.i);
  
  STRUCT StructCopy1 = Struct;
  PRINT(StructCopy1.i);
  
   // Обходим void STRUCT::operator=(const STRUCT&)
  STRUCT_COPY<STRUCT> StructCopy2(Struct);
  PRINT(StructCopy2.Value.i);  
}

결과

 Struct.i = 1
StructCopy1.i = 5
StructCopy2.Value.i = 1
 

어때요?

 struct STRUCT
{
   template < typename T>
   void operator []( int ) {}
};

void OnStart ()
{
  STRUCT Struct;
  
  Struct. operator []< int >( 0 ); // Нормально
  Struct[ 0 ]< int >;             // Ошибка
}
 
여전히 그러한 질문이 있습니다. 내가 이해하는 것처럼 MT5에서 동일한 CopyClose 의 버퍼를 처음 복사하는 시간은 다음에 따라 다릅니다.

1. 이전에 시세표를 전혀 받지 못한 경우, 차트를 열지 않은 경우 등 (ping, 인터넷 속도, 하드 드라이브, Bases/Broker/history/ticker/cache/ 파일 준비에 따라 다름)

 2017.04 . 11 11 : 27 : 38.828 время копирования буфера (EURUSD,M1)    проход = 0   время= 8355581
2017.04 . 11 11 : 27 : 38.828 время копирования буфера (EURUSD,M1)    проход = 1   время= 1083

2. 이전 시세를 받은 후 터미널을 다시 시작한 경우 이 시세의 차트가 열려 있지 않은 경우(Bases/Broker/history/ticker/cache/ 파일 준비)

 2017.04 . 11 11 : 29 : 14.672 время копирования буфера (EURUSD,M1)    проход = 0   время= 599396
2017.04 . 11 11 : 29 : 14.734 время копирования буфера (EURUSD,M1)    проход = 1   время= 259
/////////////////////////////
2017.04 . 12 19 : 32 : 46.489 время копирования буфера (FULT,M5)      проход = 0   время= 98167
2017.04 . 12 19 : 32 : 46.557 время копирования буфера (FULT,M5)      проход = 1   время= 155
2017.04 . 12 19 : 32 : 46.557 время копирования буфера (FULT,M5)      проход = 2   время= 14

시간은 항목 1보다 10-15배 적습니다.


비교를 위해 2절에 따른 MT4의 액세스 시간, 즉 터미널 재시작 후

 2017.04 . 12 19 : 30 : 38.831 время копирования буфера EURUSD,M1: проход = 2   время= 276
2017.04 . 12 19 : 30 : 38.831 время копирования буфера EURUSD,M1: проход = 1   время= 434
2017.04 . 12 19 : 30 : 38.831 время копирования буфера EURUSD,M1: проход = 0   время= 2260
2017.04 . 12 19 : 30 : 38.816 время копирования буфера EURUSD,M1: initialized
2017.04 . 12 19 : 30 : 38.666 время копирования буфера EURUSD,M1 inputs: Pair=USDCAD;

저것들. MT4에서는 터미널을 다시 시작한 후 시간이 수십 배 더 짧습니다.

이번에는 SSD 없이 Windows에서 모든 것을 확인했습니다!

3. 견적이 수신되면 터미널이 다시 시작되지 않고 데이터 액세스가 중단되었습니다.

 2017.04 . 11 11 : 35 : 30.648 время копирования буфера (EURUSD,M1)    проход = 0   время= 89
2017.04 . 11 11 : 35 : 30.648 время копирования буфера (EURUSD,M1)    проход = 1   время= 42

캐시를 준비하면 터미널이 후속 액세스(2회 액세스에서 시작)에 훨씬 적은 시간을 소비한다는 것을 올바르게 이해합니까?

터미널을 다시 시작한 후 첫 번째 호출 시간을 어떻게든 줄여서 MT4와 같게 할 수 있습니까?

코드는 https://www.mql5.com/en/forum/1111/page1870#comment_4856899에 있었습니다.

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • www.mql5.com
Форум алго-трейдеров MQL5
 
kaus_bonus :
여전히 그러한 질문이 있습니다. 내가 이해하는 것처럼 MT5에서 동일한 CopyClose의 버퍼를 처음 복사하는 시간은 다음에 따라 다릅니다.

환경과 재생 방법에 대한 설명이 전혀 없기 때문에 테스트 방법이 매우 지저분합니다.

명시되지 않은:

  • 창의 막대 제한
  • 터미널 데이터베이스의 실제 데이터 볼륨
  • 서버는 정확히 무엇이며 디스크에 있는 데이터베이스는 무엇입니까? 모든 데이터는 디스크에 있어야 합니다.
  • 테스트 플랫폼 및 비트 깊이(덩굴 아래? 세부적으로 지정해야 함)
  • 열린 창문의 존재

이것이 없으면 결론은 근거가 없습니다.


예를 들어 EURUSD M1 - MT5에는 6백만 개 이상의 막대가 있으며(차트에 무제한 모드가 있는 경우) MT4에는 얼마가 있습니까? 실제로 데이터베이스에 수만 개의 M1 막대가 있습니까?
 
Renat Fatkhullin :

환경과 재생 방법에 대한 설명이 전혀 없기 때문에 테스트 방법이 매우 지저분합니다.

명시되지 않은:

  • 창의 막대 제한

  • 터미널 데이터베이스의 실제 데이터 볼륨
  • 서버는 정확히 무엇이며 디스크에 있는 데이터베이스는 무엇입니까? 모든 데이터는 디스크에 있어야 합니다.
  • 테스트 플랫폼 및 비트 깊이(덩굴 아래? 세부적으로 지정해야 함)
  • 열린 창문의 존재

이것이 없으면 결론은 근거가 없습니다.


일반적으로 대부분의 질문에 대한 답변은 질문이 아니라 내 게시물에 있었습니다. 이제 모든 데이터를 제공하겠습니다.

대답을 시작하다

какой точно сервер, находятся ли базы на диске? все данные обязаны быть гарантированно на диске.

MQ 데모 서버, 로드된 데이터 우리는 단락 2와 단락 3에 대해 이야기하고 있습니다. 이전 게시물에서. 포인트 1을 사용하면 모든 것이 명확하고 질문이 없습니다. 기록된 대로 데이터가 로드되고 지정된 경로를 따라 캐시가 형성됩니다.

лимиты баров в окне

MT4

MT5

фактические объемы данных в базах терминалов

MT4

MT5

платформа и битность тестирования (под вайном? нужно указывать детально)

XP 32비트 승리, MT는 모든 최신 빌드

наличие открытых окон

MT4 - 1 차트가 열려 있으며 다른 기호를 사용하여 확인합니다.

MT5 - 1 차트가 열려 있고 다른 기호를 사용하여 확인합니다.

다시 한 번, 터미널을 다시 시작하고, 차트에 스크립트를 던지고, 터미널을 다시 시작하기 전에 로드된 데이터인 다른 기호를 선택합니다.

MT4

 2017.04 . 12 21 : 18 : 31.575 время копирования буфера EURUSD,M1: проход = 2   время= 36
2017.04 . 12 21 : 18 : 31.575 время копирования буфера EURUSD,M1: проход = 1   время= 282
2017.04 . 12 21 : 18 : 31.575 время копирования буфера EURUSD,M1: проход = 0   время= 1871
2017.04 . 12 21 : 18 : 31.575 время копирования буфера EURUSD,M1: initialized
2017.04 . 12 21 : 18 : 31.405 время копирования буфера EURUSD,M1 inputs: Pair=GBPUSD; 

MT5

 2017.04 . 12 21 : 19 : 47.735 время копирования буфера (EURUSD,H1)    проход = 0   время= 303951
2017.04 . 12 21 : 19 : 47.735 время копирования буфера (EURUSD,H1)    проход = 1   время= 29
2017.04 . 12 21 : 19 : 47.735 время копирования буфера (EURUSD,H1)    проход = 2   время= 25
 

더 자세한 내용과 더 정확한 테스트는 다음과 같습니다.

조건 설명
메타 트레이더 4 빌드 1065
메타 트레이더 5 x64 빌드 1580
하드웨어 및 운영 체제
Windows 10 Pro x64, Intel Xeon E5-2690 v3 @ 2.60GHz, RAM: 32Gb, SSD 디스크
무역 서버
MetaQuotes-데모
MetaQuotes-데모
설정에서 차트의 막대 제한
10,000
10,000
설정의 기록 막대 제한 10,000,000
제한의 개념 없음
EURUSD, M1에 대한 디스크의 실제 막대 수
338만2000
653만8000
체크 기호 및 마침표
EURUSD, M1
EURUSD, M1
차트 열기
GBPUSD, M1만 해당 스크립트가 발생합니다.
GBPUSD, M1만 해당 스크립트가 발생합니다.
터미널을 시작한 후 결과가 차갑습니다.
# 0 pass, 1000 records in 680 msc
# 1 pass, 1000 records in 2 msc
# 2 pass, 1000 records in 2 msc

# 0 pass, 1000 records in 113497 msc
# 1 pass, 1000 records in 3 msc
# 2 pass, 1000 records in 3 msc

결과는 따뜻하며 첫 번째 실행 직후 두 번째 실행
# 0 pass, 1000 records in 13 msc
# 1 pass, 1000 records in 2 msc
# 2 pass, 1000 records in 2 msc
# 0 pass, 1000 records in 14 msc
# 1 pass, 1000 records in 2 msc
# 2 pass, 1000 records in 2 msc

테스트 파일이 첨부되었으며 모든 시간은 마이크로초 단위입니다(밀리초가 아닌 1밀리초 = 1000마이크로초).

이제 결론:

  1. 차이점은 차트 캐시의 초기 초기화 속도에만 있습니다. MT4의 경우 0.6ms 대 MT5의 경우 113ms입니다.

    여기에는 문제가 없습니다. 모으는 데는 항상 리소스가 필요합니다.
    특히 개념적으로 다른 아키텍처가 사용되는 경우: MT5에는 확장을 위해 더 복잡한 캐시(cache\*.hc 파일은 원본 *.hcc 파일에서 빌드됨)가 있습니다. ).

  2. 반복된 요청은 동일한 속도를 나타냄 - 데이터를 복사하는 데 2-3마이크로초

    두 터미널 모두 구현에 오류가 없으며 모든 것이 빠르게 작동합니다.
파일:
 

답변 해주셔서 감사합니다.

일반적으로 결과는 내 게시물에 표시한 대로입니다.

또한 내 앞에 작은 속임수 인 SSD가 있습니다. 실제로 노멀로 테스트를 해봤습니다.

그러나 MT4와 MT5 사이의 결과는 거의 200배 차이가 납니다( 서버 데이터 ?? 및 ping?과의 전체 동기화에 대한 강제 제어 로 인해).

나는 이것이 아마도 터미널의 기능일 가능성이 높다는 것을 여기에 게시하기 전에도 화해했습니다. 당신은 그것과 함께 살 수도 있지만 어떤 순간에는 어렵습니다. 예를 들어, 왜냐하면 MT에는 시장 스크리너가 없으므로 시장 개요에 기호를 추가하는 작은 스크립트를 찾았습니다. 동시에 가격은 CopyClose를 통해서만 사용할 수 있고 SymbolInfoDouble을 통해서도 MqlTick을 통해서도 사용할 수 없습니다. 기호가 개요에 추가될 때까지 가격은 사용할 수 없습니다. 그런 다음 터미널을 시작한 후 유사한 스크립트를 실행하면 "무한" 오래 실행됩니다. 매우 많은 수를 실행합니다. 이것은 단지 예입니다.