오류, 버그, 질문 - 페이지 2221

 

합성 악기. 나는 분 막대를 가져옵니다 . 각 분 막대는 1포인트(5자)씩 다릅니다.

기호가 있는 창을 닫은 다음 이 창을 다시 열고 이전 다운로드에서 분 막대를 요청합니다.

 

매일의 기호는 동일합니다. 실수는 어디에 있습니까?

 
elibrarius :

Alglib 패키지 코드를 보고 있습니다. 코드의 가독성을 복잡하게 만드는 구조가 많이 있습니다.

그게 더 쉽지 않니?

실행 속도가 더 빨라질 것 같습니다.

코드가 왜 그렇게 복잡합니까? 아니면 조정 없이 다른 언어에서 이식한 것입니까? 그러나 여전히 나는 원래 왜 그런 복잡성이 있는지 궁금합니다.

원본에서는 가속을 위해 정확하게 수행되었을 가능성이 큽니다.

MQL에서 더 빠를지 여부 - 이것은 측정해야 합니다. 여기에서는 작동하지 않는 것 같습니다.

 
Koldun Zloy :

원본에서는 가속을 위해 정확하게 수행 되었을 가능성이 큽니다 .

MQL에서 더 빠를지 여부 - 이것은 측정해야 합니다. 여기에서는 작동하지 않는 것 같습니다.

"대부분"도 작동하지 않습니다.
글쎄, 어떻게 그러한 양식이 더 빨리 작동할 수 있습니까? 무슨 얘기를 하는 건가요!

하나의 변수 대신 두 개의 추가 루프와 추가 배열.

 

Nikolai Semko :

하나의 변수 대신 두 개의 추가 루프와 추가 배열.

이러한 원시적 추론은 현대 프로세서에 적합하지 않습니다.

 
Koldun Zloy :

이러한 원시적 추론은 현대 프로세서에 적합하지 않습니다.

네가 더 잘 알 잖아. 경험 이 더 있으신가요...

 


Koldun Zloy
:

이러한 원시적 추론은 최신 프로세서에 적합하지 않습니다.

글쎄, 그렇다면 본질적으로 미안하지만 당신은 정신이 없습니다.

현재 존재하는 프로세서 중 어느 것도 그런 기능을 갖지 않을 것입니다.

 for (i= 0 ;i<=npoints- 1 ;i++)

보다 빨리 일하다

 for (i= 0 ;i<npoints;i++)

, 배열 에 액세스하는 것은 단순한 변수에 액세스하는 것보다 빠르지 않습니다.

3개의 동일한 루프는 결합된 루프보다 더 빠르게 실행되지 않습니다.


나는 너무 게으르지 않았고 근거가 없는 것을 피하기 위해 ALGLIB 소스에서 직접 속도에 대해 두 가지 다른 옵션을 테스트했습니다.

      e= 0 ;
       double tmp1;
       ulong t= GetMicrosecondCount ();
       for (i= 0 ;i<npoints;i++)
        {
         v= 0.0 ;
         for (i_= 0 ;i_<nvars;i_++)
           {
            tmp1=xy[i][i_]-ct[xyc[i]][i_];
            v+=tmp1*tmp1;
           }
         e=e+v;
        }
      t= GetMicrosecondCount ()-t;
       Print ( "fast = " +( string )t+ " микросекунд, e = " + DoubleToString (e) + " , npoints = " + ( string )npoints+ " , nvars = " + ( string )nvars );



      e= 0 ;
      t= GetMicrosecondCount ();
       for (i= 0 ;i<=npoints- 1 ;i++)
        {
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            tmp[i_]=xy[i][i_];
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v= 0.0 ;
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            v+=tmp[i_]*tmp[i_];
         e=e+v;
        }
      t= GetMicrosecondCount ()-t;
       Print ( "slow = " +( string )t+ " микросекунд, e = " + DoubleToString (e) + " , npoints = " + ( string )npoints+ " , nvars = " + ( string )nvars );

결과:

 2018.06 . 27 04 : 36 : 50.265 TestClasses (GBPUSD,M6) fast = 571 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 50.266 TestClasses (GBPUSD,M6) slow = 841 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 50.630 TestClasses (GBPUSD,M6) fast = 577 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 50.631 TestClasses (GBPUSD,M6) slow = 812 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 51.143 TestClasses (GBPUSD,M6) fast = 599 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 51.144 TestClasses (GBPUSD,M6) slow = 853 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 51.955 TestClasses (GBPUSD,M6) fast = 600 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 51.956 TestClasses (GBPUSD,M6) slow = 809 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 52.344 TestClasses (GBPUSD,M6) fast = 567 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 52.344 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 52.857 TestClasses (GBPUSD,M6) fast = 690 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 52.858 TestClasses (GBPUSD,M6) slow = 820 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 53.229 TestClasses (GBPUSD,M6) fast = 585 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 53.230 TestClasses (GBPUSD,M6) slow = 811 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 53.736 TestClasses (GBPUSD,M6) fast = 560 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40
2018.06 . 27 04 : 36 : 53.737 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40

저것들. 40% 이상의 속도 향상이 있음을 알 수 있습니다.

파일:
dataanalysis.mqh  1150 kb
TestClasses.mqh  2762 kb
 
Nikolai Semko :

글쎄, 본질적으로 그렇다면 미안하지만 당신은 정신이 없습니다.

현재 존재하는 프로세서 중 어느 것도 그러한 기능을 갖지 않을 것입니다.

보다 빨리 일하다

, 배열 에 액세스하는 것은 단순한 변수에 액세스하는 것보다 빠르지 않습니다.

3개의 동일한 루프는 결합된 루프보다 더 빠르게 실행되지 않습니다.


나는 너무 게으르지 않았고 근거가 없는 것을 피하기 위해 ALGLIB 소스에서 직접 속도에 대해 두 가지 다른 옵션을 테스트했습니다.

결과:

저것들. 속도 증가가 40% 이상임을 알 수 있습니다.

테스트 주셔서 감사합니다! MQL 뿐만 아니라 모든 언어에서 더 빠르게 작동할 것이라고 생각합니다.

나는 이 글을 쓴 프로그래머가 실행 중인 프로그램에 대한 급여뿐만 아니라 라인 수에 대한 급여를 받았다는 사실과 같은 이유와 다른 것은 생각하지 않았습니다. 결국 500줄짜리 프로그램은 5000줄짜리 프로그램만큼 고객에게 깊은 인상을 주지 못한다. 이로 인해 코드의 속도와 가독성이 저하된 점은 유감입니다.

 
elibrarius :
MQL 뿐만 아니라 모든 언어에서 더 빠르게 작동할 것이라고 생각합니다.

틀림없이.

 
MQL에서 인증할 때 주의를 기울이면 오류가 발생하고 Facebook의 긴 응답(아마도 인증)이 브라우저 상태에서 멈춥니다.
 
SEM :

합성 악기. 나는 분 막대를 가져옵니다. 각 분 막대는 1포인트(5자)씩 다릅니다.

기호가 있는 창을 닫은 다음 이 창을 다시 열고 이전 다운로드에서 분 막대를 요청합니다.

 

매일의 기호는 동일합니다. 실수는 어디에 있습니까?

안정적으로 재생되나요? 무슨 빌드?