Optimizasyon sırasında tek seferlik dizi hesaplaması - sayfa 7

 
forexman77 :

Küresel düzeyde bir dizi bildirmeye çalıştı (mql4 kodu)

init ile doldurun

başlangıçta yazdırırken, 1971 tarihini gösteriyor, yani dizi boş

Başlangıçta diziyi doldurursanız değerler ortaya çıkıyor. Belki de bunun nedeni diziyi yeni bir tarih saatinde başlatmamdır, ancak kod onsuz derlenmiyor mu?

Genel olarak, dizi kaybolur. Neyi yanlış yapıyorum?

İşte birinin ihtiyacı olursa diye aklıma gelen şey. Bir diziyi diğerine kopyaladı.

 datetime T_[]; //на глобальном уровне
//////////////////////////////////////////////////////////////////
int init()
  {
   ArraySetAsSeries (T_, true );
   massiv();

   return ( 0 );
  }
/////////////////////////////////////////////////////////////////
int start()
  {
   if ( ArraySize (T_)== 0 )
   massiv();

   return ( 0 );  
  }
////////////////////////////////////////////////////////////////
void massiv()
  {
   datetime T[ 40 ]=
   {
   1262731020 , 1262735700 , 1262821920 , 1262903400 , 1262989740 , 1263247200 , 1263339060 , 1263420000 , 1263507480 , 1263595500 ,
   1265324700 , 1265407200 , 1265752980 , 1265926500 , 1265930820 , 1267657200 , 1267740300 , 1267826460 , 1268175840 , 1268346360 ,
   1270504920 , 1270684140 , 1270768500 , 1272924180 , 1273011720 , 1273097100 , 1273272240 , 1273528800 , 1273617180 , 1275344100 ,
   1275516000 , 1275602400 , 1275689160 , 1276034400 , 1276124580 , 1276208700 , 1276211640 , 1278027960 , 1278369780 , 1278373920
   };
   ArraySetAsSeries (T, true );
   ArrayInitialize (T_, 0 );
   ArrayResize (T_, 40 );
   ArrayCopy (T_,T, 0 , 0 , WHOLE_ARRAY );
   ArrayFree (T);
  }
 
forexman77 :

İşte birinin ihtiyacı olursa diye aklıma gelen şey. Bir diziyi diğerine kopyaladı.

Ve ne için?

Başlangıçta soru, sonraki optimizasyon yinelemeleri sırasında dizinin yeniden hesaplanmayacağıydı. Ve şimdi basitçe doldurulur ve diğerine kopyalanır. Bundan hayır gelmez. Anladığım kadarıyla, bu T[40] dizisi sadece açıklık için bu şekilde sunulmuştur, ancak aslında sırayla ele alınmalı ve doldurulmalıdır. Optimizasyonun sonraki her başlangıcında , bu dizi daha önce olduğu gibi yeniden hesaplanacaktır, tek fark her şeyin farklı şekilde düzenlenmesidir.

 
Alexey Viktorov :

Ve ne için?

Başlangıçta soru, sonraki optimizasyon yinelemeleri sırasında dizinin yeniden hesaplanmayacağıydı. Ve şimdi basitçe doldurulur ve diğerine kopyalanır. Bundan hayır gelmez. Anladığım kadarıyla, bu T[40] dizisi sadece açıklık için bu şekilde sunulmuştur, ancak aslında sırayla ele alınmalı ve doldurulmalıdır. Optimizasyonun sonraki her başlangıcında , bu dizi daha önce olduğu gibi yeniden hesaplanacaktır, tek fark her şeyin farklı şekilde düzenlenmesidir.

Kıvrımlı parantezlerle bildirilen dizi kaydedilmedi, ardından init doldurularak global düzeyde bildirilemedi (dizi bir çalıştırmada kaydedilmedi).

Optimizasyon yinelemeleri arasında anladığım kadarıyla dizi kaydedilmez, yani program olan her şeyi sıfırlar.

 
forexman77 :

Kıvrımlı parantezlerle bildirilen dizi kaydedilmedi, ardından init doldurularak global düzeyde bildirilemedi (dizi bir çalıştırmada kaydedilmedi).

Optimizasyon yinelemeleri arasında anladığım kadarıyla dizi kaydedilmez, yani program olan her şeyi sıfırlar.

Bu yüzden döngüyü doldurmak uzun sürmeyecektir. Diğer bir soru da dizi elemanlarının hesaplanması uzun zaman alıyorsa... Yani bu durumda sizi kurtarmaz, dizi elemanlarının yeniden hesaplanması her yinelemede devam eder. Ve eğer dizi bu şekilde doldurulursa, global seviyede tüm elemanları kaşlı ayraçlar içinde sıralayabilirsiniz. Bu büyünün anlamını anlamıyorum...
 
Alexey Viktorov :
Ve eğer dizi bu şekilde doldurulursa, global seviyede tüm elemanları kaşlı ayraçlar içinde sıralayabilirsiniz. Bu büyünün anlamını anlamıyorum...
Ayrıca global olarak da yapabilirsiniz. Ama tepede birkaç bin elementten oluşan bir kule inşa etmeyi sevmedim)
 
forexman77 :
Ayrıca global olarak da yapabilirsiniz. Ama tepede birkaç bin elementten oluşan bir kule inşa etmeyi sevmedim)

Tanrıya şükür, her şey İstek Listesine uygun çıktı.

Hız arttı mı?

 
Alexey Viktorov :

Tanrıya şükür, her şey İstek Listesine uygun çıktı.

Hız arttı mı?

Daha hızlı olur.
 

Yeni konu oluşturmadım.

Şimdi şunu yapmaya çalışıyorum: bir dizi var, ilk değer bir tarih, ikinci ve üçüncü sayılar çift. Diziyi tarih değerlerine göre sıralamanız gerekiyor, ancak böylece ikinci ve üçüncü değerler tarihe bağlı olsun.

Sonra birkaç diziden birini kalıplamayı ve bunları tarihe göre sıralamayı planlıyorum.

Bunu yapmaya çalıştım ama anladığım kadarıyla sıralama dizi dizine göre yani i'ye göre yapılıyor.

double m[ 215 ][ 3 ];
m[i][ 0 ]=Data;
m[i][ 1 ]=f1;
m[i][ 2 ]=f2;
 
forexman77 :

Yeni konu oluşturmadım.

Şimdi şunu yapmaya çalışıyorum: bir dizi var, ilk değer bir tarih, ikinci ve üçüncü sayılar çift. Diziyi tarih değerlerine göre sıralamanız gerekiyor, ancak böylece ikinci ve üçüncü değerler tarihe bağlı olsun.

...

Buraya bakın: https://www.mql5.com/ru/forum/42036
Сортировка двухмерного массива.
Сортировка двухмерного массива.
  • www.mql5.com
Форум трейдеров MQL5.community
 
Anatoli Kazharski :
Buraya bakın: https://www.mql5.com/en/forum/42036

Benim için karanlık bir orman olan sınıflarda temelde her şey var. Ancak bazı düşünceler geldi. Ayrı ayrı tarihler ve sayılar içeren bir dizi yapın. Sadece, sıralamadan sonra tarihlerin bulunduğu indeks numarası nasıl alınır, yani ikinci boyutta olan i nasıl alınır?

datetime m[ 215 ][ 1 ];
double d[ 215 ][ 2 ];

m[ 0 ][i]=Dat_DtTm;
d[i][ 0 ]=f1;
d[i][ 1 ]=f2;