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

 
Artyom Trishkin :

나는 확실히 찾지 않을 것입니다 - 시간이 없습니다. 나는 "즉시 사용할 수 있는" 무언가가 있다고 생각했습니다. 나는 그것을 실행하고 결과를 보았습니다. 그래서 ... 게다가 스크립트는 즉시 작동하지 않지만 아이콘에서 RMB를 강제로 닫을 때까지 중단됩니다. 그리고 나서야 무언가가 출력됩니다. 일반적으로 - 매크로를 사용하면 어떤 이유로 번거롭습니다.

내 게시물이 버그 주제로 옮겨가는 것이 의미가 있습니까?

 
Artyom Trishkin :

나는 정확히 찾지 않을 것입니다 - 시간이 없습니다. 나는 "즉시 사용할 수 있는" 무언가가 있다고 생각했습니다. 나는 그것을 실행하고 결과를 보았습니다. 그래서 ... 게다가 스크립트는 즉시 작동하지 않지만 아이콘에서 RMB를 강제로 닫을 때까지 중단됩니다. 그리고 나서야 거기에 무언가가 인쇄됩니다. 일반적으로 - 매크로를 사용하면 어떤 이유로 번거롭습니다.

아, 개가 뒤돌아본 곳!

내 테스트 봤어? out 및 Roman도 게시했습니다.

436초 = 7분 테스트!

;)

추신: 장난꾸러기 펜이 멈췄다고 말씀드리고 싶습니다! ... 스크립트가 "즉시" 작동하지 않습니다...))))


로만 :

내 게시물이 버그 주제로 옮겨가는 것이 의미가 있습니까?

무슨 버그? - 글쎄요, Vine과 Debian에 그들이 프로세서 코어를 완전히 로드할 수 없다고 써주세요. 어떤 OS에서 MT가 있습니까?

 
Igor Makanu :

아, 개가 뒤진 곳!

내 테스트 봤어? out 및 Roman도 게시했습니다.

436초 = 7분 동안 테스트합니다!

;)

추신: 장난꾸러기 펜이 멈췄다고 말씀드리고 싶습니다! ... 스크립트가 "즉시" 작동하지 않습니다...))))

공포 :)

더 쉬어야지...

 
Igor Makanu :

아, 개가 뒤진 곳!

내 시험 봤어? out 및 Roman도 게시했습니다.

436초 = 7분 동안 테스트합니다!

;)

추신: 장난꾸러기 펜이 멈췄다고 말씀드리고 싶습니다! ... 스크립트가 "즉시" 작동하지 않습니다...))))


무슨 버그? - 글쎄요, Vine과 Debian에 그들이 프로세서 코어를 완전히 로드할 수 없다고 써주세요. 어떤 OS에서 MT가 있습니까?

MT는 물론 Windows에서 말하지만 ...
데비안의 VS 코드에서 다른 코드 로드를 테스트할 때 모든 코어가 로드되므로 데비안에서는 죄를 짓지 않아도 됩니다.
그러나 Wine은 할 수 있지만 아마도 MT는 완료되지 않았을 것입니다. 그래서 언더와인을 안 마셨어요.
그리고 Linux의 Wine에서 많은 사람들이 앉아 있습니다.

 
Igor Makanu :

아, 개가 뒤진 곳!

내 테스트 봤어? out 및 Roman도 게시했습니다.

436초 = 7분 동안 테스트합니다!

;)

추신: 장난꾸러기 펜이 멈췄다고 말씀드리고 싶습니다! ... 스크립트가 "즉시" 작동하지 않습니다...))))


좋은. 장난스러운 펜 없이 첫 번째 테스트는 5분 만에 통과했습니다. 나머지는 20이 넘어서도 끝나지 않았다. 쿨러가 떨어지기 시작하고 옆에 서 있던 커피가 끓기 시작했습니다 ... 일반적으로 그는 그것을 기절했습니다 ...
 
기능의 속도에 대한 평결은 무엇입니까? 어느 것이 더 빠릅니까?
 
Renat Akhtyamov :
기능의 속도에 대한 평결은 무엇입니까? 어느 것이 더 빠릅니까?

CopyXXX() 처럼 보이지만 CopyRates () 는 아닙니다. 동시에 여러 데이터를 가져와야 할 때 CopyRates()

 
Artyom Trishkin :
좋은. 장난스러운 펜 없이 첫 번째 테스트는 5분 만에 통과했습니다. 나머지는 20이 넘어서도 끝나지 않았다. 쿨러가 떨어지기 시작하고 옆에 서 있던 커피가 끓기 시작했습니다 ... 일반적으로 그는 그것을 기절했습니다 ...

흠, 당신은 비트를 바이트로 만들고 싶지 않다고 생각합니다... 원칙적으로 더 이상의 옵션은 없습니다! ))))

