Hatalar, hatalar, sorular - sayfa 1440
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
MT 4. OnTick() içinde rastgele sayı üreteci MathRand(). Owl testini yaparken aynı ayarlarda tekrar çalıştırdığınızda farklı sonuçlar alıyorsunuz. Üretilen sayı algoritmayı etkiliyorsa bu doğaldır.
Nedense optimize ederken, aynı ayarlarla yeniden başlatırken aynı sonuçlar veriliyor. Yani MathRand() optimizasyon modunda çalışmıyor mu?
İkincisi (burada bir hata yapmaktan korkuyorum, umarım Alexander Puzanov bir şey olursa beni düzeltir), eğer programcı bir nedenden dolayı dinamik diziye 20 indeksli bir eleman eklemeye karar verirse, o zaman kötü bir şey olmaz. Dizi bu boyutu alacak ve değeri oraya yazacak ve "eksik" indeksleri sıfır değerleriyle başlatacaktır.
Aynen öyle. Neden "sıfır"??? Ya da belki EMPTY_VALUE olmalıdır? Veya WRONG_VALUE ?
Bu tür örtük atamalarla ilgili sorun tam olarak örtüklüklerindedir - derleyici, bir programcının bir şey düşündüğü ve diğerinin farklı düşünebileceği bazı kodlar sunar.
Artı, verimsizdir - bir değişkeni hemen başlatmak her zaman gerekli olmaktan uzaktır ve büyük bir diziyi, evet, bir döngüde başlatmak, hızı önemli ölçüde yavaşlatabilir.
Üçüncüsü, programcının kullanılan boyutu ve indeksi kontrol etmesini kimse engelleyemez ! Tek fark, şimdi bunu yapmak zorunda olmaları! )))
Derleyici dizinin kendisinin boyutunu takip ederse, hiçbir sınıf bu kodu kaldıramaz. Verimlilik çok düşebilir.
Aynı zamanda, derleyici bu işi yapmazsa, programcı bunu yapacak bir sınıf yazabilir ve gelecekte - gerekirse sıfırlarla genişletilebilen ve başlatılabilen bir dizi kullanabilir.
İkinci durumda, esneklik daha yüksektir.
Yani sunduğunuz şey aynı zamanda birçok durum için oldukça uygun bir çözüm. Ancak verimliliği azaltabilir, ki bu iyi değildir.
Bu, prensipte, dinamik bir dizinin normalde nasıl doldurulması gerektiğine dair basit bir örnektir. Çok uzun zamandır C yazmadım, hatırlamıyorum ama php'de diziler aynen böyle dolduruluyor! Her şey mantıklı ve anlaşılır. Diziye bir eleman eklersem (dizi[] = x), dizi otomatik olarak artırılır ve eleman dizinin sonuna eklenir. Ve kendiniz uzatmanıza gerek yok ve elemanın indeksini kendiniz belirtmeniz gerekmiyor. Burada tamamen gereksiz hareketler yapmamız gerekiyor:
fark açık...
Bence bu en azından garip)))
Programlama dilleri, kesinlikle yazılan ve yazılmayan olarak ikiye ayrılır. Kesin olarak yazılmayanlar PHP, R ve diğer işlevsel dillerinizi içerir. MQL veya C# ve Java gibi güçlü yazılan dillerde, bu tür belirsiz veri manipülasyonlarına izin verilmez. Ve bu, özellikle programcının güvenliği için yapıldı. Güçlü yazma, prosedürlerinizin her birinin son derece spesifik olduğu anlamına gelir: "dizi dizisinde 0 dizininde öğe al" özel ve anlaşılır bir prosedürdür, ancak bunu "dizi dizisinden bir şey al ve onu dizi dizisinden bir şeye ekle" ile değiştirmenizi önerirsiniz. ilk önce dönüş derleyicisini çözer". - Bu konuda fazla ilerlemeyeceğinizi kabul edin.
Öte yandan, elbette, dizinin boyutunu ve sürekli kullanıcı yeniden bölümlerini bulmaktan bıkmadan basit üst düzey yapılar istiyorum. Standart kütüphane bunun içindir. Temel dizileri kullanmak yerine Array grubundaki sınıflara geçin. Örneğin, CArrayInt dizisine sıfırdan 16'ya eklemek şöyle görünecektir:
Gördüğünüz gibi, olağandışı bir şey yok. Ve dizinin mevcut boyutu ve diğer yeniden bölümler üzerinde kafanızı kırmanıza gerek yok. Güçlü yazma çerçevesinde her şey sizin için yapılır ve doğrudan kullanıcı görevine odaklanmaya davetlisiniz. OOP'nin gücü ve anlamı budur.
Tam kayıt mevcut değil. Derleme Hatası
Nerede hata yaptığımı bulamıyorum.
Görev, aralıktakimaksimum ve minimum değeri bulmaktır.
ArrayMaximum(), ArrayMinimum() içinde yanlış argüman sırası.
Nerede hata yaptığımı bulamıyorum.
Görev, aralıktakimaksimum ve minimum değeri bulmaktır.
Fonksiyonlar
CopyHigh ( _Symbol , 0 , 2 ,Kol_Kan,HI); // maksimum değerleri kopyala
CopyLow ( _Symbol , 0 , 2 ,Kol_Kan,LO); // minimum değerleri kopyala
zaten diziyi yeniden boyutlandırıyor ...
Bu çok fazla
ArrayResize (HI,Kol_Kan); //dizi boyutunu ayarla
ArrayResize (LO,Kol_Kan);
Неправильный порядок аргументов в ArrayMaximum(), ArrayMinimum().
Kesinlikle)) Ve bence ...
Fonksiyonlar
CopyHigh ( _Symbol , 0 , 2 ,Kol_Kan,HI); // maksimum değerleri kopyala
CopyLow ( _Symbol , 0 , 2 ,Kol_Kan,LO); // minimum değerleri kopyala
zaten diziyi yeniden boyutlandırıyor ...
Bu çok fazla
ArrayResize (HI,Kol_Kan); //dizi boyutunu ayarla
ArrayResize (LO,Kol_Kan);
bileceğim, teşekkürler.
Ama yazar zaten anladı. ))
PabloEs :
Kesinlikle)) Ve bence ...