МQL5에서 Open,Low,High,Close 매개변수를 얻는 방법은 무엇입니까? - 페이지 6

 
Artyom Trishkin :

SERIES_LASTBAR_DATE에 몇 가지 문제가 있습니다. 여기 어딘가에서 오랫동안 토론했습니다. 이미 수정되었을 수 있습니다.

여기에서 말하지 않겠습니다. 사용한 적이 없지만 holivar가 무엇으로 시작했는지에 대해 - iXXX() 기능 - 훌륭하게 작동합니다. 약 3개월 동안 적극적으로 사용하고 있습니다(MQL5를 시작한 방법) - 저는 버그 또는 ..를 발견하지 못했습니다. - 매우 편리하고 모든 것이 작동합니다!

추신 : 도움말에 나온대로 작동합니다.

옵션

기호

【인】 도구의 상징적 이름입니다. NULL 은 현재 문자를 의미합니다.

시간대

[in] 기간. ENUM_TIMEFRAMES 열거형 값 중 하나일 수 있습니다. 0 은 현재 차트의 기간을 의미합니다.

 
Igor Makanu :

항상 글만 쓰고 읽으려고 하지 않으세요? "New Bar"에 대한 전체 기사에 대한 링크를 제공했습니다! 글은 포럼에 꾸준히 글을 쓰는 사람들과 다른 능력을 가진 사람들에 의해 확인됩니다.)

추신: 예를 들어 내 링크의 기사를 쓰기를 중단하고 읽기 시작하면 iXXX() 함수를 사용하지 않는 다른 방법( SERIES_LASTBAR_DATE ) 을 찾을 수 있습니다. 개발자가 해킹을 발표했다는 오류)))))

링크 주셔서 감사합니다. 나는 당신의 솔루션을 비판하지 않았지만 iTime에 대한 호출만 지적했습니다. 그 자체로 CopyRates로 만지작거리는 요점을 대체하는 iXXX 기능의 사용을 암시합니다. 즉, iXXX 기능(iTime)을 사용하지 않고 CopyRates를 사용하려면 iTime을 사용하여 새 막대를 찾습니다.))) 악순환입니다.)))
 
// Для Тестера.
bool IsNewBar()
{
  static int PrevBars = 0;
  const int CurrBars = Bars;  

  const bool Res = (CurrBars != PrevBars);
  
  PrevBars = CurrBars;
  
  return(Res);
}
 
Roman :
덕분에.
 
fxsaber :
고맙습니다.
 
많은 MT4 Expert Advisors 가 소스 코드를 변경하지 않고 MT5로 변환되었습니다. Open [i] 형식의 주제를 배치했습니다.
 
fxsaber :
많은 MT4 Expert Advisors가 소스 코드를 변경하지 않고 MT5로 변환되었습니다. Open [i] 형식의 주제를 배치했습니다.

CopyXXX와 iXXX 기능 간의 성능을 측정한 적이 있습니까? 이 질문은 매우 흥미롭습니다.

지금까지 iXXX 기능을 명확하게 편리하게 사용하는 것을 볼 수 있습니다. 즉, MQL5로 이식할 때 MQL4 코드의 재작업이 적습니다.

다른 경우(성능에 대한 지식 없이) - 선택은 특정 사용자의 기본 설정에만 기반합니다.

 
fxsaber :
Open [i] 형식의 주제를 배치했습니다.

이 코드에 주의를 기울이지 않았는지 확인했습니다. 작동합니다!

추신: 내일 새로운 마음으로 어떻게 []를 얻었는지 확인해야 합니다. - 여러 번 시도했지만 성공하지 못했습니다!

 // Позволяет, как в MT4, работать с таймсериями: Open[Pos], High[Pos], Low[Pos], Close[Pos], Time[Pos], Volume[Pos].
// А так же задает привычные MT4-функции: iOpen, iHigh, iLow, iClose, iTime, iVolume.
#define DEFINE_TIMESERIE(NAME,FUNC,T)                                                                         \
   class CLASS ##NAME                                                                                           \
  {                                                                                                           \
   public :                                                                                                     \
     static T Get( const string Symb, const int TimeFrame, const int iShift) \
    {                                                                                                         \
      T tValue[];                                                                                             \
                                                                                                              \
       return ((Copy ##FUNC((Symb == NULL ) ? _Symbol : Symb, _Period , iShift, 1 , tValue) > 0 ) ? tValue[ 0 ] : - 1 ); \
    }                                                                                                         \
                                                                                                              \
    T operator []( const int iPos) const                                                                      \
    {                                                                                                         \
       return (CLASS ##NAME::Get(_Symbol, _Period , iPos));                                                       \
    }                                                                                                         \
  };                                                                                                          \
                                                                                                              \
  CLASS ##NAME NAME;                                                                                           \
                                                                                                              \
  T i ##NAME(const string Symb, const int TimeFrame, const int iShift) \
  {                                                                                                           \
     return (CLASS ##NAME::Get(Symb, TimeFrame, iShift));                                                        \
  }
//+------------------------------------------------------------------+
DEFINE_TIMESERIE(Volume,TickVolume, long )
DEFINE_TIMESERIE(Time,Time, datetime )
DEFINE_TIMESERIE(Open,Open, double )
DEFINE_TIMESERIE(High,High, double )
DEFINE_TIMESERIE(Low,Low, double )
DEFINE_TIMESERIE(Close,Close, double )
void OnStart ()
  {
   for ( int i= 0 ;i< 10 ;i++)
     {
       ResetLastError ();
       Print ( "Bar№ " ,i, " : " ,Time[i], " , O = " ,Open[i], " , H = " ,High[i], " , L = " ,Low[i], " , C = " ,Close[i]);
       int err= GetLastError ();
       if (err> 0 ) Print ( "Error № " ,err);
     }
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin :

CopyXXX와 iXXX 기능 간의 성능을 측정한 적이 있습니까? 이 질문은 매우 흥미롭습니다.

하지 않았다. 나는 바를 거의 다루지 않는다. CopyXXX 기능보다 빠른 것은 없습니다. 캐시된 경우에만.

 
Artyom Trishkin :

CopyXXX와 iXXX 기능 간의 성능을 측정한 적이 있습니까? 이 질문은 매우 흥미롭습니다..


fxsaber :

하지 않았다. 나는 바를 거의 다루지 않는다. CopyXXX 기능보다 빠른 것은 없습니다. 캐시된 경우에만.

정확히 잰:

 #define   test(M,S,EX)        { uint mss= GetTickCount (); int nn=( int ) pow ( 10 ,M); for ( int tst= 0 ;tst<nn&&! _StopFlag ;tst++){EX;} \
                                 printf ( "%s: loops=%i ms=%u" ,S,nn, GetTickCount ()-mss);}
//+------------------------------------------------------------------+
void OnStart ()
  {
   double buff[];
   test( 10 , "CopyClose" , CopyClose ( _Symbol , _Period , rand (), 1 ,buff));
   test( 10 , "iClose" , iClose ( NULL , 0 , rand ())); 
  }
//+------------------------------------------------------------------+

2019.07.30 00:44:29.156 tst_iXXX_복사(EURUSD,H1) CopyClose: 루프=1410065408 ms=69407

2019.07.30 00:45:29.408 tst_iXXX_복사(EURUSD,H1) iClose: 루프=1410065408 ms=60250