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

 
Alain Verleyen #:

Bir şeyi kaçırıyor olabilirim, ancak komut dosyanızı PeriodSeconds'ı (yalnızca) kontrol etmek için kullandım.


Test sonuçlarım:

2023.11.15 00:26:58.896 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 29.78 наносекунд - PeriodSecondsFastFXS
2023.11.15 00:26:59.056 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 16.03 наносекунд - PeriodSecondsFast
2023.11.15 00:26:59.477 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 42.08 наносекунд - Расчет через PeriodSeconds
2023.11.15 00:26:59.477 DDD__ (EURUSD,M1)       ========================================================================
2023.11.15 00:27:16.018 DDD__ (EURUSD,M1)       =====LOOP=10000000
2023.11.15 00:27:16.318 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 29.99 наносекунд - PeriodSecondsFastFXS
2023.11.15 00:27:16.474 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 15.59 наносекунд - PeriodSecondsFast
2023.11.15 00:27:16.901 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 42.74 наносекунд - Расчет через PeriodSeconds
2023.11.15 00:27:16.901 DDD__ (EURUSD,M1)       ========================================================================
2023.11.15 00:27:25.206 DDD__ (EURUSD,M1)       =====LOOP=10000000
2023.11.15 00:27:25.508 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 30.14 наносекунд - PeriodSecondsFastFXS
2023.11.15 00:27:25.666 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 15.77 наносекунд - PeriodSecondsFast
2023.11.15 00:27:26.110 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 44.47 наносекунд - Расчет через PeriodSeconds
2023.11.15 00:27:26.110 DDD__ (EURUSD,M1)       ========================================================================
2023.11.15 00:27:40.780 DDD__ (EURUSD,M1)       =====LOOP=10000000
2023.11.15 00:27:41.089 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 30.90 наносекунд - PeriodSecondsFastFXS
2023.11.15 00:27:41.249 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 15.98 наносекунд - PeriodSecondsFast
2023.11.15 00:27:41.676 DDD__ (EURUSD,M1)       контрольная сумма - 34192800000000, время выполнения 1 иттерации = 42.72 наносекунд - Расчет через PeriodSeconds
2023.11.15 00:27:41.676 DDD__ (EURUSD,M1)       ========================================================================

0 errors, 0 warnings, 234 msec elapsed, cpu='AVX2 + FMA3'               


Testin kendisini pek sevmiyorum, çünkü testte aynı hesaplamalardan 10 milyonu yer alıyor. Bu durumda, derleyicinin kodu optimize etme girişimlerinde sürprizlerle karşılaşmayacağının garantisi yoktur.
Ve bu değerler 21'e bölünmelidir çünkü toplamda 21*10 000 000 iterasyon vardır.

Bununla birlikte, bu test de benim sonuçlarımı doğruluyor, ancak daha taze görünen ve bu nedenle modern performans özelliklerini maksimum düzeyde kullanan ve bu nedenle daha güncel olduğu için daha objektif olan işlemcim için.


Bu testin sonuçlarını başkaları için de görmek ilginç olacaktır.

 
fxsaber #:

Formata baktım.

Muhtemelen hızlandırmayacaktır. Yine de anahtarın mucizevi hızını duydum.

Seyrek bir anahtar mucizevi bir hız sağlamaz.

En muhteşem hız, 1'lik artışlarla sıfırdan 255'e kadar olan durumları içeren bir anahtarda olacaktır

 
Slava #:

Seyrek anahtar size muhteşem bir hız sağlamaz.

En muhteşem hız, 1'lik artışlarla sıfırdan 255'e kadar olan durumları içeren bir anahtarda olacaktır

Teşekkür ederim.

 
Nikolai Semko # :

Test sonuçlarım:



Testin kendisini pek sevmiyorum, çünkü testte 10 milyon aynı hesaplama yer alıyor. Bu durumda, derleyicinin kodu optimize etme girişimlerinde sürprizlerle karşılaşmayacağının garantisi yoktur.
Ve bu değerler 21'e bölünmelidir, çünkü toplamda 21*10 000 000 iterasyon vardır.

