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

 
fxsaber :

물론 풀어줍니다. 터미널 자체는 작동 중에 필요하지 않은 캐시에 틱을 저장합니다.

감기에 걸렸을 때 이 틱을 다시 올리는 것이 좋습니다. 터미널의 "냉각" 메커니즘이 필요합니다.

눈치채지 못했다

 void OnStart ()
  {
   Print ( "используется памяти до закачки истории: " + string ( MQLInfoInteger ( MQL_MEMORY_USED ))+ " Mb" );
   MqlTick items[];
   ulong t0= GetMicrosecondCount ();
   uint     count= CopyTicks ( Symbol (),items, COPY_TICKS_INFO , 0 , 100000000 );
   t0= GetMicrosecondCount ()-t0;
   Print ( "Загружено за " + string (t0/ 1000 )+ " миллисекунд " + ( string )count+ " тиков" );
   Print ( "используется памяти после закачки истории: " + string ( MQLInfoInteger ( MQL_MEMORY_USED ))+ " Mb" );
   ArrayFree (items);
   Print ( "используется памяти после ArrayFree: " + string ( MQLInfoInteger ( MQL_MEMORY_USED ))+ " Mb" );
  }


위협 틱이 틱당 60바이트 크기의 압축이 풀린 형태로 메모리에 저장되는 것은 안타까운 일입니다. 5번 쉽게 패킹 가능(틱당 ~12바이트)

 
Stanislav Korotky :

CopyRates에 따라 자동 다운로드를 하는 것이 좋습니다.

이 경우 기간은 알 수 없습니다. 다운로드는 마침표 문자의 요청에 의해 시작됩니다.

할 수 있는 일을 생각해보자

 
Nikolai Semko :

눈치채지 못했다

터미널이 무엇을 소비하는지 살펴볼 필요가 있습니다.

 void OnStart ()
  {
//   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print ( "используется памяти до закачки истории: " + string ( TerminalInfoInteger ( TERMINAL_MEMORY_USED ) )+ " Mb" );
   MqlTick items[];
   ulong t0= GetMicrosecondCount ();
   uint     count= CopyTicks ( Symbol (),items, COPY_TICKS_INFO , 0 , 1 e7);
   t0= GetMicrosecondCount ()-t0;
   Print ( "Загружено за " + string (t0/ 1000 )+ " миллисекунд " + ( string )count+ " тиков" );
//   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print ( "используется памяти после закачки истории: " + string ( TerminalInfoInteger ( TERMINAL_MEMORY_USED ) )+ " Mb" );
   ArrayFree (items);
//   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print ( "используется памяти после ArrayFree: " + string ( TerminalInfoInteger ( TERMINAL_MEMORY_USED ) )+ " Mb" );
  }


오랫동안 일해 온 터미널의 결과물. 실행 중인 어드바이저/지표가 없습니다. 2개의 차트, 현재 연도의 M1 막대만 표시됩니다.

используется памяти до закачки истории: 1043 Mb
Загружено за 11223 миллисекунд 10000000 тиков
используется памяти после закачки истории: 1675 Mb
используется памяти после ArrayFree : 1102 Mb

60MB는 출시되지 않았습니다. 빈 터미널은 더 많은 기가바이트를 소비합니다. 소비를 줄이는 유일한 방법은 터미널을 다시 시작하는 것입니다.

 
Sergey Dzyublik :

좋은 오후입니다! 정말 감사합니다.
논리적으로 예약된 메모리가 있는 ArrayResize보다 느려야 하기 때문에 이전에 new 연산자 를 사용하지 않았습니다.
그러나 결과는 인상적이었습니다. 새로운 연산자를 통해 자체 제작한 배열이 더 빠릅니다.

MT5(빌드 2363):

베타 2364로 출시됨(불행히도 템플릿 내부에 new T()에 대한 컴파일러 오류가 있음)

다음은 스크립트에 대한 로그입니다.

 2020.03 . 19 10 : 39 : 45.784 Test (EURUSD,H1)        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2020.03 . 19 10 : 39 : 46.765 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops= 1000 ms= 984
2020.03 . 19 10 : 39 : 48.233 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops= 1000 ms= 1469
2020.03 . 19 10 : 39 : 49.944 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator          : loops= 1000 ms= 1703
2020.03 . 19 10 : 39 : 50.923 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops= 1000 ms= 969
2020.03 . 19 10 : 39 : 52.392 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops= 1000 ms= 1484
2020.03 . 19 10 : 39 : 54.100 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator          : loops= 1000 ms= 1703
2020.03 . 19 10 : 39 : 55.079 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops= 1000 ms= 985
2020.03 . 19 10 : 39 : 56.548 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops= 1000 ms= 1469
2020.03 . 19 10 : 39 : 58.258 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator          : loops= 1000 ms= 1703
2020.03 . 19 10 : 39 : 59.237 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops= 1000 ms= 984
2020.03 . 19 10 : 40 : 00.705 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops= 1000 ms= 1469
2020.03 . 19 10 : 40 : 02.416 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator          : loops= 1000 ms= 1703
개체에 대한 ArrayResize가 더 빠르게 작동하기 시작한 것을 알 수 있습니다.

