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

 
Alexey Kozitsyn :
Hangi GUI'den bahsettiğinizi bilmiyorum ama test penceresinin seçenekler sekmesinde başlangıç ve bitiş alanlarını ayarlayabilirsiniz . Ve test cihazı, parametre değerlerinin sayısını doğru bir şekilde belirler.

Saha adımı.

 
fxsaber :

Saha adımı.

Kusura bakmayın dikkatli okumamışım.
 
fxsaber :

Saha adımı.

Bunun nedeni muhtemelen, numaralandırma alanlarına herhangi bir adımın katı olmayan kendi değerlerinin verilebilmesidir.

 
Alexey Kozitsyn :

Bunun nedeni muhtemelen, numaralandırma alanlarına herhangi bir adımın katı olmayan kendi değerlerinin verilebiliyor olmasıdır.

Evet, bu bir bug değil, bu yüzden bu başlıkta başladı. Ve Optimizasyon adımı, gerçekten gerekliyse, enum için MQL aracılığıyla ayarlanır.

 

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

Kitaplıklar: TesterBenchmark

fxsaber , 2017.11.22 16:54

MT5 seçeneklerinin her birine yalnızca bir satır ekliyoruz

 #define Comment (A)

Tam teşekküllü hızlandırılmış %67, el sanatları - %108!


Ama mesele bu değil. Danışmanları hızlandırmak için bir satır çıktı! Ve bu, Yorumun herhangi bir rol oynamadığı Optimize Edici'dedir.

 
// Возвращает true только в случае, если выбран (в тестере) режим по реальным тикам
// Перед использованием должен быть хотя бы один OnTick вызван тестером
bool IsRealTicks( void )
{
   MqlTick Tick;
  
   return ( SymbolInfoTick ( _Symbol , Tick) && (Tick.volume || !(Tick.flags & TICK_FLAG_LAST )));
}


kullanım örneği

 // Советник будет тестироваться только в режиме по реальным тикам
void OnTick ()
{
   static bool IsRemove = true ;
  
   if (IsRemove)
  {
    IsRemove = MQLInfoInteger ( MQL_TESTER ) && !IsRealTicks();
    
     if (IsRemove)
    {
       Print ( "Real ticks mode is needed!" );
      
       ExpertRemove ();
      
       return ;
    }
  }
  
   //........
}
OnInit'te nasıl yapılır (OnTick olmadan) - Bilmiyorum.
 

Bahsedilen konuyla ilgili bir diyalog

fxsaber 2017.11.24 08:35
Yazdırma seçeneklerinde (veya yorumlarda) ifadeler kullanmayın. Virgülle ayrılmış parametreleri belirtin. O zaman tam olarak tüm dize dönüşümleri kapsanacak

Bu iki satırın Optimizasyon modunda nasıl farklılaştığını bir örnekle açıklar mısınız?

 Print (( string )i + ( string )d);
Print (i, d);
Destek Ekibi 2017.11.24 08:44

İlk durumda optimize ederken, yazdırmadan önce bir dize ifadesi hesaplanacaktır. Baskının kendisi çağrılacak, ancak çalışmayacak

İkinci durumda, baskı çağrılacak, ancak çalışmayacak. Ve i + d dizgisine dönüştürme çalışmayacak

Basit test ile birinci ve ikinci çağrıların sonuçları zaman ve çıktı açısından aynı olacaktır.

Onlar. Optimizasyon modları için Print'i virgülle kullanmak, onun için bir dize olarak bir giriş parametresi oluşturmaktan çok daha ucuzdur.


Öte yandan, Print'in içinde her şeyi tek bir satır olarak oluşturursanız, Optimizasyon modunda oluşumunu kesmek kolaydır.

 #define Print (A)

ancak virgül kullanılırsa bu yapı çalışmayacaktır. Üstelik böyle bir yapı Optimizasyon modunda da bunu kapatacaktır.

 Print (SendOrder()); // SendOrder будет проигнорирован при #define Print(A)


Bu nedenle (ve başka nedenlerle) Print içinde gerçekten önemli işlevleri çağırmamak daha iyidir. Sonuç olarak, Optimizasyon modunda performansa önem veriyorsanız, yine de böyle bir şey yapmanız gerekir.

 static const bool IsNotOptim = ! MQLInfoInteger ( MQL_OPTIMIZATION );

if (IsNotOptim)
{
   const string Str = GetString(); // дорогой вызов
  
   Print (Str);
//  Comment(Str); 
//  Alert(Str);
}
 
fxsaber :

Bahsedilen konuyla ilgili bir diyalog

Onlar. Optimizasyon modları için Print'i virgülle kullanmak, onun için bir dize olarak bir giriş parametresi oluşturmaktan çok daha ucuzdur.


Öte yandan, Print'in içinde her şeyi tek bir satır olarak oluşturursanız, Optimizasyon modunda oluşumunu şu şekilde kesmek kolaydır:

ancak virgül kullanılırsa bu yapı çalışmayacaktır. Üstelik böyle bir yapı Optimizasyon modunda da bunu kapatacaktır.


Bu nedenle (ve başka nedenlerle) Print içinde gerçekten önemli işlevleri çağırmamak daha iyidir. Sonuç olarak, Optimizasyon modunda performansa önem veriyorsanız, yine de böyle bir şey yapmanız gerekir.

Üzgünüm, belki anlamıyorum? Neden baskıda önemli işlevleri çağıralım?
 
Vladislav Andruschenko :
Üzgünüm, belki anlamıyorum? Neden baskıda önemli işlevler çağrılır?

Yasak değildir.

 
fxsaber :

Yasak değildir.

Kabul ediyorum.

sadece amacın ne olduğunu bilmek istedim

Artık geçmişte 1000'den fazla işlem olduğunda ve örneğin geçmiş işleme işlevini çağırırken bir sorunla karşılaştım, örneğin geçmiş karını hesaplayın. + cari işlemlerin karını ekleyin - grafikteki bilgiler yavaşlamaya başlar ve terminal donar. Onlar. alıntılar gecikmeli olarak gelir.