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

 
Igor Makanu :


정확히 잰:

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

흠, 제 생각에는 일종의 중재자가 불 같은 인사를 전달해야합니다)))))

스크립트를 실행합니다.

 2019.07 . 30 03 : 58 : 46.425 CopyClose : loops=- 2147483648 ms= 0
2019.07 . 30 03 : 58 : 46.425 iClose : loops=- 2147483648 ms= 0

뭐가 문제 야? (그것을 알아낼 시간이 없다)

 
Artyom Trishkin :

스크립트를 실행합니다.

뭐가 문제 야? (그것을 알아낼 시간이 없다)

차트의 막대 수에 대한 확인이 없습니다. 존재하지 않는 막대에서 충돌이 발생할 수 있습니다. 내 설정은 무제한이고 마침표 H1은 히브리어로, 65,000과 같은 rand()는 최대값을 제공합니다.


rand() 컴파일러 최적화, 다음은 4가지 방법 모두에 대한 올바른 테스트입니다.

 // Позволяет, как в 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 )
#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[ 1 ];
   MqlRates rates[ 1 ];
   srand ( GetTickCount ());
   test( 10 , "CopyClose" , CopyClose ( _Symbol , _Period , rand (), 1 ,buff));
   srand ( GetTickCount ());
   test( 10 , "iClose" , iClose ( NULL , 0 , rand ())); 
   srand ( GetTickCount ());
   test( 10 , "Close[i]" ,Close[ rand ()]); 
   srand ( GetTickCount ());
   test( 10 , "CopyRates" , CopyRates ( _Symbol , _Period , rand (), 1 ,rates)); 
  }
//+------------------------------------------------------------------+

2019.07.30 00:59:10.911 tst_iXXX_복사(EURUSD,H1) CopyClose: 루프=1410065408 ms=69765

2019.07.30 01:01:23.655 tst_iXXX_복사(EURUSD,H1) iClose: 루프=1410065408 ms=132735

2019.07.30 01:03:51.541 tst_iXXX_복사(EURUSD,H1) 닫기[i]: 루프=1410065408 ms=147890

2019.07.30 01:05:19.872 tst_iXXX_복사(EURUSD,H1) CopyRates: 루프=1410065408 ms=88328

 
Igor Makanu :

차트의 막대 수에 대한 확인이 없습니다. 존재하지 않는 막대에서 충돌이 발생할 수 있습니다. 내 설정은 무제한이고 마침표 H1은 히브리어로, 65,000과 같은 rand()는 최대값을 제공합니다.


rand() 컴파일러 최적화, 다음은 4가지 방법 모두에 대한 올바른 테스트입니다.

2019.07.30 00:59:10.911 tst_iXXX_복사(EURUSD,H1) CopyClose: 루프=1410065408 ms=69765

2019.07.30 01:01:23.655 tst_iXXX_복사(EURUSD,H1) iClose: 루프=1410065408 ms=132735

2019.07.30 01:03:51.541 tst_iXXX_복사(EURUSD,H1) 닫기[i]: 루프=1410065408 ms=147890

2019.07.30 01:05:19.872 tst_iXXX_복사(EURUSD,H1) CopyRates: 루프=1410065408 ms=88328

 2019.07 . 30 04 : 12 : 50.825 CopyClose : loops=- 2147483648 ms= 0
2019.07 . 30 04 : 12 : 50.825 iClose : loops=- 2147483648 ms= 0
2019.07 . 30 04 : 12 : 50.825 Close[i]: loops=- 2147483648 ms= 0
2019.07 . 30 04 : 12 : 50.825 CopyRates : loops=- 2147483648 ms= 0
파일이 필요할 때 어떻게 든 그다지 좋지 않습니다 :)
 
Artyom Trishkin :
파일이 필요할 때 어떻게 든 그다지 좋지 않습니다 :)

흠, 반 리터가 없으면 방법이없는 것 같습니다 ...

그리고 왜 loops=-2147483648 의 값이 소스에 하나 더 있습니다!

;)

추신: ulong- 정의에서 int를 교체하십시오 - 아침까지 테스트하려는 경우)))

 
Igor Makanu :

흠, 반 리터가 없으면 방법이없는 것 같습니다 ...

그리고 왜 loops=-2147483648 의 값이 소스에 하나 더 있습니다!

;)

추신: ulong- 정의에서 int를 교체하십시오 - 아침까지 테스트하려는 경우)))

교체됨:

 2019.07 . 30 04 : 26 : 12.849 CopyClose : loops= 1410065408 ms= 71234
2019.07 . 30 04 : 26 : 12.849 iClose : loops= 1410065408 ms= 0
2019.07 . 30 04 : 26 : 12.849 Close[i]: loops= 1410065408 ms= 0
2019.07 . 30 04 : 26 : 12.849 CopyRates : loops= 1410065408 ms= 0

:))

 
Artyom Trishkin :

교체됨:

:))

MQL 소스 게시 일대일, 터미널 로그에서 테스트 복사-붙여넣기

흠, 장난꾸러기 손이 어디에 붙어 있는지 상상하기 어렵습니다)))

나는 이것을 켜지 않기 때문에 거의 테스트하지 않습니다. 코드는 확실히 작동합니다. 그것은 나를 위해 작동합니다! 논의 할 때 여기를 가져 갔다.

추신: Vin10 - 64, 빌드 2093(Intel Core - 8GB RAM) - 문제가 발견되지 않았습니다. 거기에 무엇이 있습니까?

--------------

첨부 ... 스크립트 폴더에 있는 스크립트입니다 ... 더 이상 무엇을 제안해야 할지 모르겠습니다.

파일:
 
Win10 x64에서는 모든 코어가 사용됩니다.
 2019.07 . 30 00 : 25 : 29.057 Test (GBPUSD,M1)   CopyClose : loops= 1410065408 ms= 72953
2019.07 . 30 00 : 27 : 51.501 Test (GBPUSD,M1)   iClose :    loops= 1410065408 ms= 143625
2019.07 . 30 00 : 30 : 17.904 Test (GBPUSD,M1)   Close[i]:  loops= 1410065408 ms= 149078
2019.07 . 30 00 : 31 : 56.618 Test (GBPUSD,M1)   CopyRates : loops= 1410065408 ms= 88891

어떤 이유로 Debian x64의 Wine에서 하나의 코어만 관련되어 있습니다.
 2019.07 . 30 00 : 38 : 03.104 Test (GBPUSD,M1)   CopyClose : loops= 1410065408 ms= 119863
2019.07 . 30 00 : 41 : 10.478 Test (GBPUSD,M1)   iClose :    loops= 1410065408 ms= 187364
2019.07 . 30 00 : 44 : 16.935 Test (GBPUSD,M1)   Close[i]:  loops= 1410065408 ms= 186449
2019.07 . 30 00 : 46 : 29.732 Test (GBPUSD,M1)   CopyRates : loops= 1410065408 ms= 132794
파일:
CPU_Win10.png  47 kb
CPU_Wine.png  21 kb
 
Igor Makanu :

MQL 소스 게시 일대일, 터미널 로그에서 테스트 복사-붙여넣기

흠, 장난꾸러기 손이 어디에 붙어 있는지 상상하기 어렵습니다)))

나는 이것을 켜지 않기 때문에 거의 테스트하지 않습니다. 코드는 확실히 작동합니다. 그것은 나를 위해 작동합니다! 논의 할 때 여기를 가져 갔다.

추신: Vin10 - 64, 빌드 2093(Intel Core - 8GB RAM) - 문제가 발견되지 않았습니다. 거기에 무엇이 있습니까?

--------------

첨부 ... 스크립트 폴더에 있는 스크립트입니다 ... 더 이상 무엇을 제안해야 할지 모르겠습니다.

 // Позволяет, как в 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 )
#define   test(M,S,EX)        { ulong mss= GetTickCount (); ulong nn=( ulong ) pow ( 10 ,M); for ( ulong tst= 0 ;tst<nn&&! _StopFlag ;tst++){EX;} \
                                 printf ( "%s: loops=%i ms=%u" ,S,nn, GetTickCount ()-mss);}
//+------------------------------------------------------------------+
void OnStart ()
  {
   double buff[ 1 ];
   MqlRates rates[ 1 ];
   srand ( GetTickCount ());
   test( 10 , "CopyClose" , CopyClose ( _Symbol , _Period , rand (), 1 ,buff));
   srand ( GetTickCount ());
   test( 10 , "iClose" , iClose ( NULL , 0 , rand ())); 
   srand ( GetTickCount ());
   test( 10 , "Close[i]" ,Close[ rand ()]); 
   srand ( GetTickCount ());
   test( 10 , "CopyRates" , CopyRates ( _Symbol , _Period , rand (), 1 ,rates)); 
  }
//+------------------------------------------------------------------+

Win10 - 64, 빌드 2093(Intel Core i3-3217U CPU @ 1.80GHz - 12GB RAM) - 문제 발견...

 
Artyom Trishkin :

문제점 발견...

여기서만 사이클 수를 줄이고 스크립트가 작동할 장소가 있는 경우 GetLastError() 출력물을 통해 다음을 찾습니다.

옵션으로: 또는 일부 터미널 설정 ? - 흠, 설정은 무엇입니까? - 차트의 막대 수 및 다음과 같은 모든 것

 
Igor Makanu :

여기서만 사이클 수를 줄이고 스크립트가 작동할 장소가 있는 경우 GetLastError() 출력물을 통해 다음을 찾습니다.

옵션으로: 또는 일부 터미널 설정 ? - 흠, 설정은 무엇입니까? - 차트의 막대 수 및 다음과 같은 모든 것

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