Bununla birlikte, bu test de benim sonuçlarımı doğruluyor, ancak daha taze görünen ve bu nedenle modern performans özelliklerini maksimum düzeyde kullanan ve bu nedenle daha güncel olduğu için daha objektif olan işlemcim için.


Bu testin sonuçlarını başkaları için de görmek ilginç olacaktır.

Teşekkürler.

Derleyici optimizasyonu olmadan sonuçları yayınladığımda dün geç saatlerdi.

İşte cpu='AVX2 + FMA3' ve maksimum optimizasyon ile sonuçlar.


 
Nikolai Semko #:

Bu algoritmadaki ana zorluk ayın başlangıç zamanını hesaplamaktır (yeşil ile vurgulanmıştır).

Koddaki en ilginç şey ve tartışmada neredeyse hiç değinilmedi.

 
fxsaber #:

Koddaki en ilginç şey ve tartışmada neredeyse hiç değinilmedi.

Orada yıl 1 Ocak yerine 1 Mart'ta başlıyor.
Bu stackoverflow'da gördüğüm bir ipucu. İyi bir tavsiyeydi.
30,68 faktörünü bulmak için bir komut dosyası yazmam gerekti
 

Çok kısa kodu (<15 satır) mqh-library şeklinde kaydetme zorunluluğu ile karşılaştım.

template <typename T1, typename T2>
T1* New( const string &ClassName ) { return((typename(T2) == ClassName) ? new T2 : NULL); }

template <typename T1, typename T2>
T1* New( string ClassName, const T2 &FuncNew[] )
{  
  T1* Res = NULL;
  
#ifdef __MQL5__
  ClassName = "class " + ClassName;
#endif // #ifdef __MQL5__
  
  for (uint i = ArraySize(FuncNew); (Res == NULL) && (bool)i--;)
    Res = FuncNew[i](ClassName);  
    
  return(Res);
}

Bu zorunlu bir önlem çünkü fonksiyonlara işaretçiler sadece global scopus'taki fonksiyonlar için mümkün.

Ne kadar kısa kütüphaneler kullanıyorsunuz?

 
Bir şablon işlevinin imzası, çağrısının konumlarına bağlı olabilir.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi üzerine forum

Hatalar, hatalar, sorular

fxsaber, 2023.11.26 23:26

template <typename T>
void Func( void ) { Print(__FUNCSIG__); }

void OnStart()
{
  Func<int>(); // void "void OnStart()"::Func<int>()
}
 

Eğer doğru anladıysam, bu durumda A::f() metodu g() metodu içinde inline edilmiştir.

class A
{
  void f() {}
  void g() { this.f(); }
};


Ve burada değil.

class A
{
  virtual void f() {}
  void g() { this.f(); }
};


Kodun herhangi bir yerinde A sınıfının torun nesnelerinin oluşturulmaması koşuluyla, ikinci durumda A::f() derleyici tarafından inline edilecek mi?

 
Bazen Görselleştiricide belirli bir yerde bir kesme noktası oluşturmanız gerekir. Ben bu amaçla böyle bir fonksiyon kullanıyorum.
bool IsManualChangeTester()
{
  static const bool IsVisual = MQLInfoInteger(MQL_VISUAL_MODE);
  static ENUM_CHART_MODE PrevChartMode = (ENUM_CHART_MODE)ChartGetInteger(0, CHART_MODE);  
  
  bool Res = false;
  
  if (IsVisual)
  {
    const ENUM_CHART_MODE ChartMode = (ENUM_CHART_MODE)ChartGetInteger(0, CHART_MODE);
      
    if (Res = (ChartMode != PrevChartMode))
      PrevChartMode = ChartMode;
  }
    
  return(Res);
}


Bu uygulama ile.

if (IsManualChangeTester())
  DebugBreak();


Bu koşulu oluşturmam gerektiğinde, görselleştiricide grafik görüntüleme modunu değiştiriyorum.

Ve sonra Uzman Danışmanın ME'deki davranışını analiz ediyorum.