다시 한 번, ArrayResize 함수의 일부 중 하나의 복잡성이 로그에서 0으로 감소했습니다.
 
Ilyas :
개체에 대한 ArrayResize가 더 빠르게 작동하기 시작한 것을 알 수 있습니다.
다시 한 번, ArrayResize 함수의 일부 중 하나의 복잡성이 로그에서 0으로 감소했습니다.

실제 프로젝트 에서 데이터 유형 에 대해 ArrayResizeReserve 및 ArrayOnNew 배열의 속도를 비교할 수 있었습니다. 단일 int 필드가 있는 클래스이고 레코드 수는 20M입니다.

MT5(빌드 2363)에서 하나를 제외한 모든 비교 매개변수에서 ArrayOnNew가 ArrayResizeReserve보다 나쁜 것으로 판명되었습니다.

읽기/쓰기 액세스(std::fill_n, std::copy, std::vector::clear): 2-2.5배 느림
"콜드"/"핫" 메모리에 대해 한 번에 모든 요소 생성(std::vector::resize) - 1.1-1.2배 느림
"핫" 메모리를 위해 모든 요소를 한 번에 하나씩 생성(std::vector::push_back) - 1.2배 더 빠름

 

도움말(편집기)의 이러한 링크는 페이지를 찾을 수 없습니다.


 
MT5 버그(빌드 2363) C++ (온라인: https://onlinegdb.com/HkNqBDZ88 )의 템플릿 기능과 비교하여 MQL의 템플릿 기능 실행 우선 순위가 일치하지 않습니다.
문제는 첫 번째 "테스트" 함수에 완전히 특수화 된 템플릿 기본 클래스가 인수로 포함되어 있을 때 발생합니다.
두 번째 "테스트" 함수는 첫 번째 함수를 오버로드하고 템플릿 함수이며 특수화되지 않은 템플릿 기본 클래스를 인수로 사용합니다.

 template < typename T>
struct B{
   T data;
};

template < typename T>
struct BB : public B<T>{};


template < typename T>                                             
struct A{
public :
   static void test(T& src){
       printf ( "1" );
   }
   
   template < typename TT>
   static void test(B<TT>& src){
       printf ( "2" );
   }
};
      

void OnStart (){
   BB< int > bb;
   A<B< int >>::test(bb);         //'test' - ambiguous call to overloaded function         
}
 
모두 건강!! 질문: 일반적으로 상황은 다음과 같습니다. 내 컴퓨터에서 두 개의 플랫폼 MT4 및 MT5를 사용하고 MT 4로 문제 없이 신호에 연결했습니다. 그러나 MT5에서 다른 신호로는 작동하지 않습니다. 계좌가 있고 자금의 이동이 표시되지만 계좌 열에 계좌 번호가 없으며 터미널 패널에 신호 버튼이 없습니다. 그리고 vps 서버를 임대하면 마이그레이션이 필요하다는 메시지가 표시되지만 마이그레이션 버튼은 작동하지 않습니다. 이유를 말해줘.
 
Anna :
모두 건강!! 질문: 일반적으로 상황은 다음과 같습니다. 내 컴퓨터에서 두 개의 플랫폼 MT4와 MT5를 사용하고 MT 4에서는 문제 없이 신호에 연결했습니다. 그러나 MT5에서 다른 신호로는 작동하지 않습니다. 계좌가 있고 자금의 이동이 표시되지만 계좌 열에 계좌 번호가 없으며 터미널 패널에 신호 버튼이 없습니다. 그리고 vps 서버를 임대하면 마이그레이션이 필요하다는 메시지가 표시되지만 마이그레이션 버튼은 작동하지 않습니다. 이유를 말해줘.

MetaTrader 5(터미널에 내장된 가상 호스팅 임대)에는 64비트 운영 체제가 필요합니다.

 

Win 10에서 로컬 에이전트를 연결하는 사람이 있습니까?

2대의 PC를 연결하려고 시도했지만 원격 에이전트가 계속 연결 준비 완료 연결 준비 연결 중입니다... 작업을 수신하지 않습니다.

Metatrader Agent에 대한 확인란이 있는 것처럼 방화벽을 살펴보았습니다. 내보내기 - 파일을 통해 에이전트를 가져 오면 포트와 PC 이름도 표시됩니다.

어딘가에 추가 포트가 포워딩되어야 한다고 생각합니까?