Hatalar, hatalar, sorular - sayfa 2000

 
Alexey Viktorov :

Ve bunu zaten OnCalculate'de yapmak hiç mantıklı değil. Diziyi bir şeyle başlatmanın ve ardından onu formülden bazı değerlerle doldurmanın nedeni nedir? Sırasıyla bir çubuk ve bir dizi hücresi eklerken, onu bir şeyle ve hemen formüldeki değerle veya boş bir değerle doldurmanın amacı nedir?

Bu, formülün tüm çubuklara uygulanması durumunda geçerlidir. Ve eğer sadece sonuncuysa? Örneğin, hesaplanacak çubuk sayısını ayarlamanıza izin veren bir sürü hindim var, çünkü. hesaplamalar ağırdır. Başlatma gerekli.

Genel olarak, kim istemez ki, yapmasına izin vermeyin. Artık tartışmıyorum. ;-)

 
fxsaber :

Yani orada ArrayResize ile ilgili değil, ArrayInitialize ile ilgili. ArrayResize, MT4'te boş doldurmayı garanti eder.

Peki ya dikkatlice okursanız? Tekrar alıntı yapacağım.

Bir dizinin ArrayInitialize (dizi, init_val) ifadesi ile başlatılması, bu dizi için ayrılan rezervin öğelerinin aynı değerle başlatıldığı anlamına gelmez. Geçerli rezerv içindeki ArrayResize() işlevi tarafından dizi dizisinin boyutunda sonraki artışlarla, dizinin sonuna , değerleri tanımlanmayan ve çoğu zaman init_val'e eşit olmayan öğeler eklenir. .

ArrayInitialize - Операции с массивами - Справочник MQL4
ArrayInitialize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayInitialize - Операции с массивами - Справочник MQL4
 
Stanislav Korotky :

Peki ya dikkatlice okursanız? Tekrar alıntı yapacağım.

Bir dizinin ArrayInitialize (dizi, init_val) ifadesi ile başlatılması, bu dizi için ayrılan rezervin öğelerinin aynı değerle başlatıldığı anlamına gelmez. Geçerli rezerv içindeki ArrayResize() işlevi tarafından dizi dizisinin boyutunda sonraki artışlarla, dizinin sonuna, değerleri tanımlanmayan ve çoğu zaman init_val'e eşit olmayan öğeler eklenir. .

Evet, orada init_val olmadığını açıklamanın daha korkutucu olduğundan emin oldular. Ve elbette, "değerleri sıfır olan" ile değiştirilebilir.
 
Stanislav Korotky :

Neden böyle gerçekçi olmayan senaryolar icat ettin, aslında bir MQL programcısının hataları? Tam başlatmanın yalnızca bir kez veya verilerin devam ettiğinin saptanması durumunda yapıldığı açıktır. Bu durumda, çekirdek onu daha verimli hale getirecektir.

Çift başlatma hakkında nerede konuştum? Hemen hemen aynı, yukarıda bahsedilen, döngüdeki tüm unsurları doldurarak konuştu. Eğer öyleyse, başlatmaya gerek yoktur ve yalnızca kaynakları boşa harcar.

Peki, tüm çubukları saymazsanız, sıfırları kendiniz doldurmaya özen gösterin.

 
Stanislav Korotky :

Bu, formülün tüm çubuklara uygulanması durumunda geçerlidir. Ve eğer sadece sonuncuysa? Örneğin, hesaplanacak çubuk sayısını ayarlamanıza izin veren bir sürü hindim var, çünkü. hesaplamalar ağırdır. Başlatma gerekli.

Genelde kim istemezse yapmasın . Artık tartışmıyorum. ;-)

Bunlar altın sözler... Ama "gerekli olmayan yerde, orada yapmayacağız" demek daha doğru olur. Ya da tam tersi "sadece ihtiyaç olduğu yerde yapacağız."

 
fxsaber :

Yalnızca yeni dizi öğeleri başlatılır. Ve anlam aynıdır - kodda bir hata olsa bile (çoğunlukla kendisinin değil) çalıştırmadan çalıştırmaya sonuçların kimliği. Mat ile örnek. İncil yukarıda alıntılanmıştır.

