Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 128

 
Benim için bu büyük bir keşif.
 // Скрипт показыает, что цены открытия/закрытия не просто не нормализованы, но и разные при схожем значении

#property strict

#include <MT4Orders.mqh>

// Заполнение массива ценами открытия/закрытия
int FillPrices( double &Prices[] )
{
   const int Total = OrdersHistoryTotal ();
  
   ArrayResize (Prices, Total << 1 );
  
   int Amount = 0 ;
  
   for ( int i = 0 ; i < Total; i++)
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
    {
      Prices[Amount++] = OrderOpenPrice ();
      Prices[Amount++] = OrderClosePrice ();
    }

   return ( ArrayResize (Prices, Amount));
}

// true - нормализованная разность равна нуля, сама разность - отлична от нуля.
bool IsBadPrices( const double &Price1, const double &Price2 )
{
   return (! NormalizeDouble (Price1 - Price2, 5 ) && (Price1 != Price2));
}

// Находит цены открытия/закрытия, которые
// с нормализацией равны друг другу,
// без нормализации - не равны.
int CheckPrices( const double &Prices[] )
{
   int Res = 0 ;
   const int Size = ArraySize (Prices);
  
   for ( int i = 0 ; i < Size - 1 ; i++)
  {
     const double Price = Prices[i];
    
     for ( int j = i + 1 ; j < Size; j++)
       if (IsBadPrices(Price, Prices[j]))
      {
         Print (( string )Price + " - " + ( string )Prices[j] + " = " + ( string )(Price - Prices[j])); // Распечатываем найденые цены
        
        Res++;
      }
  }
    
   return (Res);
}

void OnStart ()
{
   double Prices[];
  
  FillPrices(Prices);
   Print (CheckPrices(Prices)); // Количество "несовпадающих" пар цен.
}


Sonuç

 1.95562 - 1.95562 = - 2.220446049250313 e- 016
1.95562 - 1.95562 = - 2.220446049250313 e- 016
1.71599 - 1.71599 = - 2.220446049250313 e- 016
1.71599 - 1.71599 = - 2.220446049250313 e- 016
1.58028 - 1.58028 = - 2.220446049250313 e- 016
14.806 - 14.806 = - 1.77635683940025 e- 015
1.95521 - 1.95521 = - 2.220446049250313 e- 016
1.95521 - 1.95521 = - 2.220446049250313 e- 016
8


Aynı betiği MT4'te çalıştırmak daha da iç karartıcı - orada daha fazla geçmiş var. Açıklamama izin ver.


Pozisyonun aynı fiyattan açılıp kapandığını görebilirsiniz. Ama normalleşme olmadan karşılaştırıldığında fiyatları eşit değil!


PS Test Cihazını kontrol ettim - öyle bir pislik yok gibi görünüyor.

 
Ilya Malev :

Görünüşe göre mühürlenmiş.

Onlar. Gerçek bir minimum yayılma var mı? Öyleyse, düzeltmek için teknik desteğe yazmanız gerekir (ortalama). Aksi takdirde, test kâsesi için lezzetli bir lokmadır .

 
fxsaber :

PS Test Cihazını kontrol ettim - öyle bir pislik yok gibi görünüyor.

Gerçek keneler hariç tüm Tester modlarında fiyatlar normalleştirilmez!

 // Советник выводит цены, которые не нормализованы

#property strict

// true - нормализованная цена не равна оригинальной
bool IsBadPrice( const double &Price )
{
   return ( NormalizeDouble (Price, 5 ) != Price);
}

#define TOSTRING(A) #A + " = " + ( string )(A) + " "

//const bool Init = EventSetMillisecondTimer(50);
//void OnTimer()
void OnTick ()
{
   for ( int i = SymbolsTotal ( true ) - 1 ; i >= 0 ; i--)
  {
     const string Symb = SymbolName (i, true );
    
     const double PriceBid = SymbolInfoDouble (Symb, SYMBOL_BID );
     const double PriceAsk = SymbolInfoDouble (Symb, SYMBOL_ASK );
    
     if (IsBadPrice(PriceBid))
       Print (TOSTRING(Symb) + TOSTRING(PriceBid) + TOSTRING( NormalizeDouble (PriceBid, 5 ) - PriceBid));

     if (IsBadPrice(PriceAsk))
       Print (TOSTRING(Symb) + TOSTRING(PriceAsk) + TOSTRING( NormalizeDouble (PriceAsk, 5 ) - PriceAsk));
  }
}


Sonuç

 2019.02 . 18 23 : 57 : 24    Symb = EURUSD PriceBid = 1.13088 NormalizeDouble (PriceBid, 5 )-PriceBid = - 2.220446049250313 e- 016 
2019.02 . 18 23 : 57 : 26    Symb = EURUSD PriceAsk = 1.13112 NormalizeDouble (PriceAsk, 5 )-PriceAsk = - 2.220446049250313 e- 016 
2019.02 . 18 23 : 57 : 27    Symb = EURUSD PriceBid = 1.13085 NormalizeDouble (PriceBid, 5 )-PriceBid = - 2.220446049250313 e- 016 
2019.02 . 18 23 : 58 : 18    Symb = EURUSD PriceAsk = 1.13112 NormalizeDouble (PriceAsk, 5 )-PriceAsk = - 2.220446049250313 e- 016 


Hafifçe söylemek gerekirse, bu bir Tester hatasıdır.

 

Hesabınıza giriş yapmaya çalıştığınızda alım satım sunucusuna bağlanamadığınızı varsayalım.

Veya örneğin, demo hesabın süresi doldu ve oturum açma girişimi "Geçersiz hesap" veriyor.


Bu başarısızlığa rağmen, Terminal'de gösterilmese bile tüm ticaret geçmişi mevcuttur!

 
fxsaber :

Hesabınıza giriş yapmaya çalıştığınızda alım satım sunucusuna bağlanamadığınızı varsayalım.

Veya örneğin, demo hesabın süresi doldu ve oturum açma girişimi "Geçersiz hesap" veriyor.


Bu başarısızlığa rağmen, Terminal'de gösterilmese bile tüm ticaret geçmişi mevcuttur!

Tarih nerede tutulur?

 
Alexey Navoykov :

Onlar. Gerçekten minimum bir yayılma var mı? Öyleyse, düzeltmek için teknik desteğe yazmanız gerekir (ortalama). Aksi takdirde, bu test edici kaseler için lezzetli bir lokmadır.

"Hatalar, sorular" başlığında zaten resmi olarak hiçbir şeyi değiştirmeyeceklerini yanıtladılar. Daha doğrusu, tüm rasyonel soruları görmezden geldiler ve kesinlikle olumsuz bir cevap olarak yorumladığım "gerçek keneler üzerinde test" yanıtını verdiler.

Bu, can sıkıcı kendini aldatma için bir "haber"dir. Her ne kadar bir başkası bir şekilde ticari olarak aldatma için kullanabilse de (yani, DC - bu, kişi gerçek kenelere girmezse ve% 99,9'u tırmanmazsa, yayılma hızı hakkında yanlış bir izlenim yaratır)
 
Ilya Malev :

Her ne kadar bir başkası bir şekilde ticari olarak aldatma için kullanabilse de (yani, DC - bu, kişi gerçek kenelere girmezse ve% 99,9'u tırmanmazsa, yayılma hızı hakkında yanlış bir izlenim yaratır)

Teoride, her şey sunucuda senkronize edilmelidir. Kenelerde ne varsa barlarda olmalıdır. Ama tabii ki gerçekte nasıl çalıştığını bilmiyorum.

 
Bu konu ile ilgili olmayan yorumlar " mql4 dilinin özellikleri, incelikleri ve çalışma yöntemleri " bölümüne taşınmıştır.
 

ME, sistem panosunun önceki değerlerini görebileceğiniz ALT + V kombinasyonuna sahiptir. Tarayıcıdan bir şey kopyalanmış olsa ve ME arka planda çalışıyor olsa bile, ME bunu görecek ve hatırlayacaktır.

Kabaca konuşursak, ME bilgisayarınızda yaptığınız birçok şeyi görür. Örneğin, arabellek aracılığıyla başka bir kaynağın bir hesabına veya kişisel hesabına bir parola yapıştırırsanız, bu, geçerli ME oturumunun geçmişine gider.

 
fxsaber :

ME, sistem panosunun önceki değerlerini görebileceğiniz ALT + V kombinasyonuna sahiptir. Tarayıcıdan bir şey kopyalanmış olsa ve ME arka planda çalışıyor olsa bile, ME bunu görecek ve hatırlayacaktır.

Kabaca konuşursak, ME bilgisayarınızda yaptığınız birçok şeyi görür. Örneğin, hesap parolasını arabelleğe yapıştırırsanız, geçerli ME oturumunun geçmişine gider.

Vay canına, kripto borsalarından şifreleri kopyalıyorum. Benim için ne kadar kötü?