MT5 ve iş başında hız - sayfa 87

 
fxsaber :

Daha hızlı.

Aynısını yapar - işlevin değerini döndürür. Ancak önceden kontroller de yapıyor.
Sonuçta, işlevin kendi içinde, sembol adının iletilen değeri için de kontroller vardır ve ondan - ya " Symbol() , _Symbol veya NULL yerine normal bir dize parametresi belirtilirse, kontroller buna göre yapılır. tam program ve başka bir özellik talebi" veya mevcut sembolün değerleri ek kontroller olmadan önbellekten kullanılır.
Neden bunları tekrar yapıyorsunuz ve aynı zamanda bunun veri alımını hızlandırdığını iddia ediyorsunuz? Bu mantığın mantığını anlamıyorum.

Bu arada, bunu fonksiyonlarımda her zaman yapıyorum ama bir şekilde veri alımını hızlandırdığını düşünmüyorum, aksine fonksiyonumda geçen sembol isminin değerine yapılan kontroller nedeniyle yavaşlatıyor.

 
Artyom Trishkin :

Neden bunları tekrar yapıyorsunuz ve aynı zamanda bunun veri alımını hızlandırdığını iddia ediyorsunuz?

Açıklamayı kendin alıntıladın.

 
Slava :

Girişler Symbol(), _Symbol - NULL'a eşdeğer (burada sembol adı yerine NULL'a izin verilir)

MT4'te de durum aynı mı? Ve MT5 Tester'da buna ne dersiniz?

 
Artyom Trishkin :

Bu arada, bunu her zaman fonksiyonlarımda yapıyorum

Lütfen bana göster.

 
fxsaber :

Açıklamayı kendin alıntıladın.

Kesinlikle - bunların hepsi normal işlevin içinde yapılır. Neden dışarıda bile çoğaltsın?

 
Artyom Trishkin :

Kesinlikle - bunların hepsi normal işlevin içinde yapılır. Neden dışarıda bile çoğaltsın?

Yani açıklamayı anlamadın. Bu iki aramanın hızı farklıdır.

 void OnTick ()
{
   static const string Symb = _Symbol ;
   MqlTick Tick;
  
   SymbolInfoTick ( _Symbol , Tick);
   SymbolInfoTick (Symb, Tick);  
}
 
fxsaber :

Lütfen bana göster.

Tüm işlevler ve yöntemler, bu benim için nerede yapılır?

Çok fazla.

 
Artyom Trishkin :

Tüm işlevler ve yöntemler, benim için nerede yapılır?

Bir tane yeter.

 
fxsaber :

Yani açıklamayı anlamadın. Bu iki aramanın farklı hızları vardır.

Her şeyi anlıyor gibiyim. Doğal olarak, o farklı. Nasıl hızlandırdın? Geçerli olmayan bir sembolün değerini, eğer_Symbol değilse, durumlardan birinde işleve iletirsiniz.

Burada yukarıdaki değerin fonksiyona iletilmesi durumunda fonksiyon kontrol etmez, mevcut karakterin değerini önbellekten alır.

Diğer durumlarda, "tam program" kontrolü + piyasa saatindeki varlığı ile belirtilen sembolün verilerini ister. Yerel olmayan bir karakterden veri isterken "hızlı" işleviniz bu kontrollerden kurtulmaz. Peki ivme nerede?

 bool SymbolInfoTickFast( const string &Symb, MqlTick &Tick )
{
   return ((Symb == _Symbol ) ? SymbolInfoTick ( _Symbol , Tick)
                           : SymbolInfoTick (Symb, Tick));
}

Fonksiyonunuz çağrıldığında sadece iki seçenek vardır if(SymbolInfoTickFast(Symbol(), tick_array)) {}

  1. mevcut sembol verilerini al - SymbolInfoTick'i _Symbol parametresiyle çağırın (hızlı)
  2. başka bir sembolün verilerini alma - SymbolInfoTick'i sembol dizesi parametresiyle çağırın (yavaş)

Başka bir konuşma, (hareket eden her şeyi tanımlama alışkanlığınızın dışında) mevcut sembol için bir dize değişkeni yaratırsanız, o zaman evet - kontroller yapmak ve makro ikamenizi önceden tanımlanmış bir değişkenle veya bir Symbol() ile değiştirmek zorunda kalırsınız. aramak

 
Artyom Trishkin :

Nasıl hızlandırdın?

Açık olanı açıklamak benim için zor.
 const MqlTick GetMarketWatchTick( const string &Symb )
{
   MqlTick Tick = { 0 };

   SymbolInfoTick (Symb, Tick);

   return (Tick);
}

void OnTick ()
{
   MqlTick Ticks[ 1 ];
  
  Ticks[ 0 ] = GetMarketWatchTick( _Symbol );
   ArrayPrint (Ticks);
}
Bu kodda GetMarketWatchTick'i hızlandırmak mümkündür.