Hatalar, hatalar, sorular - sayfa 1932

 
Комбинатор :

Genel olarak, ondalık türü zarar vermez, kullanışlı bir şeydir.

Evet, MT'nin varlığının en başından beri fiyatlar ile çalışan yazılımda olmaması, en hafif tabirle utanç verici.

not. Şimdi, bir OOP dilinin varlığında, MQ muhtemelen isteyenlerin kendileri için bir sınıf yazabileceğine inanıyor. Ancak o zaman onu basit bir yapıya koyamazsınız - ulong gibi basit bir şeye serileştirmeniz / seri hale getirmeniz gerekir.
 
Slava :

Bu kadar ayrıntılı cevap verdiğiniz için size gerçekten minnettarım. Normalleştirme, ticaret taleplerini oluşturmak için kullanılır.

 // Point = 0.001, Digits = 3
OrderSend ( 8274 * Point );
OrderSend ( NormalizeDouble ( 8274 * Point , Digits ));

Bu örnekte, bu iki OrderSends'te farklı fiyatların gönderildiği ortaya çıkıyor.

Aynı zamanda, bir tam sayının Point ile çarpımının ek gerektirmediğine her zaman inanılıyordu. normalleştirme (örneğin, SL ve TP bu şekilde ayarlanmıştır).

Peki iki satırdan hangisi hataya neden olur?

 
Stanislav Korotky :

Evet, MT'nin varlığının en başından beri fiyatlar ile çalışan yazılımda olmaması, en hafif tabirle utanç verici.

SD'ye kimse yazmamış olamaz
 
fxsaber :

Bu kadar ayrıntılı cevap verdiğiniz için size gerçekten minnettarım. Normalleştirme, ticaret taleplerini oluşturmak için kullanılır.

Bu örnekte, bu iki OrderSends'te farklı fiyatların gönderildiği ortaya çıkıyor.

Aynı zamanda, bir tam sayının Point ile çarpımının ek gerektirmediğine her zaman inanılıyordu. normalleştirme (örneğin, SL ve TP bu şekilde ayarlanmıştır).

Peki iki satırdan hangisi hataya neden olur?

Güzel

 #include <MT4Orders.mqh>

void OnStart ()
{
   const double Num = 8.274 ;
   const double Norm = NormalizeDouble (Num, 3 );  
   
   Print (Num);   // 8.273999999999999
   Print (Norm); // 8.274000000000001
  
   Print (( double ) DoubleToString (Num, 3 ) == Num);     // true - без нормализации все замечательно
   Print (( double ) DoubleToString (Norm, 3 ) == Norm);   // false - а после нормализации полный облом!
  
   OrderSend ( "USDSEK" , OP_BUYLIMIT , 1 , Num, 0 , 0 , 0 );
   OrderSend ( "USDSEK" , OP_BUYLIMIT , 1 , Norm, 0 , 0 , 0 );
}

Sonuç

script Test (EURUSD,M1) loaded successfully
'6185283': buy limit 1.00 USDSEK at 8.27400
'6185283': accepted buy limit 1.00 USDSEK at 8.27400
'6185283': order #158260308 buy limit 1.00 / 1.00 USDSEK at market done in 98.718 ms
'6185283': buy limit 1.00 USDSEK at 8.27400
'6185283': accepted buy limit 1.00 USDSEK at 8.27400
'6185283': order #158260309 buy limit 1.00 / 1.00 USDSEK at market done in 120.328 ms
script Test (EURUSD,M1) removed

Her iki talep de farklı fiyatlarla, ancak aynı fiyata sorunsuz tamamlandı. Nasıl yani?

 
fxsaber :

Güzel

Sonuç

Her iki talep de farklı fiyatlarla, ancak aynı fiyata sorunsuz tamamlandı. Nasıl yani?

Çok basit - çift bakış açısından - bu sayılar aynıdır, çünkü çiftler 52 bit mantis veya 15 ondalık basamak depolar. Sonraki basamaklardaki artı veya eksi farkları sayılmaz. İşte Habre ile ilgili bir makale .

 
Stanislav Korotky :

Çok basit - çift bakış açısından - bu sayılar aynıdır, çünkü çiftler 52 bit mantis veya 15 ondalık basamak depolar. Sonraki basamaklardaki artı veya eksi farkları sayılmaz. İşte Habre ile ilgili bir makale .

 void OnStart ()
{
   const double Num = 8.274 ;
   const double Norm = NormalizeDouble (Num, 3 );
  
   Print (( string )(Norm - Num)); // 1.77635683940025e-15
}
 

fxsaber , 2017.07.19 13:00

 void OnStart ()
{
   const double Num = 8.274 ;
   const double Norm = NormalizeDouble (Num, 3 );
  
   Print (( string )(Norm - Num)); // 1.77635683940025e -15
}

VE?

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2017.07.17 21:49

Tek bir çalıştırma sırasında "Durdur"a tıklarsanız OnDeinit ve yıkıcılar çağrılmaz.

Bu bir hata mı yoksa bir hata mı?

Şimdi, "Durdur" düğmesine tıkladığınızda, Aracı ile kesin bir bağlantı kesilir. O kadar zor ki, tek bir çalışmanın tamamlanmasını beklemeden raporu görüntülemek imkansız.

MT4'te, tamamlanmamış bir tek çalıştırmanın işlem geçmişini her zaman görebilirsiniz. Ama MT5'te - hiçbir şekilde.

Bağlantıyı kesin olarak kesmemek, ancak Aracıya yakalanabilecek ve üzerinde OnDeinit yürütülebilecek bir bayrak göndermek mümkün mü?

 
Stanislav Korotky :

VE?

Stanislav Korotki :

Çok basit - çift bakış açısından - bu sayılar aynıdır, çünkü çiftler 52 bit mantis veya 15 ondalık basamak depolar. Sonraki rakamlardaki artı veya eksi farkları dikkate alınmaz . İşte Habre ile ilgili bir makale .

Fark 1e-15'ten büyük. Ayrıca, Num != Norm. Bunlar farklı sayılar, aynı değil.
 
Stanislav Korotky :

VE?

Aslında katılıyorum, bir değişmez ayarlarsak, ikili gösteriminin değişmezdeki basamak sayısıyla hemen normalleştirilmesi mantıklı olur.