Çöp kötüdür.

Buna yorum yapacak doğru kelimeleri bile bulamıyorum.

Sonuçta, bulaşmanız teklif edilirse ... bunu kabul etmeniz pek olası değildir. Peki, diyelim ki ilk defa ne olduğunu anlamadın, sonra ikinci defa???

Peki, neden geliştiricilerin sizi boktan korumasını istiyorsunuz? Kendini koru. Veya kesinlikle gerekli olduğu lehine reddedilemez argümanlar varsa, bunları halktan saklamayın.

Pekala, mql3 vardı, öyle hataları yazmanın mümkün olduğu yerde tüyler diken diken ... ve danışman her yerde herhangi bir şekilde çalışıyor ... ama doğru çalışıyor mu? kimin umrunda???

Bazı nedenlerden dolayı, dizinin ötesine geçme konusunda herhangi bir anlaşmazlık yoktur. Ve bunun bir dizideki veya değişkendeki çöpten daha az kötü olduğu anlaşılıyor. Şey, dizide eskiden olduğu gibi böyle bir indeks yok, peki, bayrak onun elinde ... hadi çalışmaya devam edelim. Her şey geçti...

 
Alexey Viktorov :

Peki, neden geliştiricilerin sizi boktan korumasını istiyorsunuz? Kendini koru. Veya kesinlikle gerekli olduğu lehine reddedilemez argümanlar varsa, bunları halktan saklamayın.

Talep yoktu, reddedilemezlik gösterildi

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2017.09.12 16:17

 #property strict

void OnStart ()
{
   uchar Array[];
  
   const int Size = ArrayResize (Array, 10000 );
  
   bool Res = false ;
  
   for ( int i = 0 ; (i < Size) && (!Res); i++)
    Res = Array[i];
    
   Print (Res);
}

MT4'te her zaman false döndürür, çünkü çöp olmadan - her şey sıfırdır. MT5'te - doğru.

Bu nedenle, MT4 test cihazındaki aynı kod, çalıştırmadan çalıştırmaya her zaman aynı sonuçları gösterecektir. MT5 test cihazında değil.

 
fxsaber :

Talep yoktu, reddedilemezlik gösteriliyor

Ve sadece bir satır eklemeyi kim yasaklıyor?

   uchar Array[];
   const int Size = ArrayResize (Array, 10000 );
   bool Res = false ;
   ArrayInitialize (Array, 0 );
   for ( int i = 0 ; (i < Size) && (!Res); i++)
    Res = Array[i];
   Print (Res); 

Yoksa false'nin 0 olduğunu, diğer her şeyin işaretten bağımsız olarak doğru olduğunu bilmiyor musunuz? Dizinin arka ucundan değerler alıyorsunuz ve 0 olduğundan emin olmak istiyorsunuz. Peki, bu durumda, diziyi sıfıra başlatmak mantıklı, ama yapmaması gerekirken neden sisteme zorunlu sıfırlama yüklensin?

Üzgünüm, ama bu örnek tamamen saçmalık.

 
Alexey Viktorov :

Ve sadece bir satır eklemeyi kim yasaklıyor?

Benimle ilgili değil.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2017.09.12 16:52

Bir çeşit matta olduğu düşüncesini korkutuyor. kitaplığı (Include\Math - 7 Mb kaynakları ) bir/iki yerde başlatılmadı! Ve MT5 test cihazında farklı tek çalıştırmalar ve MT4'te aynı olanları veren bu hatayı nasıl çözebilirim?

 
fxsaber :

Benimle ilgili değil.

Sadece diğer tüm insanların kütüphanelerini terk etmek için kalır. Ve belirtilene hiç bakmadım, çok daha az kullandım. İhtiyacınız olan her şeyi kendiniz yazmak, orada herhangi bir sümük olup olmadığını kontrol etmek için böyle bir yığın kazmaktan daha kolaydır ... Ve sadece iki veya üç işlevi kullanın ...