![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Merhaba MQL5 topluluğu,
Test cihazında stratejiler çalıştırırken bunun gibi sayılarla başka biri karşılaştı mı? -1.000000000006551e-005 ve 1.000000000006551e-005 (evet, bu on bir sıfır). Belirli bir çift biçim türü olmalı ama hangi çift biçim türü, hmm?
Ayrıca, evet, tamam, tamam, standart int veri türünün minimum değeri -2 147 483 648 ve maksimum değeri 2 147 483 647 gibi MQL5 belgelerini okuyorum, ardından evet, elbette imzasız int veri türü var min değeri 0 ve maksimum değeri 4 294 967 295 ANCAK ;) min değeri eksi -4 294 967 295 ve maksimum değeri 0 olan bir int veri türü yok. Bir int olacağını düşünmüştüm bu minimum ve maksimum değerlere sahip veri türü, ancak neyse o. Önceki ifade, ek veri türleri için de geçerli olabilir.
Teşekkür ederim
0.00001 aynıdır ve 1 e-5 bir üs biçimidir. Sondaki ekstra rakamlar, 6551, 0.00000000000000006551'e eşdeğerdir ve bu yüzden çiftleri karşılaştırmakta sorun yaşıyoruz. . . bunu okumalı ve gerekirse biraz araştırma yapmalısın, böylece neler olduğunu anlarsın: Can fiyat != fiyat ?
Simon,
Çok minnettarım, konuyu okuyorum ve ilgili mql4 iş parçacığı posterlerinin ikili karşılaştırma için genel çözümünün, doğru değerleri döndürmek için bu çiftleri uygun şekilde yuvarlamak için bir yöntem keşfetmek ve kullanmak olduğuna inanıyorum. Buna ne dersin?
Teşekkür ederim
Simon,
Çok minnettarım, konuyu okuyorum ve ilgili mql4 iş parçacığı posterlerinin ikili karşılaştırma için genel çözümünün, doğru değerleri döndürmek için bu çiftleri uygun şekilde yuvarlamak için bir yöntem keşfetmek ve kullanmak olduğuna inanıyorum. Buna ne dersin?
Teşekkür ederim
Yukarıdaki yazınız bağlamında, çiftlerin karşılaştırmaları önemli değildir, önemli olan neden sadece çiftleri karşılaştıramadığınızı anlamaktır.
Niye ya? Çünkü fiyat değerlerinin dört ve beş basamaklı bir biçimde döndürüldüğünü düşünüyorum (iki ve üç basamaklı fiyat değerlerini döndüren USDJPY gibi istisnalar dışında). Bunu bir kez ve herkes için yıkmaya çalışacağım çünkü bunu gereğinden fazla uzatmak istemiyorum.
USDCHF'nin teklif fiyatı şu anda 0.92909'dur ve en uzak MetaTrader5'in bu fiyat değerlerini hesapladığına inanıyorum, ondalık basamağın sağında on altı basamaktır, eğer durum buysa, USDCHF'nin 0.92909 000000000000 fiyatının hesaplamalarına son basamak dokuzdan sonra atılan on bir basamak vardır. . Bence çiftlerin basitçe karşılaştırılamamasının nedeni, fiyatın ondalık basamağının sağındaki diğer yerlerin (terminalde okunabilenler değil, terminalde okunamayanlar) eşitsizlik sorunlarına neden olmasıdır.
Teşekkür ederim
Niye ya? Çünkü fiyat değerlerinin dört ve beş basamaklı bir biçimde döndürüldüğünü düşünüyorum (iki ve üç basamaklı fiyat değerlerini döndüren USDJPY gibi istisnalar dışında). Bunu bir kez ve herkes için yıkmaya çalışacağım çünkü bunu gereğinden fazla uzatmak istemiyorum.
USDCHF'nin teklif fiyatı şu anda 0.92909 ve en uzak MetaTrader5'in bu fiyat değerlerini hesapladığına inanıyorum, ondalık basamağın sağında on altı basamaktır, bu durumda, dokuzun son basamağından sonra on bir basamak USDCHF'nin 0.92909 fiyatının hesaplamalarına atılır. 00000000000 . Bence çiftlerin basitçe karşılaştırılamamasının nedeni, fiyatın ondalık basamağının sağındaki diğer yerlerin (terminalde okunabilenler değil, terminalde okunamayanlar) bir eşitsizlik sorununa neden olmasıdır.
Teşekkür ederim
Niye ya?
Linkini verdiğim konunun ilk sayfasında hepsi açıklanmış aslında; 1.57373 değeri aslında 1.5737300000000001'in çift değeri olarak tutulabilirken NormalizeDouble(1.57373, 5) çift 1.5737299999999999 değeri üretebilir, her iki değer de en yakın 5. basamağa yuvarlanır, ancak doğrudan karşılaştırılan değerler eşittir . . . double değerleri bu şekilde saklanır, bunlar kayan nokta sayılarıdır (kayan nokta sayılarına bakın, okuyun ve anlayın) ve genellikle tutulan değer, tutulduğunu düşündüğünüz değerle tam olarak aynı değildir.
Yani yorumunuz iki double'ın çıkarılmasını gösteriyor ve farkı 1.0000000000xyz -e5 olarak görüyorsunuz, çünkü double bu şekilde saklanıyor - kayan nokta sayıları .
Double ile ilgili sorun ikili gösterimlerinden kaynaklanmaktadır. Tam bir ikili gösterimi olmayan çift vardır, bu nedenle 1.000000000006551e-005 gibi şeyler elde edersiniz. Buraya ayrıntılı açıklamalara girmiyorum, ilgilenirseniz örneğin bunu okuyabilirsiniz .
1.000000000006551e-005'in ondalık basamağın sağındaki on altıncı basamağı e-005'tir.
1.000000000006551e-005'in tam bir ikili gösterimi olmadığını mı söylüyorsunuz, çünkü ondalık sayının sağındaki on altıncı hanesi bir tamsayı değil, e-005'i mi?
"Buraya ayrıntılı açıklamalarla girmiyorum"
Neden? Ayrıntılı bir açıklama yazmak istiyorsanız, elbette yapın.
"İlgileniyorsanız, örneğin bunu okuyabilirsiniz ."
Onu okumaya başladım.
Teşekkür ederim
"Buraya ayrıntılı açıklama girmiyorum"
Neden? Ayrıntılı bir açıklama yazmak istiyorsanız, elbette yapın.
1.000000000006551e-005'in ondalık basamağın sağındaki on altıncı basamağı e-005'tir.
1.000000000006551e-005'in tam bir ikili gösterimi olmadığını mı söylüyorsunuz, çünkü ondalık sayının sağındaki on altıncı hanesi bir tamsayı değil, e-005'i mi?
Hayır. Eğer benim linkimi ve/veya RaptorUK linkini okursanız, bu sizin için daha net olacaktır. Değilse, tekrar okuyun :-D
1.000000000006551e-005, 0.00001000000000006551 için başka bir gösterimdir.
Linkini verdiğim konunun ilk sayfasında hepsi açıklanmış aslında; 1.57373 değeri aslında 1.5737300000000001'in çift değeri olarak tutulabilirken NormalizeDouble(1.57373, 5) çift 1.5737299999999999 değeri üretebilir, her iki değer de en yakın 5. basamağa yuvarlanır, ancak doğrudan karşılaştırılan değerler eşittir . . . double değerleri bu şekilde saklanır, bunlar kayan nokta sayılarıdır (kayan nokta sayılarına bakın, okuyun ve anlayın) ve genellikle tutulan değer, tutulduğunu düşündüğünüz değerle tam olarak aynı değildir.
Yani yorumunuz iki double'ın çıkarılmasını gösteriyor ve farkı 1.0000000000xyz -e5 olarak görüyorsunuz, bunun nedeni double'ların bu şekilde saklanmasıdır - kayan nokta sayıları .
1.57373 (yoksay)
1.5737300000000001
1.57372999999999999
"en yakın 5. basamağa yuvarlanmış her iki değer de eşittir"
En yakın 5'e yuvarlanan her iki değer de 1.57373'e eşittir.
"ama doğrudan karşılaştırılan eşit değildir"
Evet, çünkü bir fark var.
"çift değerler bu şekilde saklanır"
1.5737300000000001 gibi çift değerler 1.57373 olarak saklanır (eğer normalize double kullanılırsa varsayıyorum). Çifte normalleştirme kullanılmazsa, çift değeri 1.5737300000000001 bu değer biçimini korur, doğru mu?
"ve genellikle tutulan değer, tutulduğunu düşündüğünüz değerle tam olarak aynı değildir."
Son ifadem de bu ifadeye cevap veriyor.
Verdiğiniz linki okuyacağım, teşekkür ederim.
Teşekkür ederim