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

 
Renat Akhtyamov :

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

;)

첫 번째 페이지에는 내 컴팩트 예제가 있습니다 .. 원칙적으로 모든 것이 그와 함께 시작되었습니다.)))

 
Igor Makanu :

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

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

Artem, 작동합니까?

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) 종료 스크립트

예, 작동 방식은 다음과 같습니다.

 2019.07 . 31 00 : 38 : 01.936 Start test № 1 ...
2019.07 . 31 00 : 38 : 31.097 CopyClose : loops= 500000000 , ms= 29015
2019.07 . 31 00 : 38 : 31.097 Start test № 2 ...
2019.07 . 31 00 : 41 : 25.095 iClose : loops= 500000000 , ms= 173875
2019.07 . 31 00 : 41 : 25.095 Start test № 3 ...
2019.07 . 31 00 : 44 : 29.777 Close[i] : loops= 500000000 , ms= 184547
2019.07 . 31 00 : 44 : 29.777 Start test № 4 ...
2019.07 . 31 00 : 45 : 01.074 CopyRates : loops= 500000000 , ms= 31172
2019.07 . 31 00 : 45 : 01.074 End script

결국:

뭐가 문제 야? 6배 이상 차이가 나는 이유는 무엇입니까?

D1에 ZY 런칭

 
Artyom Trishkin :

뭐가 문제 야? 6배 이상 차이가 나는 이유는 무엇입니까?


이고르 마카누 :

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

)))

 

Igor Makanu :

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

)))

H1에 대해 테스트했지만 눈에 띄는 차이는 없습니다.

 2019.07 . 31 00 : 55 : 30.290 Start test № 1 ...
2019.07 . 31 00 : 55 : 58.234 CopyClose : loops= 500000000 , ms= 27812
2019.07 . 31 00 : 55 : 58.234 Start test № 2 ...
2019.07 . 31 00 : 58 : 59.095 iClose : loops= 500000000 , ms= 180734
2019.07 . 31 00 : 58 : 59.095 Start test № 3 ...
2019.07 . 31 01 : 02 : 06.834 Close[i] : loops= 500000000 , ms= 187610
2019.07 . 31 01 : 02 : 06.834 Start test № 4 ...
2019.07 . 31 01 : 02 : 38.365 CopyRates : loops= 500000000 , ms= 31406
2019.07 . 31 01 : 02 : 38.365 End script

여기에 바이트가 있는 비트는 무엇입니까?

 
Artyom Trishkin :

여기에 바이트가 있는 비트는 무엇입니까?

글쎄, 나는 당신의 컴퓨터가 아마도 바보라고 말하지 않을 것입니다.

나는 여러 번 테스트했고, Roman은 테스트했습니다. 결과는 그에 상응합니다.

이 테스트에서 하드 드라이브의 속도는 중요하지 않아야 합니다. 남은 것이 많지 않습니다. OS 및 하드웨어 = 메모리 + CPU, 무언가가 느려지는 곳,

물론 일부 "내부 세계" core i3에는 옵션이 있습니다. Core ™ i3-4170과 같은 프로세서가 있습니다.

 
Igor Makanu :

글쎄, 나는 당신의 컴퓨터가 아마도 바보라고 말하지 않을 것입니다.

나는 여러 번 테스트했고, Roman은 테스트했습니다. 결과는 그에 상응합니다.

이 테스트에서 하드 드라이브의 속도는 중요하지 않아야 합니다. 남은 것이 많지 않습니다. OS 및 하드웨어 = 메모리 + CPU, 무언가가 느려지는 곳,

물론 일부 "내부 세계" core i3에는 옵션이 있습니다. Core ™ i3-4170과 같은 프로세서가 있습니다.

타이머의 이벤트 제어가 일정한 두 번째 기호에 대한 테스트 어드바이저가 있습니다. 어떤 식으로든 영향을 미친다고 가정할 수 있습니다. 그리고 CopyXXX 기능에서만 가능합니다. 아직 차트에서 그를 제거할 이유가 없습니다. 그의 존재는 이 테스트보다 내 시사 문제에 더 중요합니다.

 
Artyom Trishkin :

H1에 대해 테스트했지만 눈에 띄는 차이는 없습니다.

개발자들은 상위 5개에 있는 새로운 iXXX 기능이 CopyXXX 기능에 대한 래퍼일 뿐이라고 말한 적이 있습니다.

따라서 단일 쿼리의 차이를 예상해서는 안 됩니다.

 
Renat Akhtyamov :
기능의 속도에 대한 평결은 무엇입니까? 어느 것이 더 빠릅니까?
 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int Count= 5000000 ; // кол-во проходов
//---
void OnStart ( void )
  {
   Print ( "Bench_1: " ,Bench_1(Count), " msc" );
   Print ( "Bench_2: " ,Bench_2(Count), " msc" );
  }
//+------------------------------------------------------------------+
//| Bench_1                                                                 |
//+------------------------------------------------------------------+
ulong Bench_1( const int _count)
  {
   const ulong   StartTime= GetMicrosecondCount ();
//---
   for ( int i= 0 ; i<Count;i++)
     {
       datetime time  = iTime ( Symbol (), Period (), 0 );
       double    open  = iOpen ( Symbol (), Period (), 0 );
       double    high  = iHigh ( Symbol (), Period (), 0 );
       double    low   = iLow ( Symbol (), Period (), 0 );
       double    close = iClose ( NULL , PERIOD_CURRENT , 0 );
       long      volume= iVolume ( Symbol (), 0 , 0 );
     }
//---
   return ( GetMicrosecondCount () - StartTime);
  }
//+------------------------------------------------------------------+
//| Bench_2                                                                 |
//+------------------------------------------------------------------+
ulong Bench_2( const int _count)
  {
   datetime   time[];
   double     open[];   // Open (цены открытия бара)
   double     high[];   // High (цены максимума бара)
   double     low[];     // Open (цены минимума бара)
   double     close[];     // Open (цены минимума бара)
   long       volume[]; // Close (цены закрытия бара)

   const ulong   StartTime= GetMicrosecondCount ();
//---
   for ( int i= 0 ; i<Count;i++)
     {
       CopyTime ( Symbol (), Period (), 1 , 1 ,time);
       CopyOpen ( Symbol (), Period (), 1 , 1 ,open);
       CopyHigh ( Symbol (), Period (), 1 , 1 ,high);
       CopyLow ( Symbol (), Period (), 1 , 1 ,low);
       CopyClose ( Symbol (), Period (), 1 , 1 ,close);
       CopyTickVolume ( Symbol (), Period (), 1 , 1 ,volume);
//---
       datetime _time  = time[ 0 ];
       double    _open  = open[ 0 ];
       double    _high  = high[ 0 ];
       double    _low   = low[ 0 ];
       double    _close = close[ 0 ];
       long      _volume= volume[ 0 ];
     
}
//---
   return ( GetMicrosecondCount () - StartTime);
  }
//+------------------------------------------------------------------+
누가 대본을 썼는지 기억나지 않는다.
 
Igor Makanu :

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

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

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

테스트와 최적화를 잊어버렸습니다, 이고르. 속도는 거기에 있습니다.

 
Andrey Khatimlianskii :

테스트와 최적화를 잊어버렸습니다, 이고르. 속도는 거기에 있습니다.

글쎄요 ...그냥 팀이 모여서 이 주제에 대해 진지하게 논의하지 않아서 머리에서 완전히 날아갔습니다. 왜 이 모든 것이))))

네가 옳아! - 하지만 CopyOpen() 함수를 편리하게 사용해야 하고 ... 하려면 CopyOpen() 호출 을 추가 함수로 래핑하면 성능 향상이 손실될 수 있습니다.\

추신: IMHO, 일반적으로 다른 모든 곳과 같습니다. 어셈블러로 작성하면 긴 개발 시간을 얻을 수 있으며 최종 성능이 15분 만에 작성한 C ++를 사용하는 것보다 더 높다는 사실은 아닙니다. 확인하다