Mql4 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 30

 
Nauris Zukas :

Merhaba!
Bir "for" döngüsünde "double" kullanmanın doğru yolu nedir? Yardımda, "çift" kullanımına ilişkin bir yasak yok gibi görünüyor.

Kısacası, sonuçlarım, her yinelemeden sonra Expression3'ü normalleştirme eksikliğinden dolayı " for " döngüsünde "double" kullanılması önerilmez. Bu en az 2 soruna yol açabilir:
1) Doğru sayıda yineleme değil;
2) Operatördeki hesaplamalar için İfade3 kullanılırsa yanlış sonuçlar.

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
. Все повторяется, пока выражение2 не станет ложным. Если оно ложно, цикл заканчивается и управление передается следующему оператору. ВыражениеЗ вычисляется после каждой итерации. могут отсутствовать, однако разделяющие их точки с запятыми (;) опускать нельзя. Если опущено...
 
Nauris Zukas :

Teşekkürler, bunun neden olduğunu anlıyorum, bu yüzden normalleştirmeye çalıştım. başaramadım. Alexey Viktorov, varyant da durumu düzeltmedi, değerler normalleşmedi. Öyleyse soru devam ediyor, bir döngüde "çift" kullanılabilir ve her zaman doğru yineleme sayısını alabilir mi?

tam sayıları elde etmek için istenen kuvveti 10 ile çarpın. İlk başta ben de acı çektim, Bekle, fiyatı bir tamsayıya bile getiriyorum ve tamsayılarla veya tamsayılara yuvarlama (yuvarlak) ile çalışıyorum. Daha az hata, daha iyi okunabilirlik.

Genel olarak, bir programcının borsadan raporlar aldıktan sonra söylediği gibi, belirli bir kapasitedeki sayıların neden tam sayılarla değil de gerçek sayılarla temsil edildiğini anlamıyorum. Bu mantıksal olarak doğru değil.

 
Valeriy Yastremskiy :

tam sayıları elde etmek için istenen kuvveti 10 ile çarpın. İlk başta ben de acı çektim, Bekle, fiyatı bir tamsayıya bile getiriyorum ve tamsayılarla veya tamsayılara yuvarlama (yuvarlak) ile çalışıyorum. Daha az hata, daha iyi okunabilirlik.

Genel olarak, bir programcının borsadan raporlar aldıktan sonra söylediği gibi, belirli bir kapasitedeki sayıların neden tam sayılarla değil de gerçek sayılarla temsil edildiğini anlamıyorum. Bu mantıksal olarak doğru değil.

Teşekkürler, int'yi eski moda bir şekilde kullanacağım ve sonra ikiye böleceğim. ;)

 
Nauris Zukas :

Teşekkürler, ancak örneğiniz de doğru sonucu vermedi. Printf'de normalleşmenin gerçekleşmediğini görebilirsiniz:

Üzgünüm, kontrol etmeliydim. Ve böylece “En iyisini istedim ama her zamanki gibi çıktı” çıktı.

Sonuç

 2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 1.0 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 1.2 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 1.4 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 1.6 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 1.8 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 2.0 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 2.2 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 2.4 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 2.6 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       i: 2.8 step: 0.2
2020.05 . 29 14 : 26 : 33.855 ! 00 (GBPUSD.m,M15)       MaxPass: 10 count: 10 i: 3.0

Doğru kod

 /********************Script program start function*******************/
double expr1= 1.0 ;
double expr2= 2.8 ;
double step= 0.2 ;
double i;
int count= 0 ;
void OnStart ()
 {
   for (i=expr1; i<=expr2; i= NormalizeDouble (i+step, 1 ) )
   {
    count++;
     Print ( " i: " , DoubleToString (i, 1 ), " step: " , DoubleToString (step, 1 ));
   }
   int MaxPass=( int ) NormalizeDouble (((expr2-expr1)/step), 0 )+ 1 ;
   Print ( " MaxPass: " , MaxPass, " count: " , count, " i: " , i);
 } /*******************************************************************/
 
Alexey Viktorov :

Doğru kod

step=0,04 olarak ayarlamamaya dikkat edin;)

 
Andrey Khatimlianskii :

step=0,04 olarak ayarlamamaya dikkat edin;)

Bu tavsiye sadece beynini kullanmayı bilmeyenler içindir.)))

 
Alexey Viktorov :

Üzgünüm, kontrol etmeliydim. Ve böylece “En iyisini istedim ama her zamanki gibi çıktı” çıktı.

Sonuç

Doğru kod

 i= NormalizeDouble (i+step, 1 )

Ah teşekkürler! Kendim düşünmedim. Bunlar sadece programlamada yeni başlayanlara yardımcı olan incelikler! ;)

 
Bir dizi yapıyı sıralamak için yöntemler arıyorum . Herhangi bir çalışma seçeneği olan var mı?
 
Vladimir Pastushak :
Bir dizi yapıyı sıralamak için yöntemler arıyorum . Herhangi bir çalışma seçeneği olan var mı?

https://www.mql5.com/en/forum/170952/page134#comment_11532251

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2019.04.19
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
fxsaber :

https://www.mql5.com/en/forum/170952/page134#comment_11532251

Çalışmıyor...