주제가 중재자의 주의 깊은 관찰 아래 있는 경우 무언가를 수행해야 합니다 ... "예비 부품용" 매크로를 분해했습니다.

Artem, 작동합니까?

 #property script_show_inputs

input ulong LoopCount= 500000000 ;

// Позволяет, как в 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 ()
  {
   double c,buff[ 1 ];
   MqlRates rates[ 1 ];
   ulong i;
//-----   
   Print ( "Start test № 1..." );
   Sleep ( 125 );
   srand ( GetTickCount ());
   uint start= GetTickCount ();
   for (i= 0 ;i<LoopCount && ! _StopFlag ;i++)
       CopyClose ( _Symbol , _Period , rand (), 1 ,buff);
   printf ( "CopyClose : loops=%u , ms=%u" ,i, GetTickCount ()-start);
//-----   
   Print ( "Start test № 2..." );
   Sleep ( 125 );
   srand ( GetTickCount ());
   start= GetTickCount ();
   for (i= 0 ;i<LoopCount && ! _StopFlag ;i++)
      c = iClose ( NULL , 0 , rand ());
   printf ( "iClose : loops=%u , ms=%u" ,i, GetTickCount ()-start);
//-----   
   Print ( "Start test № 3..." );
   Sleep ( 125 );
   srand ( GetTickCount ());
   start= GetTickCount ();
   for (i= 0 ;i<LoopCount && ! _StopFlag ;i++)
      c = Close[ rand ()];
   printf ( "Close[i] : loops=%u , ms=%u" ,i, GetTickCount ()-start);
//-----   
   Print ( "Start test № 4..." );
   Sleep ( 125 );
   srand ( GetTickCount ());
   start= GetTickCount ();
   for (i= 0 ;i<LoopCount && ! _StopFlag ;i++)
       CopyRates ( _Symbol , _Period , rand (), 1 ,rates);
   printf ( "CopyRates : loops=%u , ms=%u" ,i, GetTickCount ()-start);
   Print ( "End script" );
  }
//+------------------------------------------------------------------+

2019.07.30 19:42:16.639 tst_iXXX_복사(EURUSD,H1) 테스트 #1 시작...

2019.07.30 19:42:40.199 tst_iXXX_복사(EURUSD,H1) CopyClose : 루프=500000000 , ms=23422

2019.07.30 19:42:40.199 tst_iXXX_복사(EURUSD,H1) 테스트 #2 시작...

2019.07.30 19:43:26.953 tst_iXXX_복사(EURUSD,H1) iClose : 루프=500000000 , ms=46609

2019.07.30 19:43:26.953 tst_iXXX_복사(EURUSD,H1) 테스트 #3 시작...

2019.07.30 19:44:12.274 tst_iXXX_복사(EURUSD,H1) 닫기[i] : 루프=500000000 , ms=45156

2019.07.30 19:44:12.274 tst_iXXX_복사(EURUSD,H1) 테스트 #4 시작...

2019.07.30 19:44:42.080 tst_iXXX_복사(EURUSD,H1) CopyRates : 루프=500000000 , ms=29656

2019.07.30 19:44:42.080 tst_iXXX_복사(EURUSD,H1) 종료 스크립트

파일:
 
Renat Akhtyamov :
기능의 속도에 대한 평결은 무엇입니까? 어느 것이 더 빠릅니까?

예, 그들은 같은 방식으로 작동합니다. 실험을 위한 IMHO 실험 ... 여기에 5억 회에 대한 마지막 테스트 호출이 있습니다. 글쎄, 차이를 볼 수 있습니다. 분당 몇 틱(~60) , 시간당 틱 수(~ 3600), 하루에 몇 번(~ 86400), 이 23초 중 5억 호출로 실행될 것인지 ...

5,787일 = 23초의 이익? 모든 틱 에서 가장 빠른 기능을 사용한다면 ! ))))))

IMHO, 편리하고 누구의 말을 듣지 않는 그것을 사용하십시오

 
Igor Makanu :

예, 그들은 같은 방식으로 작동합니다. 실험을 위한 IMHO 실험 ... 여기에 5억 회에 대한 마지막 테스트 호출이 있습니다. 글쎄, 차이를 볼 수 있습니다. 분당 몇 틱(~60) , 시간당 틱 수(~ 3600), 하루에 몇 번(~ 86400), 이 23초 중 5억 호출로 실행될 것인지 ...

5,787일 = 23초의 이익? 모든 틱 에서 가장 빠른 기능을 사용한다면 ! )))))))

IMHO, 편리하고 누구의 말을 듣지 않는 그것을 사용하십시오

나는 4-rke에 익숙합니다. 신발은 더 작고 가독성이 좋습니다.

속도와 능력에 불평하지 않고 모든 것이 좋습니다.

;)