MQL4 belgelerinin tartışılması - sayfa 16

 
Yurixx :

Ve çiftin normalleştirilmesi gerektiğinde açık bir ifade için minnettar olacağım.

Aynen, burada bariz yanlış anlaşılmalar var. Bu işlevin yardımında, bu işlevin kesinlikle işe yaramaz olduğu bir örnek var:

çift NormalizeÇift( çift değer, int basamak)
Kayan nokta değerini verilen kesinliğe yuvarlar. Double tipinin normalleştirilmiş değerini döndürür.
Hesaplanan StopLoss ve TakeProfit değerlerinin yanı sıra bekleyen emirlerin açık fiyatı, değeri önceden tanımlanmış Digits değişkeninde saklanan bir hassasiyetle normalleştirilmelidir.
parametreler:
değer - kayan nokta değeri.
rakamlar - Kesinlik biçimi, ondalık noktadan sonraki basamak sayısı (0-8).
örneklem:
 çift var1 = 0.123456789;
  Print(DoubleToStr(NormalizeDouble(var1,5),5));
  // çıktı: 0.12346

Bu çifte dönüşüm ilk gördüğümde kafamı çok karıştırdı. Aslında, Log'da Expert Advisor'ları görüntülerken, sadece

 Yazdır( DoubleToStr(var1, 5));
Muhtemelen, bir tür ticaret işlevine sahip bir örnek, çok daha bilgilendirici olacaktır, yani. tam olarak normalleşmenin gerçekten gerekli olduğu yer. Burada, stdlib.mq4'teki CompareDoubles() işlevine sahip bir örnek de çok bilgilendirici olacaktır (yeni başlayanların neredeyse her zaman üzerine bastığı bir komisyon):

// Функция корректного сравнения двух переменных типа double из библиотеки stdlib.mq4
bool CompareDoubles ( double number1 , double number2 )
{
   if ( NormalizeDouble ( number1 - number2 , 8 ) == 0 ) return ( true ) ;
   else return ( false ) ; 
}
Renat , neden bir seçenek olmasın?
 
Madem böyle bir içki gitti, uzun zamandır ıstırap çektiğim sorumu sormak istiyorum. İşte bir örnek kod:
 int start ()
  {
   double haOpen , haHigh , haLow , haClose ;
   if ( Bars <= 10 ) return ( 0 ) ;
   ExtCountedBars = IndicatorCounted () ;
//---- check for possible errors
   if ( ExtCountedBars < 0 ) return ( - 1 ) ;
İlk dönüş (0) ile ikinci dönüş (-1) arasındaki temel fark nedir?
Bu, göstergenin (veya Uzman Danışmanın) yürütülmesini nasıl etkiler?
Negatif bir değer döndürüldüğünde ne olur?
Ve şöyle bir şey yazabilir miyim:
 void start ()
{
  //
  //...
  //
  return ;
}
 
Temel bir fark yoktur, bu nedenle döndürülen değer terminal tarafından (şu anda) analiz edilmez. Aslında, bu, programcının, bu durumda start () işlevinin standart olmayan bir sonlandırmasının (değer eksi 1) olduğunu anlamasına yardımcı olan bir gösterim stilidir.
 
PSmith :
Ve şöyle bir şey yazabilir miyim:
 void start ()
{
  //
  //...
  //
  return ;
}

Örneğin, son zamanlarda yazdığım şey tam olarak bu. :) Üstelik son dönüşü hiç kullanmıyorum bile. Görünüşe göre belgelerde bir yerde bile , void türünün işlevlerinde son dönüşün gerekli olmadığı görülüyor.
 
Ve işte başka bir soru: neden fonksiyon
çift iVolume ( string sembolü, int zaman çerçevesi, int shift)
double türünde bir değer döndürür?
 
Başlangıçta çift değildi, ancak bir noktada int tipinin hacimleri depolamak için her zaman uygun olmadığı ortaya çıktı (örneğin, çok değişken bir enstrüman için aylık bir zaman çerçevesi alın). Bu durumda taşma hatası almak zor değildir.
 

Belgelerden (Veri türleri): Tamsayı sabitleri -2147483648 ile 2147483647 arasında değerler alabilir. Temmuz 2002, EURUSD: Tarihte aylık maksimum tik sayısı, 670000. Bu maksimum tik hacmiyle bile taşması 3000 ay sürer 250 yıl. Öte yandan, hacimler daha da büyüyebilir, yani rakam teorik olarak o kadar da ulaşılmaz değil...

 
Mathemat :

Belgelerden (Veri türleri): Tamsayı sabitleri -2147483648 ile 2147483647 arasında değerler alabilir. Temmuz 2002, EURUSD: Tarihte aylık maksimum tıklama sayısı, 670000 250 yıl. Öte yandan, hacimler daha da büyüyebilir, dolayısıyla rakam teorik olarak o kadar da ulaşılmaz değil...


Ben de aynı soruyu sordum ve tam olarak aynı cevabı aldım. İnanması zor olsa da. Ama borsadan kotaları MT4'e koyarsanız...
 
_DJI tarafından aynı ay - 42228720! Evet...
 

Rosh , sessizliğinizi doğru anladıysam, hangi durumlarda ve hangi ifadeler / değişkenler için normalleştirmeye ihtiyaç duyulduğu net bir formülasyon yoktur. Eğer öyleyse, daha basit bir soruyu cevaplamak mümkün olabilir: formun hesaplanan değerlerini normalleştirmek gerekli mi?

int StLS=25;
double prc = Sor + StLs*Puan;

Yoksa bir deneyde kendi başıma mı çözmeliyim?