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

 
// Возвращает текущее количество объектов классов
int GetAmountObjects( void )
{
   const class CLASS_TMP {} Tmp;
  
   return (( int ):: StringFormat ( "%d" , &Tmp) - 1 );
}
적용 예
 int OnInit ()
{
   if (GetAmountObjects() > 0 )
     Print ( "До " + __FUNCSIG__ + " были вызваны конструкторы!" );

   return ( INIT_SUCCEEDED );
}
 

게시물에서 가져온 예 무작위 확인

 void OnStart ()
{
   string Str = "1.23qwedfg" ;
  
   Print (( int )Str);;;;;;;
   Print (( double )Str);;;
}

세미콜론은 컴파일 결과에 영향을 미치지 않습니다....오류 없는 결과
 
루슬란 :

세미콜론은 컴파일 결과에 영향을 미치지 않습니다....오류 없는 결과

그들은 그렇지 않습니다.
 

함수 호출로 정적 변수를 초기화하는 것은 문서화되지 않은 기능으로 아주 우연히 나타났지만 지금은 제거하기가 매우 어렵습니다.

정적 변수를 초기화하기 위해 거래 환경 의 기능을 호출하는 것은 강력히 권장하지 않습니다.

 
float f = 16777217; // 16777216.0
 
블라디미르 카르푸토프 :


문맥에서 문장을 가져갈 필요가 없습니다. 문구는 다음과 같습니다.

테스트 시 최고의 정확도를 보장하기 위해 분 막대는 실제 눈금 모드에서도 사용됩니다. 틱 데이터를 확인하고 수정하는 데 사용됩니다. 또한 테스터의 차트와 클라이언트 터미널 간의 불일치를 방지하는 데 도움이 됩니다.

이것은 분 막대의 기록이 눈금과 일치하지 않는다는 것을 의미합니까?

데이터가 실제 거래 내역과 일치한다고 가정하면 어떻게 그게 가능합니까?

 
#define DEFINE_TOSTRING(A) string ToString( const A Var ) { return((string)Var); }
  DEFINE_TOSTRING(char)
  DEFINE_TOSTRING(short)
  DEFINE_TOSTRING(int)
  DEFINE_TOSTRING(long)
  
  DEFINE_TOSTRING(uchar)
  DEFINE_TOSTRING(ushort)
  DEFINE_TOSTRING(uint)
  DEFINE_TOSTRING(ulong)
  
  DEFINE_TOSTRING(bool)
  
  DEFINE_TOSTRING(string)
  
  DEFINE_TOSTRING(double)
  DEFINE_TOSTRING(float)

  DEFINE_TOSTRING(color)  
  
  DEFINE_TOSTRING(datetime)  
#undef DEFINE_TOSTRING

template <typename T>
string ToString( const T Var ) { return(::EnumToString(Var)); }

void OnStart()
{
  Print(ToString(1));
  Print(ToString(clrRed));
  Print(ToString(TimeCurrent()));
  Print(ToString(ACCOUNT_LOGIN));
}
 
template <typename T>
class IS
{
public:
  template <typename T1>
  static bool Object( const T1* Ptr )
  {
    return(dynamic_cast<const T*>(Ptr) != NULL);
  }
};

class CLASS1 {};
class CLASS2 : public CLASS1 {};
class CLASS3 : public CLASS1 {};

void OnStart()
{
  CLASS2 Object;
  CLASS1* Ptr = &Object;
  
  Print(IS<CLASS1>::Object(Ptr)); // true - Ptr указывает на объект класса CLASS1
  Print(IS<CLASS2>::Object(Ptr)); // true - Ptr указывает на объект класса CLASS2
  Print(IS<CLASS3>::Object(Ptr)); // false - Ptr НЕ указывает на объект класса CLASS3
}
 
테스터 실행 속도 측정을 위한 권장 사항

10개 패스(50개는 너무 많음)에 대해 여러 최적화(하나가 아닌!)를 실행합니다. 최적화 캐시가 있으므로 최적화 사이에 EA를 다시 컴파일하거나 가짜 매개변수 반복의 값을 변경합니다(이것이 바람직함). 위와 아래에서 2개의 극단값을 버립니다. 각 최적화에서 나머지 6개 값을 분석합니다.

대량 측정의 경우 마이크로초 타이머를 사용하지 마십시오. 일반 밀리초 GetTickCount를 사용합니다. 밀리초가 수백, 수천 단위로 측정되는 광범위한 테스트 날짜를 사용하십시오. 그러면 더 정확하고 안정적인 측정 결과를 얻을 수 있습니다.

 
fxsaber :
테스터 실행 속도 측정을 위한 권장 사항
샘플링 시작이 첫 번째 OnTick의 시작 부분에 있음을 지정하는 것을 잊었습니다. 측정 종료 - OnDeinit 시작 시