알고리즘 최적화. - 페이지 7

 
komposter :

그런 자신감이 어디 있습니까?

내 수표는 반대를 보여줍니다.

첨부 파일의 mq4 스크립트.

루프로 분할하는 것이 실제로 더 빠르게 작동하는 것처럼 보입니다. 그런데 왜 두 구절이 있는지 이해가 되지 않습니다.
 
그러나 이것은 여전히 가장 빠른 옵션이 아닙니다. 하지만 제 입장에서는 "라라"입니다. 왜냐하면 빨리 쓰지 않겠습니다.
 
hrenfx :
그러나 이것은 여전히 가장 빠른 옵션이 아닙니다. 하지만 내 쪽에서 그것은 "la-la"입니다. 왜냐하면 빨리 쓰지 않겠습니다.
그리고 나는하지 않을 것이다. 동의하지만 더 빠를 수 있습니다.
 
hrenfx :
그러나 이것은 여전히 가장 빠른 옵션이 아닙니다. 하지만 제 입장에서는 "라라"입니다. 왜냐하면 빨리 쓰지 않겠습니다.
메타드라이버 :
그리고 나는하지 않을 것이다. 동의하지만 더 빠를 수 있습니다.

글쎄, 그것은 필요하지 않습니다! 해로운 :(

이 알고리즘은 내가 직접 작성할 것이며 이미 방법을 알고 있습니다. 지금은 몸이 좋지 않아 일주일만 미루어야 합니다.

 
TheXpert :
씨티디 제가 첫 포스팅에 썼던 바로 그 내용입니다.
나는 첫 번째 척하지 않고 어떻게 든 제안에 동의했습니다. " 실제로 2 사이클로 나누는 것이 좋습니다")
 
C-4 :
루프로 분할하는 것이 실제로 더 빠르게 작동하는 것처럼 보입니다. 그런데 왜 두 구절이 있는지 이해가 되지 않습니다.
각 패스에는 2배 더 적은 수의 검사가 있고 패스 자체가 종종 더 짧아지기 때문입니다(조기 중단됨).
 
MetaDriver :
그리고 나는하지 않을 것이다. 동의하지만 더 빠를 수 있습니다.

더 빨리 가능하지만 나도 하지 않을 것입니다 - 확실히;)

나는 한 번의 휴식이 없다는 것을 깨달았습니다. 이제 머리를 가지고 이 작업에 깊이 들어가지 마십시오.

 

다음은 최종 코드입니다. 최대값 검색 기능이 도입되었습니다. 최소 검색 기능은 다음과 유사합니다.

 private BitArray Up()
        {
            BitArray bits = new BitArray(MyQuotes.Count);
             double max = double .MinValue;
             int pperiod = ( Period - 1 ) / 2 ;
             int bar = pperiod;
             int count = MyQuotes.Count - pperiod;
             //последняя позиция второго перебора.
             int pos = bar;
             bool rev = false ;
             int rpos = bar;
             bool FirstEnter = false ;
             while (bar < count - 1 )
            {
                 for ( int i = 1 ; i <= pperiod; i++)
                {
                    max = MyQuotes.High[bar - i] > MyQuotes.High[bar + i]
                              ? MyQuotes.High[bar - i]
                              : MyQuotes.High[bar + i];
                    pos = bar + i;
                     if (max > MyQuotes.High[bar])
                    {
                        bar = pos;
                         break ;
                    }
                     if (MyQuotes.High[bar + i] == MyQuotes.High[bar] && FirstEnter == false )
                    {
                        rev = true ;
                        rpos = bar + i;
                        FirstEnter = true ;
                    }
                     if (i == pperiod)
                    {
                        bits[bar] = true ;
                        bar = rev ? rpos : pos;
                        rev = false ;
                        FirstEnter = false ;
                    }
                }
            }
             return bits;
        }

성능 테스트는 다음과 같습니다.

 3        00 : 00 : 00.5070290
4        00 : 00 : 00.3920224
5        00 : 00 : 00.3960227
6        00 : 00 : 00.3620207
7        00 : 00 : 00.3570204
8        00 : 00 : 00.3230185
9        00 : 00 : 00.3350192
10        00 : 00 : 00.2820161
11        00 : 00 : 00.2910166
12        00 : 00 : 00.2730157
13        00 : 00 : 00.2990171
14        00 : 00 : 00.2450140
15        00 : 00 : 00.2770158
16        00 : 00 : 00.2890165
17        00 : 00 : 00.2480142
18        00 : 00 : 00.2400138
19        00 : 00 : 00.2530144
20        00 : 00 : 00.2410138
21        00 : 00 : 00.2660152
22        00 : 00 : 00.2310132
23        00 : 00 : 00.2350135
24        00 : 00 : 00.2290131
25        00 : 00 : 00.2300131
26        00 : 00 : 00.2390137
27        00 : 00 : 00.2290131
28        00 : 00 : 00.2350135
29        00 : 00 : 00.2290131
30        00 : 00 : 00.2530144
31        00 : 00 : 00.2200126
32        00 : 00 : 00.2680153
33        00 : 00 : 00.2250129
34        00 : 00 : 00.2260129
35        00 : 00 : 00.2360135
36        00 : 00 : 00.2240128
37        00 : 00 : 00.2240128
38        00 : 00 : 00.2260129
39        00 : 00 : 00.2160124
40        00 : 00 : 00.2390137
41        00 : 00 : 00.2190125
42        00 : 00 : 00.2270130
43        00 : 00 : 00.2210126
44        00 : 00 : 00.2090120
45        00 : 00 : 00.2360135
46        00 : 00 : 00.2210126
47        00 : 00 : 00.2550146
48        00 : 00 : 00.2170124
49        00 : 00 : 00.2220127
50        00 : 00 : 00.2180124
51        00 : 00 : 00.2090120
52        00 : 00 : 00.2180125
53        00 : 00 : 00.2380136
54        00 : 00 : 00.2170124
55        00 : 00 : 00.2270130
56        00 : 00 : 00.2070118
57        00 : 00 : 00.2200126
58        00 : 00 : 00.2230128
59        00 : 00 : 00.2080119
60        00 : 00 : 00.2400137
61        00 : 00 : 00.2160123
62        00 : 00 : 00.2100120
63        00 : 00 : 00.2240128
64        00 : 00 : 00.2220127
65        00 : 00 : 00.2170124
66        00 : 00 : 00.2100120
67        00 : 00 : 00.2100121
68        00 : 00 : 00.2260129
69        00 : 00 : 00.2160123
70        00 : 00 : 00.2240128
71        00 : 00 : 00.2110121
72        00 : 00 : 00.2190125
73        00 : 00 : 00.2140123
74        00 : 00 : 00.2110121
75        00 : 00 : 00.2260129
76        00 : 00 : 00.2090119
77        00 : 00 : 00.2230128
78        00 : 00 : 00.2080119
79        00 : 00 : 00.2070118
80        00 : 00 : 00.2510144
81        00 : 00 : 00.2180125
82        00 : 00 : 00.2080119
83        00 : 00 : 00.2070118
84        00 : 00 : 00.2060118
85        00 : 00 : 00.2060118
86        00 : 00 : 00.2070118
87        00 : 00 : 00.2100120
88        00 : 00 : 00.2060118
89        00 : 00 : 00.2080119
90        00 : 00 : 00.2710155
91        00 : 00 : 00.2180125
92        00 : 00 : 00.2110120
93        00 : 00 : 00.2080119
94        00 : 00 : 00.2060118
95        00 : 00 : 00.2060118
96        00 : 00 : 00.2020116
97        00 : 00 : 00.2080119
98        00 : 00 : 00.2100120
99        00 : 00 : 00.2090119

처리 속도가 질적으로 향상되었으며 이제 극한 주기에 의존하지 않음을 알 수 있습니다. 사실, 작은 N에서, 특히 기간 3에서 속도는 훨씬 더 낮아졌지만 N이 증가하면 속도가 빠르게 증가하고 작은 N에서의 속도보다 거의 두 배 빠릅니다.

분명히 이것은 브레이크 점프와 인덱스 전환이 시간이 걸리고 장거리에서 효과적이기 때문입니다. 작은 N의 경우 정면 열거가 더 빠릅니다.

PS Up() 및 Down() 기능 모두 실행 비동기 실행 모드를 실행합니다. 저것들. 두 코어에서 동시에 실행할 수 있습니다. 그러나 성능이 향상되지는 않았습니다. 분명히 패스 자체는 리소스를 많이 사용하지 않으며 대부분의 시간 은 반복 자체가 아니라 데이터 준비 및 배포에 소비됩니다.

 
hrenfx :
그러나 이것은 여전히 가장 빠른 옵션이 아닙니다. 하지만 제 입장에서는 "라라"입니다. 왜냐하면 빨리 쓰지 않겠습니다.

아직 최신 상태입니다.

추신

C-4 :

처리 속도가 질적으로 향상되었으며 이제 극한 주기에 의존하지 않음을 알 수 있습니다.

따라 다르고 나쁘지 않습니다. 귀하의 경우 모든 것이 최소 N에서 끝나는 그러한 소스(cVR)가 포착되었습니다. 일반적으로 실행 속도 대 기간의 그래프는 사용자의 것과 매우 다를 수 있습니다.
 
hrenfx :

아직 최신 상태입니다.

추신

따라 다르고 나쁘지 않습니다. 귀하의 경우 모든 것이 최소 N에서 끝나는 그러한 소스(cVR)가 포착되었습니다. 일반적으로 실행 속도 대 기간의 그래프는 사용자의 것과 매우 다를 수 있습니다.

논란의 여지가 있는 주장. 알고리즘은 단일 패스이고 반복 횟수이므로 속도는 실제로 N에 의존하지 않습니다. 사실, 알고리즘의 한 기능이 있습니다. 그로 인해 가격 극단이 BP에서 동일하기 때문에 상당한 성능 저하. 다른 모든 경우에는 종속성이 유지되어야 합니다. 이 경우 고전적인 정규 분포 랜덤 워크를 BP로 사용했습니다.