MetaTrader 5 Strateji Test Cihazı: Hatalar, Hatalar, İyileştirme Önerileri - sayfa 34

 
Artyom Trishkin :

Ben de ona hiç bakmıyorum. Ama faydalı bir yer kaplıyor...

Ancak, kullanışlı geldi.

 
Artyom Trishkin :

Ben de ona hiç bakmıyorum. Ama faydalı bir yer kaplıyor...

İlk önce test kullanıcısının senkronizasyon, Expert Advisor'ın yerel saatle yüklenmesi vb. hakkındaki mesajları ve ardından Expert Advisor ve test ticaret sunucusundan test zamanı ile gelen mesajlar, bazen test cihazının mesajları ile yerel saat arasına serpiştirildiğinde bu herkesi şok eder mi? ?
 
Tester'ın hızlandırılabileceği yerlerden biri bulundu. Görünüşe göre Test Cihazı iki fiyatı karşılaştırdığında (örneğin, BuyLimit ve Tick.ask), bunu pahalı normalleştirme yoluyla yapar. Bunu yapma!
 
Slava :
İlk önce test kullanıcısının senkronizasyon, Expert Advisor'ın yerel saatle yüklenmesi vb. hakkındaki mesajları ve ardından Expert Advisor ve test ticaret sunucusundan test zamanı ile gelen mesajlar, bazen test cihazının mesajları ile yerel saat arasına serpiştirildiğinde bu herkesi şok eder mi? ?

Teşekkürler, bunu en iyi nasıl organize edeceğimi düşünerek oturdum. Önce başlatma zamanı, senkronizasyon vb. hakkında mesajlar olması gerektiğini, ardından geri kalanının - uzmandan ve testçiden önemli mesajlarla birlikte gelmesini önermek istedim.

Sanırım senin önerdiğinle aynı :)

 
fxsaber :
Tester'ın hızlandırılabileceği yerlerden biri bulundu. Görünüşe göre Test Cihazı iki fiyatı karşılaştırdığında (örneğin, BuyLimit ve Tick.ask), bunu pahalı normalleştirme yoluyla yapar. Bunu yapma!

Terminal tarihindeki fiyatlar normalleşmedi!

 bool IsNorm( const double Price )
{
   return ( NormalizeDouble (Price, _Digits ) == Price);
}

#define TOSTRING(A) #A + " = " + DoubleToString (A, 16 ) + " "
#define PRINT(A) Print (TOSTRING(A) + TOSTRING( NormalizeDouble (A, _Digits )))
#define ISNORM(A) if (!IsNorm(A)) { PRINT(A); Count++; };

void OnStart ()
{
   MqlTick Ticks[];
  
   const int Size = CopyTicksRange ( _Symbol , Ticks, COPY_TICKS_ALL , 1000 * ( long ) D'2019.12.01' );
   Print (Size);
  
   for ( int i = 0 , Count  = 0 ; (i < Size) && (Count < 10 ); i++)
  {
    ISNORM(Ticks[i].bid)
    ISNORM(Ticks[i].ask)
    ISNORM(Ticks[i].last)
  }
}


Sonuç (EURUSD, MQ-Beta)

Ticks[i].bid = 1.1024100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1024099999999999 
Ticks[i].bid = 1.1024100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1024099999999999 
Ticks[i].bid = 1.1024100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1024099999999999 
Ticks[i].bid = 1.1024100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1024099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 
Ticks[i].bid = 1.1023100000000001 NormalizeDouble (Ticks[i].bid, _Digits ) = 1.1023099999999999 


Bu nasıl mümkün olabilir? Ticaret sunucusu tarafında bir hata mı var?

Sonuç olarak, Test Cihazı, gerçek sembollerde bile EA'ları çarpık fiyatlarla kullanıyor.


ZY Sorunun geliştiriciler tarafından farklı bir normalleştirme algoritması uygulamasında olduğu görülüyor.

 
Andrey Khatimlianskii :

Giriş parametrelerinde boş bir değere sahip bir hata üretti.

1. Danışmanın bir araya getirilmesi:

2. Her iki parametreyi de herhangi bir şeyde optimize edin:

3. Enam'in işaretini kaldırın ve yalnızca x'i optimize edin:

