Aynı eyleme neden olan koşullarda birçok "veya" (||)'dan kaçmak mümkün müdür? - sayfa 7

 

Bugün ne kadar verimli bir gece geçirdim! Ben uyurken burada bana çok ilginç şeyler verildi, bunun için sana sonsuz minnettarım! Ve sabahlarınız da akşamdan daha akıllı çıktı!

Önerilen her şeyin üstünkörü bir incelemesi, her zaman olduğu gibi, daha fazla soruyu gündeme getiriyor, ancak şimdilik sadece son ifadeyi yalnızca bir Eylem () ile yapmanın mümkün olup olmadığını öğrenmek istiyorum. oldukça geniştir:

 if (!A) if (!B) if (!C) if (!D)
else Action();


Bana öyle geliyor ki bu daha verimli olabilir. Doğru, yalnızca sonuncusunun doğru olması veya ben yanılıyorsam, bu benim için daha iyi olacaksa, tüm koşulların kontrol edilmesini engellemez.

Ne düşünüyorsun?

 
FAQ :
"lanet MQL4" ü sevmeyen, buradan koşarak, koşarak gidebilir ve gidecek. Çünkü burada ne yaptığı belli değil. hesabın tüm esasına ve eskiliğine rağmen.
Lütfen bilmeyenlere açıklayın!
 
Meat :
Genel olarak, en hızlı seçenek şöyle olacaktır:

Ancak, else result= false satırını ilk satırla birleştirmek daha iyidir, pratikte hızı etkilemeyecektir. Ve genel olarak, eğer A, B, C ve D basit koşullar içeriyorsa (minimum aritmetik işlemlerle, herhangi bir matematiksel fonksiyon çağırmadan ve diğer zil ve ıslıklarla), o zaman bu tür optimizasyondan çok fazla performans kazancı elde edemezsiniz. Tabii ki, bu yapı on milyonlarca kez değil sizin tarafınızdan yürütülür). Ancak kod karmaşası önemli olabilir.

Bunu dallardan birinde zaten yazdım, her şeye rasyonel olarak yaklaşılmalıdır. Bazı nedenlerden dolayı, kodunuzda optimizasyonu gerçekten çok büyük bir performans kazancı sağlayacak çok daha önemli yerleriniz var gibi görünüyor. Ana algoritma ile başlamanız gerekir. Yeni başlayanların çoğu, TS veya açık siparişlerle ilgili tüm koşulların her onayında aptalca bir kontrole sahiptir. Bu nedenle frenler. Çoğu durumda, yalnızca sınır koşullarını kontrol etmek yeterli olsa da, örneğin, yüksek ve düşük belirli bir değere ulaşır veya yeni bir çubuğun görünümü. Ve ancak bundan sonra başka kontroller yapın.

Ayrıca, yoğun kaynak gerektiren hesaplamalar söz konusu olduğunda, bu hesaplamaları bir DLL dosyasına aktarmayı düşünmeniz gerekir. Aksi takdirde, lanet olası MQL4'te 13 dakika oturup beklemek (aynı sonucu 2-3 dakika içinde almanıza rağmen) bir şekilde kusurlu :)


ilk kısma tamamen katılsam da.
 
icas :

Yani daha da hızlı.

Hikayeyi hatırladım:

"Şirketin yönetim kurulu toplantısında 2 soru vardı:

1. Bir senkrofazotron inşa etme kararı.

2. Çalışanlar için bir bisiklet rafı inşa etme kararı.

İlk soruda tartışma 1 dakika sürdü,

2. tartışma 2 saatten fazla sürdü.

Evet, kesinlikle ... Bisiklet park yeri hakkında ...
 
borilunad :

Bugün ne kadar verimli bir gece geçirdim! Ben uyurken burada bana çok ilginç şeyler verildi, bunun için sana sonsuz minnettarım! Ve sabahlarınız da akşamdan daha akıllı çıktı!

Önerilen her şeyin üstünkörü bir incelemesi, her zaman olduğu gibi, daha fazla soruyu gündeme getiriyor, ancak şimdilik sadece son ifadeyi yalnızca bir Eylem () ile yapmanın mümkün olup olmadığını öğrenmek istiyorum. oldukça geniştir:

Bana öyle geliyor ki bu daha verimli olabilir. Doğru, yalnızca sonuncusunun doğru olması veya ben yanılıyorsam, bu benim için daha iyi olacaksa, tüm koşulların kontrol edilmesini engellemez.

Ne düşünüyorsun?

Hayır, bu şekilde yürümez. İlk olarak, yalnızca noktalı virgül olsa bile (yani boş bir ifade ) if() öğesinden sonra bir şey olmalıdır. İkinci olarak, diğer ifadeniz hangi if'lere atıfta bulunmayı amaçlıyor? Yalnızca ikincisi içinse (yazdığınız gibi), Eylem yalnızca A, B ve C'nin yanlış olması koşuluyla D koşulu doğruysa yürütülür. Mantığı net bir şekilde görebilmeniz için kaşlı ayraçlar kullanmak her zaman iyi bir fikirdir.

 
FAQ :

Teşekkür ederim! Şimdilik DLL'leri ve diğer şeyleri kullanmaktan kaçınıyorum.

Bu fırsatı Alexey'e (Meat) tüm pozisyonların yeni bir barda açıldığını , ancak M1'de, ancak diğer her şeyin her tikte çalıştığını yanıtlamak için kullanıyorum. Ayrıca birçok gerekli işlevi kullanıyorum (başlangıçta her şeyi her kontrol ettiğimde, kod gerçekten ağır olacaktır). Matematikçi tarafından önerilen üsle değiştirmeye çalışacağım bir MathPow() bile var. Ve böylece, gerekli tüm değişiklikler ve kapanışlar için aramalar. Onsuz nasıl?

 
Siparişlerin kontrolüne ve yeniden hesaplanmasına dikkat edin. Bu, Uzman Danışmanların genellikle en çok sahip olduğu şeydir.
 
alsu :

Hayır, bu şekilde yürümez. İlk olarak, sadece bir noktalı virgül (yani boş bir ifade) olsa bile if() öğesinden sonra bir şey olmalıdır. İkincisi, diğer ifadeniz hangi if'lere atıfta bulunmayı amaçlıyor? Yalnızca ikincisi içinse (yazdığınız gibi), Eylem yalnızca A, B ve C'nin yanlış olması koşuluyla D koşulu doğruysa yürütülür. Mantığı net bir şekilde görebilmeniz için kaşlı ayraçlar kullanmak her zaman iyi bir fikirdir.

Teşekkürler! Ancak yalnızca bir Action(); gereklidir! Ama henüz nasıl bilmiyorum! Bana söyler misin?

 
FAQ :
Siparişlerin kontrolüne ve yeniden hesaplanmasına dikkat edin. Bu, Uzman Danışmanların genellikle en çok sahip olduğu şeydir.
Ama bunlar kaçınılmazdır, aksi takdirde hatalar olacaktır!
 

Programlarımda çok fazla if-s ile böyle bir yapı kullanıyorum, ilk etapta diğerlerinden daha sık false verecek koşulları koyuyorum:

 if (A>B)
{   if (C>= 10 )
   {   if (D<= 5 )
      {   if (E= 1 )
         Action:
      }
   }
}
Ve eğer gerçekten çok fazla if-s kontrol etmeniz gerekiyorsa, bunun gibi bir şey:
 if (A>B || N<M)
{   if (C>= 10 || P< 100 )
   {   if (D<= 5 || R> 1 )
      {   if (E= 1 || S!= 0 )
         Action:
      }
   }
}
Neden: