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

 
알렉세이 나보이코프 :

또한 모든 메소드가 기본 클래스에 작성되고 상속된 클래스에 Get만 표시하는 경우 보호 상속을 갖는 것이 더 편리합니다. 그리고 필요한 경우 기지로 가져옵니다 .

protected-inheritance가 사용되었지만 선택되어 중지되었습니다. 고맙습니다!

그러나 Metaeditor는 이러한 모든 방법을 사용할 수 없는 경우에도 목록에 포함되지 않는 버그를 아직 수정하지 않았습니다.

지금은 확인하지 않았지만 실험할 때 떨어지지 않은 것으로 기억에 남아 있습니다.

 

주문을 수정하거나 삭제하기 전에 다음을 확인해야 합니다.

 OrderGetInteger ( ORDER_STATE ) == ORDER_STATE_PLACED 

이것은 SB에 없으므로 직접 처방하십시오.


PS 테스터에서 이 검사는 의미가 없습니다. 모든 현재 주문은 항상 이 상태를 갖습니다.

 

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

장 마감

fxsaber , 2017.09.22 09:45

 // Время последнего тика символа
long GetSymbolTime( const string Symb )
{
   MqlTick Tick;
  
   return ( SymbolInfoTick (Symb, Tick) ? Tick.time_msc : 0 );
}

// Время последнего тика Обзора рынка
long GetMarketWatchTime( void )
{
   long Res = 0 ;
  
   for ( int i = SymbolsTotal ( true ) - 1 ; i >= 0 ; i--)
  {
     const long TmpTime = GetSymbolTime( SymbolName (i, true ));
    
     if (TmpTime > Res)
      Res = TmpTime;
  }
  
   return (Res);
}

// Текущее время на торговом сервере без учета пинга
long GetCurrenTime( void )
{
   static ulong StartTime = GetMicrosecondCount ();
   static long PrevTime = 0 ;
  
   const long TmpTime = GetMarketWatchTime();
  
   if (TmpTime > PrevTime)
  {
    PrevTime = TmpTime;
    
    StartTime = GetMicrosecondCount ();
  }
  
   return (PrevTime + ( long )(( GetMicrosecondCount () - StartTime) / 1000 ));
}

void OnInit ()
{
   MarketBookAdd ( _Symbol );
}

void OnDeinit ( const int )
{
   MarketBookRelease ( _Symbol );
}

string TimeToString ( const long Value )
{
   return (( string )( datetime )(Value / 1000 ) + "." + ( string ) IntegerToString (Value % 1000 , 3 , '0' ));
}

void OnBookEvent ( const string & )
{
   Comment ( TimeToString (GetCurrenTime()));
}
 

POSITION_TIME_UPDATE 는 포지션 로트 변경에만 관련이 있습니다. 예를 들어, 모든 유형의 계정에서 포지션을 부분적으로 청산하거나 상계에 추가합니다.

SL/TP 수준의 변경은 POSITION_TIME_UPDATE에 영향을 미치지 않습니다.

바꾸어 말하면, POSITION_TIME_UPDATE는 거래 내역 - 거래에 반영된 수정 사항에 의해서만 영향을 받습니다. SL/TP 레벨은 이러한 수정과 관련이 없으므로 영향을 미치지 않습니다.

 

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

Expert Advisor 재초기화

fxsaber , 2017.09.26 11:35

 // Перезапуск себя
bool ExpertReopen()
{
   return ( ChartSaveTemplate ( 0 , __FILE__ ) && ChartApplyTemplate ( 0 , __FILE__ ));
}
 

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

오류, 버그, 질문

fxsaber , 2017.09.08 11:11

 struct A
{
   int i;
};

struct B : public A {};

void OnStart ()
{
  A a = { 0 };
  B b;
  
  b = (B)a; // cannot cast 'A' to 'B'
  
  b = a;     // так без проблем
}
SD에서

모든 것이 바로 여기에 있습니다.

첫 번째 경우에는 캐스트이고 두 번째 경우에는 할당입니다.

부모에서 자식으로의 캐스팅은 허용되지 않습니다.

개체에 대한 할당은 적절한 복사 연산자에 대한 호출입니다. 이 경우 암시적 A::operator=(const A &)

감사합니다. 즉, 부모의 복사 연산자는 public 상속의 경우에만 외부에서 계속 사용할 수 있습니다. 확인해보니 그렇군요

 struct A
{
   int i;
};

struct B : protected A {};

void OnStart ()
{
  A a = { 0 };
  B b;
  
  b = a;     // 'A::operator=' - cannot access protected member function
}

좋은가요?

이 구성을 사용하면 추가 복사 생성자 B::operator=(const A&)를 선언하고 A::operator=에 대한 호출을 "전달"해야 합니다.

 

추가 지표를 생성하지 않고 사용자 지정 데이터에 대한 표준 지표를 계산하기 위한 구현 옵션.

Базовые индикаторы, применяемые к кастомному инструменту
Базовые индикаторы, применяемые к кастомному инструменту
  • 2017.09.27
  • www.mql5.com
Здравствуйте. Задавал этот вопрос на английском форуме...
 

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

장 마감

fxsaber , 2017.09.22 09:45

 // Время последнего тика символа
long GetSymbolTime( const string Symb )
{
   MqlTick Tick;
  
   return ( SymbolInfoTick (Symb, Tick) ? Tick.time_msc : 0 );
}

// Время последнего тика Обзора рынка
long GetMarketWatchTime( void )
{
   long Res = 0 ;
  
   for ( int i = SymbolsTotal ( true ) - 1 ; i >= 0 ; i--)
  {
     const long TmpTime = GetSymbolTime( SymbolName (i, true ));
    
     if (TmpTime > Res)
      Res = TmpTime;
  }
  
   return (Res);
}

Market Watch에서는 3000년이라도 언제든지 설정할 수 있기 때문에 주기에서 사용자 정의 기호를 버려야 합니다.

 
MQL5에서는 다음과 같이 작성할 수 있습니다.
 void OnTick ()
{  
   double Buffer[];
  
   CopyBuffer ( iMA ( NULL , PERIOD_CURRENT , 1 , 0 , MODE_SMA , PRICE_CLOSE ) , 0 , 0 , 1 , Buffer);
}

저것들. 각 틱 에 핸들을 "생성"합니다. 새로운 지표 엔터티는 생성되지 않으며 iMA 입력 매개변수를 이전 틱에서 시작된 지표와 비교할 때만 시간이 손실됩니다. 저것들. MT4에서 수행되는 것과 정확히 동일합니다.

 
fxsaber :
MQL5에서는 다음과 같이 작성할 수 있습니다.

저것들. 각 눈금 에 대한 핸들을 "생성"합니다. 새로운 지표 엔티티는 생성되지 않으며 iMA 입력 매개변수를 이전 틱에서 시작된 지표와 비교할 때만 시간이 손실됩니다. 저것들. MT4에서 수행되는 것과 정확히 동일합니다.

성능 측정? 얼마나 느려질지 궁금합니다. 특히 맞춤형 지표의 경우.

사유: