"Daha İyi Bir Programcı Nasıl Olunur? (1. Bölüm): Başarılı bir MQL5 programcısı olmak için bu 5 şeyi yapmayı bırakmalısınız" makalesi için tartışma - sayfa 2

 

Güzel makale. Ne yapmalı ve ne yapmamalı kavramı iyi açıklanmış.

Bu durumda belirli örneklerdeki hatalar makalenin değerini azaltmaz, çünkü görevi insanların çalışma tarzlarını optimize etmelerine yardımcı olmaktır. Bu görev zekice çözülmüş, her şey olabildiğince basit ve açık bir şekilde yazılmış.

Teşekkürler, Omega!

 
fxsaber #:

  • Döngüdeki değişkenin ilk değeri yanlıştır.
  • Bir if yerine iki if vardır.
  • string karşılaştırması (karakter) en sonda gelmelidir.
  • bool ifadeleri parantez içine alınmamış.
  • Giriş fonksiyonlarında sihirli değişken eksik.
  • Pozisyon nesnesi oluşturulmadı.
Hatayı ilk kez yayınlanana kadar görmedim çünkü meta editörde kodlamadım, sadece yazarken kodladım, ancak bu büyük bir sorun değil çünkü bu arada, kullanılan tüm kodlama örnekleri yalnızca şunları belirtmeliydi
 

İlginç.

fxsaber #:

  • Döngüdeki ilk değişken değeri yanlıştır.
  • Bir if yerine iki if vardır.
  • string-comparison (sembol) en sonda olmalıdır.
  • bool-ifadeleri parantez ile işaretlenmemiş.
  • Giriş fonksiyonlarında sihirli değişken eksik.
  • Konum nesnesi oluşturulmamıştır.

İyi bir programcı olmak (bölüm 1): daha iyi bir MQL5 programcısı olmak için beş alışkanlıktan kurtulmak

 
Aliaksandr Hryshyn #:

İlginç....


:)
 
Aliaksandr Hryshyn #:

İlginç.

İyi bir programcı olmak (bölüm 1): daha iyi bir MQL5 programcısı olmak için beş alışkanlıktan kurtulmak

Bu serbest çalışma, müşteriler çoğu zaman kodu hiç anlamıyor ve kötü yorumlar kodun kalitesi için değil. Ben yazdım, program kâr etmedi, bu yüzden işte inceleme.

 

Herkes için okunması gereken (ve makalenin yazarının daha da çok) : Her Programcının Bilmesi Gereken 97 Şey

GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
  • github.com
Pearls of wisdom for programmers collected from leading practitioners. - GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitio...
 
Kaynak:
int CountPosByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal(); i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
            { 
                counter++; 
            }
   return counter;
  }

Varyant daha hızlı ve bence daha net çalışıyor:

int PositionsByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal()-1; i>=0; i--)
   {
      if(!m_position.SelectByIndex(i))
         return (INVALID_HANDLE);

      if(m_position.PositionType()!=type ||
         m_position.Magic()!=MagicNumber ||
         m_position.Symbol()!=Symbol())
         continue;

      counter++; 
   }
   return counter;
  }

1. Döngü başlatmadaki hata, geri izleme yaptığımızda 1'in miktardan çıkarılması gerektiğidir.

2. Kütüphane fonksiyonundan indekse göre pozisyonu alamadıysanız, döngüden bir hata ile çıkmanız ve ardından fonksiyonu tekrar işlemeniz veya tekrarlamanız gerekiyorsa, aksi takdirde güvenilir olmayan bir miktar alma riski vardır ve hala finansla çalışıyorsunuz ve bazen pozisyonda büyük miktarlar var ve bu kadar küçük bir şey bir kayba yol açabilir.

3. Önce bool değişkenlerini, sonra ENUM numaralandırmalarını kontrol etmeli ve ancak bundan sonra int, double, string'i kontrol etmelisiniz, kontrol başarısız olursa, hemen döngünün bir sonraki öğesine gidin.

Karşılaştırma işlemlerini && ile yaparsanız, program her koşulu mutlaka kontrol edecektir.

4. Fonksiyonun adı da önemlidir, PositionsByType daha iyi görünüyor, önemsiz gibi görünüyor, ancak bu fonksiyonu kullanmaya gittiğinizde kütüphaneye ve içindekiler tablosuna gitmenize gerek yok, sadece standart adı Positions yazmaya başlayın ve PositionsTotal, PositionsByType..... çağırmak için birkaç seçeneğiniz olacak

5. Yatay kaydırma kullanmamak için kodun genişliğine saygı göstermeniz gerekir, çünkü bu okunabilirliği ve geliştirme hızını büyük ölçüde azaltır.


 
Bu konuda yanılıyorsunuz:
"Karşılaştırma işlemlerini && ile yaparsanız, program her koşulu mutlaka kontrol edecektir.".
Karşılaştırma, ilk yanlışa kadar sırayla gerçekleştirilir.
Bu arada, bu tür durumlarda koşulun yerine getirilmeme olasılığını da hesaba katabilirsiniz.

 
Aliaksandr Hryshyn #:
Bu konuda yanılıyorsunuz:
"Karşılaştırma işlemlerini && ile yaparsanız, program her koşulu mutlaka kontrol edecektir.".
Karşılaştırma ilk yanlışa kadar sırayla yapılır.
Bu arada, bu tür durumlarda koşulun yerine getirilmeme olasılığını da hesaba katabilirsiniz.

Evet, beni doğru düzeltmişsiniz, kontrol ilk yanlışa kadar yapılacak, asıl önemli olan küçük veri türlerinin önce olması gerektiğidir.

Koşulların fonksiyonlardan oluşması durumunda, en küçük olanı ilk ve tüketilen kaynaklar açısından en büyük olana kadar olmalıdır, ancak program mantığını bozmadan ...

Bu tekniği tüm projelerimde kullanıyorum, hız kazancı optimizasyon modundaki bir test uzmanı için fark edilebilir.

 
Vitaly Muzichenko #:

Bu serbest çalışma, müşteriler çoğu zaman kodu hiç anlamıyor ve kötü yorumlar kodun kalitesi için değil. Siz yazdınız, program size kar sağlamadı, inceleme budur.

Müşteriye bunu önceden söylüyor musunuz, yoksa para daha mı önemli?