"Daha İyi Bir Programcı Nasıl Olunur? (2. Bölüm): Başarılı bir MQL5 programcısı olma yolunda şu 5 kötü alışkanlıktan daha kurtulun" makalesi için tartışma

 

Yeni makale Daha İyi Bir Programcı Nasıl Olunur? (2. Bölüm): Başarılı bir MQL5 programcısı olma yolunda şu 5 kötü alışkanlıktan daha kurtulun yayınlandı:

Bu makale, programlama kariyerini geliştirmek isteyen herkesin okuması gereken bir makaledir. Bu makale dizisinin amacı, ne kadar deneyimli olursanız olun, sizi olabileceğiniz en iyi programcı yapmaktır. Makalede açıklanan fikirler hem yeni başlayan hem de profesyonel MQL5 programcıları için işe yarardır.


Bu makale dizisinde MQL5 programlama konusunda daha az deneyime sahip birini tanımlamak için noob kelimesini çok kullanıyorum (buna gücenmeyin). Bu sadece ifade etmemi kolaylaştırıyor. Bu, makalelerin özellikle acemiler veya yeni başlayanlar için olduğu anlamına gelmiyor. Tabi ki değil! Bu makale dizisi, sahip olduğunuz programlama deneyiminden bağımsız olarak herkese yöneliktir, çünkü sizi noob yapan ya da yapmayan şey kodlama yaptığınız yıl sayısı değil, alışkanlıklarınız ve davranışlarınızdır.

noob vs profesyonel kodlayıcı 


İlk makaleyi okumayanlar için işte burada. Bu makalede de noobları profesyonellere dönüştürme görevime devam ediyorum.

Yazar: Omega J Msigwa

 
Yazınız için teşekkürler...
 

Merhaba arkadaşlar,

Ben bir acemiyim. Çok fazla programlama deneyimim var ancak MQL5'te kod yazmaya yeni başlıyorum - bu benim C++'a benzer ilk dilim. Referans dokümanları okudum ancak hatamı bulamadım - expoMA'dan döndürülmesini beklediğim değer grafiğime 0.0 olarak yazdırılıyor/yorumlanıyor - bir tür sözdizimi hatası mı yapıyorum? Derlerken herhangi bir sorun/hata almıyorum. Herhangi bir girdiniz harika olurdu

void OnTick(
  {   
   int days = 3; 
   
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
  
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   double movingAverageValues[];
   
   double bidAskAverage = (Ask + Bid)/2;
   
   int exponentialMovingAverage = iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE);
      
   ArraySetAsSeries(movingAverageValues,true);
   
   CopyBuffer(exponentialMovingAverage,0,0,3,movingAverageValues);

   double alpha = expoMA(days);
   
   double dEMA = bidAskAverage - movingAverageValues[1]; // indeks 1 burada t - 1 değerinin EMA'sını temsil eder
      
   Comment("The ask price is: " +     DoubleToString(Ask,5) + "\n"
           "The bid price is: " + DoubleToString(Bid,5) + "\n" 
           "The average price is: " + DoubleToString(bidAskAverage,5) + "\n"
           "The custom expoMA value is: " + DoubleToString(alpha,5) + "\n"
           "The dEMA value is: " + DoubleToString(dEMA,5)) ;   
   }

double expoMA(int days=2)
   {   
    double alpha = 2 / (days + 1);   
    NormalizeDouble(alpha,5);
    return(alpha);
   }
 
spinner461:

Merhaba arkadaşlar,

Ben bir acemiyim. Çok fazla programlama deneyimim var ancak MQL5'te kod yazmaya yeni başlıyorum - bu benim C++'a benzer ilk dilim. Referans dokümanları okudum ancak hatamı bulamadım - expoMA'dan döndürülmesini beklediğim değer grafiğime 0.0 olarak yazdırılıyor/yorumlanıyor - bir tür sözdizimi hatası mı yapıyorum? Derlerken herhangi bir sorun/hata almıyorum. Her türlü katkınız harika olacaktır

double expoMA(int days=2)
   {   
    double alpha = 2.0 / (days + 1);

    //...
   }

2/4'ü tam sayılara (0) bölüyorsunuz ve sonra bu bir double'a ayrıştırılıyor. Bunun yerine, bölen veya bölenlerden birinin double olması gerekir (böylece bölme işlemi "en ayrıntılı" veri türünde yapılır)

Diğer seçenekler (günlerin bir int olması) olabilir:

double alpha = double(2) / (days + 1);
double alpha = 2 / (days + 1.0);
double alpha = 2 / double(days + 1);
Bu muhtemelen pitonvari bir hata heheh
 

Manuel Alejandro Cercos Perez:

2/4'ü tam sayılara (0) bölüyorsunuz ve sonra bu bir double'a ayrıştırılıyor. Bunun yerine, bölen veya bölenlerden birinin double olmasını sağlamalısınız (böylece bölme işlemi "en ayrıntılı" veri türünde yapılır)

Diğer seçenekler (günlerin bir int olması) olabilir:

Bu muhtemelen pitonvari bir hata heheh


Hey Manuel,

Çok teşekkürler! Yukarıdaki ipucu bir cazibe gibi çalıştı. Beni kök nedeni bulmak için daha fazla saat harcamaktan kurtardınız.

 
Oh canım, gerçekten şimdi!
 
Sadece mumun başında değil, yeni mum oluşana kadar mum başına sadece 1 ticarete veya açık pozisyona izin veren bir işlevi nasıl yapabilirim. Yeni çubuk işlevi yalnızca yeni mumun başlangıcına izin verir
 
Bir sürü dolandırıcı çanta var
 
MQL5 ise, iMA'yı OnInit'te başlatmalısınız.

Aksi takdirde bunu alınan her tikte yapacaksınız.

Son sorunuz: açık zamanı alın ve
Periyot saniye()/2'ye eklendiğinde periyodun yarısını tamamlamış olursunuz.





 
Dominik Egert:
MQL5 ise, iMA'yı OnInit'te başlatmalısınız.

Aksi takdirde bunu alınan her tikte yapacaksınız.

Son sorunuz: açık zamanı alın ve
Periyot saniye()/2'ye eklediğinizde periyodun yarısını tamamlamış olursunuz.





Kodlama yardımı ile ilgili her soru bağımsız bir konu olarak forumda yayınlanmalıdır
 

Çevirmenlere tebrikler.

İlk makaleden sonra şüphelerim vardı, ancak şimdi yazarın moron programcılara moron olduklarını açıklamak istediğinden eminim. Yazar, alınmayın ama makale sizin için yazılmış. Ayrıca, okuyucularınıza hitap ettiğiniz kibir, çalışmanızı geçersiz kılıyor.