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

 
fxsaber :

Bir tane yeter.

 int CTickSeriesCollection::IndexTickSeries( const string symbol)
  {
   const CTickSeries *obj= new CTickSeries(symbol== NULL || symbol== "" ? :: Symbol () : symbol);
   ...
   ...
   ...
  }

Ek olarak, "" olup olmadığını kontrol ediyorum. Geçerli karakter için yöntemleri çağırırken kendim her zaman NULL kullanırım.

 
Artyom Trishkin :

Kodunuz hızlanma sağlamayacaktır.

 
fxsaber :
Açık olanı açıklamak benim için zor. Bu kodda GetMarketWatchTick'i hızlandırmak mümkündür.
 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);
}

Symbol parametresi olarak _Symbol geçirilse bile , SymbolInfoTick() işlevine bir dize geçirileceğini düşünüyor musunuz?

Dizenin geçerli karaktere eşitliği için standart işlevler içinde hiçbir kontrol olmadığını düşünüyorum ve bu tür açık parametrelerle, mevcut karakter için bir önbellek varsa "tam" kontroller başlar.

 

Hızlanma, çalışma zamanında değil, derleme zamanında gerçekleşir.

Derleyici aşağıdaki değişikliği yapar:

 SymbolInfoTick ( _Symbol , Tick) -> SymbolInfoTickInside(Tick);
SymbolInfoTick ( NULL , Tick) -> SymbolInfoTickInside(Tick);
SymbolInfoTick (:: Symbol (), Tick) -> SymbolInfoTickInside(Tick);

Diğer tüm durumlarda, ikame yapılmaz.

 
fxsaber :

Hızlanma, çalışma zamanında değil, derleme zamanında gerçekleşir.

Derleyici aşağıdaki değişikliği yapar:

Diğer tüm durumlarda, ikame yapılmaz.

İyi. Bahsettiğim şey - kodunuz, geçerli karakter için DEĞİL normal işlevi hızlandırmayacak. Ayrıca mevcut olan için HIZLANMAYIN.

Ve benimki hızlanmayacak. Ve asla acele etmedi. Bu konuda hiçbir yanılsama yaşamadım. Ancak, işlevime NULL veya "" iletilirse, normal işlevlere atıfta bulunurken her zaman Symbol() veya NULL yerine geçerim. Bu, mevcut karakter için verilerin önbellekten alındığı normal işlevin hızlı kodunu çağırır.
İşlevimi çağırırken Symbol() veya _Symbol kullanılırsa , normal işlev içinde geçerli sembolle eşleşip eşleşmediği kontrol EDİLMEDİ Mİ? Gerçekten tam programdaki mevcut sembolün kontrollerini içeren kod yürütülecek mi? Nedense inanamıyorum...

 
Artyom Trishkin :

İyi. Bahsettiğim şey - kodunuz, geçerli karakter için DEĞİL normal işlevi hızlandırmayacak. Ayrıca mevcut olan için HIZLANMAYIN.

Belki birisi size daha açık bir şekilde açıklayabilir. Alamadım.

 
fxsaber :

Belki birisi size daha açık bir şekilde açıklayabilir. Alamadım.

Normal işlevleri hızlandırmak için büyücülük ne kullanıyorsunuz?

Normal bir işleve geçirirken geçerli karakter değeri değiştirmeyi kullanırsınız, böylece önbellekten geçerli karakterin verilerini kullanır. Bu, stok işlevini hızlandırmaz, ancak hızını mevcut karakter için kullanır.

Kaynağa erişiminiz olmayan bir şeyi hızlandıramazsınız. İşlevi doğru şekilde çağırmak için standart numarayı kullanıyorsunuz. Ancak, EURUSD üzerinde çalışırken Sembol dize tarafından "EURUSD" olarak belirtilirse, yani bu geçerli sembolün kullanımıysa, standart işlevin "EURUSD" dizesinin eşitliğini kontrol etmeyeceğinden emin değilim. Symbol() değerine dönüştürülür ve önbellekten alınan verileri kullanmaz ve sembolü tam olarak kontrol etmeye başlar.

Sonuçta, normal fonksiyonun ivmesi nerede? Eğer öyleyse, o zaman ilginç ve kullanışlı olmaktan daha fazlasıdır.

 
fxsaber :

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

CopyTicks ile aynı mı?

 
fxsaber :

Belki birisi size daha açık bir şekilde açıklayabilir. Alamadım.

Büyük ihtimalle sorumu anlamadın. Birkaç kez tekrarladım (ve bu soru "normal işlevin hızlandırılması" ile ilgili DEĞİLDİR).

 
Slava :

Symbol(), _Symbol veya NULL yerine normal bir dize parametresi belirtilirse , tam program kontrolleri gerçekleştirilir ve başka bir özellik sorgusu yapılır.

Nedense bu açıklama, string parametresi mevcut karaktere eşitse, tam kontrollerin yapılmadığını söylemez.