Algoritmaların optimizasyonu. - sayfa 7

 
komposter :

Nerede böyle bir güven?

Çekim tam tersini gösteriyor:

mq4 betiği ekte.

Döngülere bölmek gerçekten daha hızlı çalışıyor gibi görünüyor. Ama nedenini anlamıyorum, çünkü iki pasaj var.
 
Ancak, bu hala en hızlı seçenek değil. Ama benim açımdan "la-la", çünkü Hızlı yazmayacağım.
 
hrenfx :
Ancak, bu hala en hızlı seçenek değil. Ama benim açımdan "la-la", çünkü Hızlı yazmayacağım.
Ve yapmayacağım. Kabul etmeme rağmen - daha hızlı olabilir.
 
hrenfx :
Ancak, bu hala en hızlı seçenek değil. Ama benim açımdan "la-la", çünkü Hızlı yazmayacağım.
MetaSürücü :
Ve yapmayacağım. Kabul etmeme rağmen - daha hızlı olabilir.

Peki, gerekli değil! Zararlı :(

Bu algoritmayı kendim yazacağım, zaten biliyorum. Ama şimdi hastayım, bir hafta ertelemem gerekecek.

 
TheXpert :
C.T.D. İlk mesajımda aynen bunu yazdım.
İlk gibi davranmıyorum, teklife katılıyorum: " gerçekten 2 döngüye bölmek daha iyi")
 
C-4 :
Döngülere bölmek gerçekten daha hızlı çalışıyor gibi görünüyor. Ama nedenini anlamıyorum, çünkü iki pasaj var.
Çünkü her geçişte 2 kat daha az kontrol vardır ve geçişler genellikle kısalır (erken kesintiye uğrar).
 
MetaDriver :
Ve yapmayacağım. Kabul etmeme rağmen - daha hızlı olabilir.

Ben de yapmayacağım, daha hızlı olabilir - kesinlikle;)

Sadece bir aranın eksik olduğunu fark ettim, şimdi kafanızla bu göreve derinlemesine girmeyin.

 

İşte son kod. Maksimumları arama işlevi tanıtıldı. Minimum arama işlevi benzerdir:

 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;
        }

İşte performans testleri:

 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

İşlem hızının niteliksel olarak arttığı ve artık ekstremum dönemine bağlı olmadığı görülebilir. Doğru, küçük N'de, özellikle 3. periyot için, hız daha da düştü, ancak N'deki bir artışla, hız hızla artar ve küçük N'deki hızın neredeyse iki katıdır:

Görünüşe göre bunun nedeni, ara atlamaların ve indeks geçişlerinin biraz zaman alması ve uzun mesafelerde etkili olmasıdır. Küçük N'de önden numaralandırma daha hızlıdır.

PS Her iki işlevin de Yürütülmesi Yukarı () ve Aşağı () Eşzamansız yürütme modunda itiyorum. Onlar. aynı anda iki çekirdekte de çalışabilirler. Ancak bu performansı artırmadı. Görünüşe göre, geçişlerin kendileri kaynak yoğun değildir ve çoğu zaman yinelemelerin kendilerine değil, verilerin hazırlanmasına ve dağıtılmasına harcanır.

 
hrenfx :
Ancak, bu hala en hızlı seçenek değil. Ama benim açımdan "la-la", çünkü Hızlı yazmayacağım.

Hala güncel.

not

C-4 :

İşlem hızının niteliksel olarak arttığı ve artık ekstremum dönemine bağlı olmadığı görülebilir.

Buna bağlı ve kötü değil. Senin durumunda, her şeyin minimum N ile bittiği böyle bir kaynak (cVR) yakalandı. Genel olarak, yürütme hızına karşı dönem grafiği sizinkinden çok farklı olabilir.
 
hrenfx :

Hala güncel.

not

Buna bağlı ve kötü değil. Senin durumunda, her şeyin minimum N ile bittiği böyle bir kaynak (cVR) yakalandı. Genel olarak, süreye karşı yürütme hızı grafiği sizinkinden çok farklı olabilir.

Tartışmalı iddia. Algoritma tek geçişlidir ve yineleme sayısı ve dolayısıyla hız, pratik olarak N'ye bağlı değildir. Doğru, algoritmanın bir özelliği vardır, çünkü aşırı fiyatların BP'ye eşit olduğu, olacaktır. performansta önemli bir düşüş. Diğer tüm durumlarda, bağımlılığın korunması gerektiğine eminim. Bu durumda klasik normal dağılımlı rastgele yürüyüş BP olarak alınmıştır.