mt5 strateji test keneleri - sayfa 9

 
WhooDoo22 :

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 ?
Can price != price ? - MQL4 forum
  • www.mql5.com
Can price != price ? - MQL4 forum
 
RaptorUK :
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

 
WhooDoo22 :

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 çiftleri karşılaştıramadığınızı anlamaktır.
 
RaptorUK :
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

 
WhooDoo22 :

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

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 .
Double-precision floating-point format - Wikipedia, the free encyclopedia
Double-precision floating-point format - Wikipedia, the free encyclopedia
  • en.wikipedia.org
Double-precision floating-point format is a computer number format that occupies 8 bytes (64 bits) in computer memory and represents a wide dynamic range of values by using floating point. Computers with 32-bit storage locations use two memory locations to store a 64-bit double-precision number (a single storage location can hold a...
 
WhooDoo22 :

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ı .

Articles - Understanding Floating Point Number Representation - Cprogramming.com
Articles - Understanding Floating Point Number Representation - Cprogramming.com
  • www.cprogramming.com
Floating point representations vary from machine to machine, as I've implied. Fortunately one is by far the most common these days: the IEEE-754 standard. This standard is prevalent enough that it's worthwhile to look at it in depth; chances are good you'd be able to use this information on your platform (look for ieee754.h). An IEEE-754...
 
angevoyageur :
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

Double-precision floating-point format - Wikipedia, the free encyclopedia
Double-precision floating-point format - Wikipedia, the free encyclopedia
  • en.wikipedia.org
Double-precision floating-point format is a computer number format that occupies 8 bytes (64 bits) in computer memory and represents a wide dynamic range of values by using floating point. Computers with 32-bit storage locations use two memory locations to store a 64-bit double-precision number (a single storage location can hold a...
 
WhooDoo22 :


"Buraya ayrıntılı açıklama girmiyorum"

Neden? Ayrıntılı bir açıklama yazmak istiyorsanız, elbette yapın.


Düzgün kod yazabilmek istiyorsanız bilmeniz gereken temel temel şeyler hakkında yaptığımız bir tartışmayı hatırlıyor musunuz? kayan nokta sayıları bunlardan biridir. . . DYOR , orada bir sürü bilgi var, bulun, okuyun, anlayın, o zaman biraz daha iyi kodlayabileceksiniz.
DYOR
DYOR
  • acronyms.thefreedictionary.com
What does DYOR stand for?
 
WhooDoo22 :

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.

 
RaptorUK :

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