Fiyat != Fiyat ? - sayfa 3

 
WHRoeder :
Basit çözüm yerine çok sayıda hesaplamada
Basit olup olmadığı, içinde uygulanması gereken kodla belirlenir. . .
 
RaptorUK :

Double'ları karşılaştırmak amacıyla double'ları int'lere dönüştüren bu çözüme ulaştım. . .

Ben de (şimdiye kadar) fiyatları karşılaştırmak için işe yarayan yaratıcı bir çözüm buldum:

 int ConvertToPoints ( double _price) {
   double price_double = _price / Point ;
   int price_int = MathRound (price_double);
      
   return (price_int);
}

Fiyatı, tam sayı olarak ifade edilen noktalar olarak fiyatı temsil eden bir int değerine yükseltirim. Böylece:

ConvertToPoints(price) != ConvertToPoints(price)

asla doğru olamaz.

 
stdlib.mq4'teki CompareDoubles() bu tartışmadan diskalifiye edildi mi? Fiyat için kullanılırsa benim için iyi çalışıyor.
 
Ovo :
stdlib.mq4'teki CompareDoubles() bu tartışmadan diskalifiye edildi mi? Fiyat için kullanılırsa benim için iyi çalışıyor.
Diskalifiye mi? hayır, ama tek yaptığı eşitlik için bir karşılaştırma.
 
Thirteen :
ConvertToPoints(price) != ConvertToPoints(price)

Kayan bölme, kayan toplama, int'ye dönüştürme, işlev çağrısı (kopyala, atla, dönüş = 3,) * 2 her zaman iki. (18) Ve bu, böl ve dönüştür'ün diğer işlemlerle eşit olduğunu varsayıyor - değiller.

vs

 if ( MathAbs (a - b) > Point / 2 .)

bir çıkarma, bir test, 1/2 olumsuzlama (ortalama) ve karşılaştırma. (başlangıçta nokta/2 yapılırsa ve ABS bir IF ile değiştirilirse 1/2)

İşleri fazla karmaşıklaştırma

Yuvarlama nedeniyle eşit olduğunda tetiklenebilir
 if (a > b)
a kesinlikle b'den büyüktür
 if (a - b > Point / 2 .)
Yuvarlama nedeniyle a, b'den küçük olduğunda tetiklenebilir
 if (a >= b)
a kesinlikle >= b'dir
 if (a - b > - Point / 2 .)
if (a > b - Point / 2 .)
if (a + Point / 2 . > b)
Herhangi bir yuvarlama hatasında tetiklenir
 if (a != b)
kesinlikle eşit değil
 if ( MathAbs (a - b) > Point / 2 .)
 
WHRoeder :

Kayan bölme, kayan toplama, int'ye dönüştürme, işlev çağrısı (kopyala, atla, dönüş = 3,) * 2 her zaman iki. (18) Ve bu, böl ve dönüştür'ün diğer işlemlerle eşit olduğunu varsayıyor - değiller.

vs

bir çıkarma, bir test, 1/2 olumsuzlama (ortalama) ve karşılaştırma. (başlangıçta nokta/2 yapılırsa ve ABS bir IF ile değiştirilirse 1/2)

İşleri fazla karmaşık hale getirme

2013.04.03 17:39:12 TestSpeed-CompareDbls USDJPY,M5: MathAbs(a - b) 266 ms'de 9000000 kez.


2013.04.03 17:39:11 TestSpeed-CompareDbls USDJPY,M5: 1887 ms'de 9000000 kez ConvertToPoints.

2013.04.03 17:46:02 TestSpeed-CompareDbls USDJPY,M5: Düz(fiyat) 3604 ms'de 9000000 kez.

"MathAbs(ab)" yöntemi, ConvertToPoints() yönteminden yaklaşık 7 kat ve benim "Flat()" yöntemimden neredeyse 14 kat daha hızlıdır

 
Bilgi için, MQL5 ile standart operatörleri aşırı yükleyebilirsiniz, bu çok şık çözümler uygulanmasına izin verir .
 
Test ettim (intRecord > fiyat/puan) ve
      intCheck = price /point;
       if (intRecord > intCheck) continue ;

2013.04.04 14:27:38 TestSpeed-CompareDbls EURUSD,H4: MathAbs(a - b) HalfAPPoint 99999999 kez 3403 ms'de.

2013.04.04 14:27:42 TestSpeed-CompareDbls EURUSD,H4: (intRecord > intCheck) 2505 ms'de 999999999 kez.

2013.04.04 14:27:40 TestSpeed-CompareDbls EURUSD,H4: intRecord > fiyat/nokta 1712 ms'de 999999999 kez.

Ancak 3'üncü pratik olamaz ve 2'nci olan (intRecord > intCheck) karşılaştırmadan önce intCheck için 1 atama daha içeriyordu.


 
rfb :
Test ettim (intRecord > fiyat/puan) ve

2013.04.04 14:27:38 TestSpeed-CompareDbls EURUSD,H4: MathAbs(a - b) HalfAPPoint 99999999 kez 3403 ms'de.

2013.04.04 14:27:42 TestSpeed-CompareDbls EURUSD,H4: (intRecord > intCheck) 2505 ms'de 999999999 kez.

2013.04.04 14:27:40 TestSpeed-CompareDbls EURUSD,H4: intRecord > fiyat/nokta 1712 ms'de 999999999 kez.

Ancak 3'üncü pratik olamaz ve 2'nci olan (intRecord > intCheck) karşılaştırmadan önce intCheck için 1 atama daha içeriyordu.


intRecord nedir?
 
"int intCheck" ile aynı, ancak diğer değişkenler gibi işlevden önce atanan değer.