4. Tek bir çalıştırma başlattığımız sonuçlardan 1. optimizasyon önbelleğini, ardından 2.'yi yüklüyoruz. -1 yerine INT_MAX alırız:


-1 ile başlayan tüm numaralandırmalar için geçerlidir.

t'nin işaretini kaldırdığınızda, girişin tamamen devre dışı bırakıldığına dair bir şüphe var.
ve t değişkeni, boş değil, başlatılmamış bir INT_MAX değeri içeriyor.

 
fxsaber :

Terminal tarihindeki fiyatlar normalleşmedi!


Sonuç (EURUSD, MQ-Beta)


Bu nasıl mümkün olabilir? Ticaret sunucusu tarafında bir hata mı var?

Sonuç olarak, Test Cihazı, gerçek sembollerde bile EA'ları çarpık fiyatlarla kullanıyor.


ZY Sorunun geliştiriciler tarafından farklı bir normalleştirme algoritması uygulamasında olduğu görülüyor.

Bu bir fiyat eğrisi değil! Oldukça normalleştirilmiş. Bu, baskınızdan çok açık.

Ticaret sunucusunda, ticaret yaparken, gelen fiyat ile mevcut fiyatı karşılaştırmak için her zaman epsilon kullanılır.

<some_real_number>*0.5 sonucunun <the_same_real_number>/2.0 sonucundan farklı olabileceğini biliyor musunuz?

Bazı derleyicilerin kodu optimize ederken bir işlemi diğeriyle değiştirebileceğinin farkında mısınız? Ne, bir durumda değiştirin ve diğer durumda - hayır, aynı proje içinde. Savaş ilanı yok.

 
Roman :

t'nin işaretini kaldırdığınızda, girişin tamamen devre dışı bırakıldığına dair bir şüphe var.
ve t değişkeni, boş değil, başlatılmamış bir INT_MAX değeri içeriyor.

Nedeni ne olursa olsun, önemli değil.

Çoğaltmak ve düzeltmek önemlidir. Böcek eski.

 
Slava :

Bu bir fiyat eğrisi değil! Oldukça normalleştirilmiş. Bu, baskınızdan çok açık.

Fiyat ancak bu koşul geçerse normalleştirilir.

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

MetaTrader 5 Strateji Test Cihazı: Hatalar, Hatalar, İyileştirme Önerileri

fxsaber , 2019.12.11 07:47

 bool IsNorm( const double Price )
{
   return ( NormalizeDouble (Price, _Digits ) == Price);
}

Ticaret sunucusunda, ticaret yaparken, gelen fiyat ile mevcut fiyatı karşılaştırmak için her zaman epsilon kullanılır.

Ticaret sunucusunun tam da bunu yaptığı doğrudur.

<some_real_number>*0.5 sonucunun <the_same_real_number>/2.0 sonucundan farklı olabileceğini biliyor musunuz?

Bazı derleyicilerin kodu optimize ederken bir işlemi diğeriyle değiştirebileceğinin farkında mısınız? Ne, bir durumda değiştirin ve diğer durumda - hayır, aynı proje içinde. Savaş ilanı yok.

Her iki sorunun cevabı da olumlu.


Bir kez daha, Terminal'deki orijinal fiyatlar normalleştirilmedi. Buradan bu durum kolayca ortaya çıkıyor.

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

MT4'te normalleştirilmemiş fiyatlar

fxsaber , 2019.02.20 23:03

Ancak durum çok daha kötü ve aynı zamanda MQ-Demo'da
 // 15326434
// wmefo5sa
// MetaQuotes-Demo
void OnStart ()
{
   const double Price1 = HistoryOrderSelect ( 356138100 ) ? HistoryOrderGetDouble ( HistoryOrderGetTicket ( 0 ), ORDER_PRICE_CURRENT ) : 0 ;
   const double Price2 = PositionSelectByTicket ( 356138100 ) ? PositionGetDouble ( POSITION_PRICE_OPEN ) : 0 ;  
  
   Print (Price1 - Price2); // -2.220446049250313e-16
}


Mevcut pozisyonun açılış fiyatı, emirlerinin/işlemlerinin fiyatına eşit değil.

Neden: