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

 
Slava :

메모리 누수 메시지를 받으면 해당 메모리를 해제하는 명시적 명령이 없음을 의미합니다.

프로그램이 종료되면(즉, 작업이 끝날 때 이러한 메시지를 수신함) 어떤 경우에도 누출된 메모리를 포함하여 모든 메모리를 해제합니다.

아마도 내가 "누설"이라는 용어를 너무 느슨하게 사용한 것 같습니다. 요점은 리소스가 메모리에 남아 있으며 개체를 삭제해도 이름을 인식할 수 없다는 것입니다. 그리고 우리가 그 이름을 안다면 이 리소스를 만든 프로그램을 제외하고는 어디에서도 삭제할 수 없습니다.


이제 VPS에서 터미널을 멈추게 하고 스크립트가 실행된 후 삭제되지 않은 리소스로 모든 메모리를 채우는 Market용 스크립트를 작성하는 것이 매우 쉽습니다.

 

일부 거래 서버에는 한 번에 여러 유형의 계정이 포함될 수 있습니다. 예를 들어, ECN 및 표준. 이 경우 기호에는 접두어가 없을 수 있습니다. 이름이 일치합니다.

이 경우 막대 기록(차트의 현재 입찰/매도/마지막 값 포함)과 눈금 기록 은 항상 한 가지 유형의 계정에만 해당합니다.

그리고 Market Review의 데이터 - 연결된 사람에게.


이 때문에 Market Watch가 차트 및 틱 기록과 완전히 일치하지 않음을 쉽게 알 수 있습니다.

 

여러 번 나는 전투 고문이 있는 차트 기호의 무작위(손으로) 변경에 부딪쳤습니다.

캐릭터 변경 보호.

 int OnInit ()
{
   static const string Symb = _Symbol ;  
   const bool Res = ( _Symbol != Symb);
  
   if (Res)
     Alert ( "Symbol is change!" );
  
   return (Res); // Защита от смены символа.
}
 
어드바이저를 출시할 때 가격 기록을 가져올 시간을 결정해야 하는 경우가 많습니다. 매번 수동으로 입력하지 않기 위해 이렇게 했습니다.
 #define WEEK ( 7 * 24 * 3600 )
input datetime temp = __DATE__ - WEEK ;

따라서 편집 일주일 전에 이야기를 가져옵니다. 편리하게.

 
fxsaber :
어드바이저를 출시할 때 가격 기록을 가져올 시간을 결정해야 하는 경우가 많습니다. 매번 수동으로 입력하지 않기 위해 이렇게 했습니다.

따라서 편집 일주일 전에 이야기를 가져옵니다. 편리하게.

옵티마이저에 다시 한 번 의존하는 이유는 무엇입니까? 더 좋습니다:

#주 정의 604800

 

프로그램의 긴급 중단의 기능, 그것은 가치가있는 것 같습니다

 #define EXIT (STD_CExit( __LINE__ , __FUNCTION__ )).Exit

class STD_CExit{
   string function;
   int line;
public :
   STD_CExit( int _line, string _func):line(_line),function(_func){}
   void Exit( string reason= NULL );
};
//--------------------------------------------------------------------------
void STD_CExit::Exit( string reason= NULL ){
   Alert ( StringFormat ( "Abort in line %i, function %s.\nReason: %s." ,line,function,reason== NULL ||reason== "" ? "Unknow" :reason));
   int a= 0 ;
   int b= 1 /a;}

void OnStart ()
{
   Test();
}

void Test(){
   EXIT( "Some reason" );
}
 
Vladimir Simakov :

프로그램의 긴급 중단 기능, 그만한 가치가있는 것 같습니다

일이 필요합니다 - 나는 이미 일어난 일에 기뻤습니다 .. 여기서 우리는 @Vict https://www.mql5.com/en/forum/318246/page10#comment_12651569 로 이 문제를 해결했습니다.

하지만 이것은:

- 종료하지 않음 http://www.delphibasics.ru/Exit.php

- 중단하지 않음 http://www.delphibasics.ru/Abort.php

이것은 Halt입니다 http://www.delphibasics.ru/Halt.php

UPD: 그러한 시나리오는 매우 필요합니다

 void OnTick ()
{
   if (!getData()) EXIT( "No data" );
}
bool getData()
{
   return ( false );
}
 
Igor Makanu :

일이 필요합니다 - 나는 이미 일어난 일에 기뻤습니다 .. 여기서 우리는 @Vict https://www.mql5.com/en/forum/318246/page10#comment_12651569 로 이 문제를 해결했습니다.

하지만 이것은:

- 종료하지 않음 http://www.delphibasics.ru/Exit.php

- 중단하지 않음 http://www.delphibasics.ru/Abort.php

이것은 Halt입니다 http://www.delphibasics.ru/Halt.php

UPD: 그러한 시나리오는 매우 필요합니다

지금까지 이것은 불가능했습니다 :(
 
Vladimir Simakov :
지금까지 이것은 불가능했습니다 :(

그래서 그는 그것을 매우 필요로합니다!

개발자가 일반 데이터를 종료/중단한 경우 예를 들어 TF-OHLC 데이터가 준비되지 않은 경우 데이터 처리를 올바르게 중단할 수 있으며 서버 에 주문을 보내는 프로세스도 유용할 것입니다. ... OnTick()에서 종료하기 위해 끝없는 return()을 풀지 않고 어디에서나 코드를 중단하고 다음 틱 전에 종료하는 것이 편리합니다.

 
Igor Makanu :

그래서 그는 그것을 매우 필요로합니다!

개발자가 일반 데이터를 종료/중단한 경우 예를 들어 TF - OHLC 데이터가 준비되지 않은 경우 데이터 처리를 올바르게 중단할 수 있으며 서버에 주문을 보내는 프로세스도 유용할 것입니다. ... OnTick()에서 종료하기 위해 끝없는 return()을 풀지 않고 어디에서나 코드를 중단하고 다음 틱 전에 종료하는 것이 편리합니다.

글쎄, 나는 그때까지...