mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 200

 
fxsaber :
차트를 마우스로 드래그하면 Object* 기능이 많이 지연됩니다.
그냥 다시 그릴 수 있습니까?
 
Nikolai Semko :
그냥 다시 그릴 수 있습니까?

예를 들어 ObjectFind 는 다시 그리기와 어떤 관련이 있습니까?

 
fxsaber :

예를 들어 ObjectFind 는 다시 그리기와 어떤 관련이 있습니까?

아, 그것에 대해 생각하지 않았습니다.
 

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

mql5 언어의 특징, 미묘함 및 작업 방법

fxsaber , 2020.03.04 08:58

예전에는 의심했지만 지금은 확인되었습니다. 리소스로 작업할 때 메모리 누수가 발생하기 쉽습니다.

SB를 통한 스크립트는 차트에 숫자 배열의 차트를 표시합니다. 그런 다음 이 차트(객체)를 수동으로 삭제할 수 있지만 이 차트에 할당된 리소스는 읽기 전용 모드로 메모리에 영원히 남아 있습니다. 때문에 삭제할 수 없습니다. 호스트 스크립트에서만 삭제할 수 있습니다(강조 표시된 줄 참조).


MQL에는 너무 많은 점유 메모리를 해제하는 기능이 없습니다. VPS에서는 특히 주의하십시오.


자체적으로(또는 비정상적으로 중지된 후) 정리되지 않는 스크립트를 실행한 후 터미널에서 메모리를 확보하는 방법은 무엇입니까?

 // После окончания работы скрипта Терминал потребляет дополнительные 4 Gb. Как освободить?
void OnStart ()
{
   uint Data[];
  
   ArrayResize (Data, 1 e6);
  
   for ( int i = 0 ; i < 1000 ; i++)  
     ResourceCreate ( "::" + ( string )i, Data, ArraySize (Data), 1 , 0 , 0 , ArraySize (Data), COLOR_FORMAT_ARGB_NORMALIZE );
}

TaskManager(F2)에서 메모리 소비가 완벽하게 표시됩니다. 이제 터미널을 다시 시작하는 것만으로도 도움이 됩니다.

 
fxsaber :

자체적으로(또는 비정상적으로 중지된 후) 정리되지 않는 스크립트를 실행한 후 터미널에서 메모리를 확보하는 방법은 무엇입니까?

TaskManager(F2)에서 메모리 소비가 완벽하게 표시됩니다. 이제 터미널을 다시 시작하는 것만으로도 도움이 됩니다.

정기적으로 - 각 리소스에 대해 ResourceFree 를 호출해야 합니다.

충돌하면 아무것도 할 수 없습니다. 리소스를 생성하는 dll을 쌓는 경우에만 흐름이 꺼지면 자체적으로 정리됩니다.

 
Vladimir Simakov :

정기적으로 - 각 리소스에 대해 ResourceFree 를 호출해야 합니다.

충돌하면 아무것도 할 수 없습니다. 리소스를 생성하는 dll을 쌓는 경우에만 흐름이 꺼지면 자체적으로 정리됩니다.

충돌에는 디버그 중단도 포함됩니다.

 
fxsaber :

충돌에는 디버그 중단도 포함됩니다.

정기적으로 mql - 메모리 누수. 이 모든 것을 성인 방식으로 구현하면 됩니다. 이러한 스레드가 종료될 때 DLL_THREAD_DETACH가 있는 DllMain이 호출되지 않을 가능성이 높다는 점을 감안할 때 가장 사소한 작업은 아니지만 상당히 해결할 수 있습니다.

UPD: 이 주제는 버그 스레드에서 제안됩니다. 임호
 

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

MetaTrader 5 플랫폼 빌드 2650의 새 버전: 차트의 백그라운드 로드 및 MQL5 코드 프로파일러의 개선 사항

fxsaber , 2020.10.23 18:44

이제 차트 전환 패널에서 EA가 작업 중인 차트와 작동하지 않는 차트를 확인할 수 없습니다.

독특한 기호를 추가할 수 있습니까? 예를 들어 EURUSD 차트가 Expert Advisor와 함께 작동하는 경우 끝에 별표(EURUSD*)를 추가합니다. 일반적으로 시각적으로 포착할 수 있는 것입니다.

많은 차트가 있으며 그 중 일부에는 Expert Advisors가 있습니다. 지표에도 유용할 수 있지만 저는 사용하지 않습니다. 그래서 나는 모른다.


어떤 이유로 실행 중인 Expert Advisors 목록에 대한 단축키가 없습니다. 마우스로만 열 수 있습니다.

지금 F2. 어드바이저에서 ENTER를 누르십시오. 차트로 전환하면 경로가 있는 트리가 네비게이터에서 열립니다. 두 번째 ENTER는 ME의 소스입니다.

 
이전 에는 EA의 내부 오류로 인해 닫히지 않았습니다.
 2021.03 . 18 11 : 41 : 47.413 zero divide in 'Test9.mq5' ( 550 , 5 )
2021.03 . 18 11 : 42 : 26.619 array out of range in 'Test9.mq5' ( 550 , 8 )

최근부터 - 원인.


이전에는 Market 클라이언트가 터미널을 다시 시작하여 문제를 우회할 수 있었습니다. 지금은 아닙니다.

 

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

MetaTrader 4 플랫폼 빌드 1330의 새 버전

fxsaber , 2021.04.03 00:21

 // Конструкция обнаружения бесконечных циклов.
class LOOP
{
private :
   static int PrevLine;    
   static uint PrevTime;
  
public :
#define LOOP_CHECKTIME 100000 // Максимальная длительность (в миллисекундах) выполнения цикла

   static bool CheckFirst( const int Line )
  {
     if (Line != PrevLine)
    {
      LOOP::PrevTime = :: GetTickCount ();
      LOOP::PrevLine = Line;
    }
      
     return (!:: IsStopped () && :: GetTickCount () - LOOP::PrevTime < LOOP_CHECKTIME);
  }
  
   static bool Description( const string Str )
  {
     if (!:: IsStopped () && (:: GetTickCount () - LOOP::PrevTime > LOOP_CHECKTIME))
    {
      :: MessageBox ( "Endless loop:\n" + Str);
  
      LOOP::PrevTime = :: GetTickCount ();
    }
    
     return (!:: IsStopped ());
  }
#undef LOOP_CHECKTIME
};

static int LOOP::PrevLine = 0 ;
static uint LOOP::PrevTime = 0 ;


#define _CS(A) ((LOOP::CheckFirst( __LINE__ ) || LOOP::Description( __FILE__ + "\n" + ( string ) __LINE__ + "\n" + __FUNCSIG__ + "\nCondition: " + #A)) && (A))


사용 예.

 void OnInit ()
{
   for ( uint i = 5 ; _CS(i >= 0 ) ; i--)
    ;
}
사유: