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

 
안드레이 카팀리안스키 :

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

측정해보진 않았지만 MT4보다 느리지는 않은 것 같습니다.

측정
 #define AMOUNT 1 e7
void OnStart ()
{  
   int handle = iMA ( NULL , PERIOD_CURRENT , 1 , 0 , MODE_SMA , PRICE_CLOSE );
   const ulong StartTime = GetMicrosecondCount ();
  
   for ( int i = 0 ; i < AMOUNT; i++)
    handle = iMA ( NULL , PERIOD_CURRENT , 1 , 0 , MODE_SMA , PRICE_CLOSE );

   Print (( string )(( GetMicrosecondCount () - StartTime) / AMOUNT) + " mcs per iMA" );
   Print (handle);    
}


결과

 0.3383469 mcs per iMA


확인하는 마이크로초의 1/3입니다. 즉, 천만 틱마다 한 번 실행하면 3초씩 느려집니다.

 
fxsaber :

측정

핸들 생성 + 루프에서 값 가져오기를 원래 버전과 비교하지 않은 것이 이상합니다. 흥미로운 것은 이 차이입니다.

 
안드레이 카팀리안스키 :

핸들 생성 + 루프에서 값 가져오기를 원래 버전과 비교하지 않은 것이 이상합니다. 흥미로운 것은 바로 이 차이점입니다.

값은 동일한 핸들에서 가져오기 때문입니다. 동일한 매개변수를 가진 iMA는 항상 동일한 핸들을 반환합니다.

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

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

흥미로운 디자인.

이 접근 방식으로 OnInit에서 핸들을 생성하여 속도를 확인하십시오.

 
비탈리 무지첸코 :

이 접근 방식으로 OnInit에서 핸들을 생성하여 속도를 확인하십시오.

이것은 당신과 비교됩니다.

 

기능이 크로스 플랫폼이 되도록 표준 OrderCalcProfit() 및 OrderCalcMargin()을 대체할 수 있는 것은 무엇입니까? 이미 어딘가에 있었던 것 같지만 여기에서 찾을 수 없습니다. 아마도 깨어있을 것입니다 ... 그러나 한 시간 동안 검색 한 후 깨어 났어야했습니다. :)

 
Artyom Trishkin :

기능이 크로스 플랫폼이 되도록 표준 OrderCalcProfit() 및 OrderCalcMargin()을 대체할 수 있는 것은 무엇입니까? 이미 어딘가에 있었던 것 같지만 여기에서 찾을 수 없습니다. 아마도 깨어있을 것입니다 ... 그러나 한 시간 동안 검색 한 후 깨어 났어야했습니다. :)

https://www.mql5.com/en/search#!keyword=myordercalcmargin&module=mql5_module_forum

MQL5.Community
MQL5.Community
  • www.mql5.com
Поиск выполняется с учетом морфологии и без учета регистра. Все буквы, независимо от того, как они введены, будут рассматриваться как строчные. По умолчанию наш поиск показывает страницы...
 
fxsaber :

https://www.mql5.com/en/search#!keyword=myordercalcmargin&module=mql5_module_forum

:)

SymbolInfoMarginRate()는 상위 4위 안에 들지 않습니다. 그리고 질문은 다음과 같았습니다.

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

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

Artyom Trishkin , 2017.10.06 06:36

기능이 크로스 플랫폼이 되도록 표준 OrderCalcProfit() 및 OrderCalcMargin()을 대체할 수 있는 것은 무엇입니까? 이미 어딘가에 있었던 것 같지만 여기에서 찾을 수 없습니다. 아마도 깨어있을 것입니다 ... 그러나 한 시간 동안 검색 한 후 깨어 났어야했습니다. :)

예, OrderCalcProfit()에 대해서는 아무 것도 없습니다.
 

언어의 가능성이 아닌 직접적인 선물

 struct MQLTICK : public MqlTick
{
   bool operator >( const MqlTick &Tick )
  {
     return ( this .bid > Tick.bid);
  }

   bool operator <( const MqlTick &Tick )
  {
     return ( this .ask < Tick.ask);
  }
};

void OnStart ()
{  
   MQLTICK Ticks[];
  
   Print ( CopyTicks ( _Symbol , Ticks ));
  
   Print ( Ticks[ 0 ] < Ticks[ 1 ] );
}
 
fxsaber :

언어의 가능성이 아닌 직접적인 선물

미묘한 실행 오류 형태의 선물

 struct MqlTick1 : MqlTick {        };
struct MqlTick2 : MqlTick { int i; };
void Copyticks( MqlTick & []) {}
void OnStart ()
{
        MqlTick1 ticks1[];
        MqlTick2 ticks2[];
         int i1 = :: CopyTicks ( _Symbol , ticks1 ); //нормально ??????????????
                   Copyticks(          ticks1 ); //error: 'ticks1' - parameter conversion not allowed
         int i2 = :: CopyTicks ( _Symbol , ticks2 ); //нормально ??????????????
         Print ( "i2=" , i2, ":" , GetLastError ()); //Результат: -1:4006
}

::CopyTicks가 Copyticks보다 나은 이유는 무엇입니까?

그리고 결과가 항상 -1인 이유는 무엇입니까? 이러한 오류(4006)는 컴파일 시간에 보고되어야 합니다.