Hatalar, hatalar, sorular - sayfa 1850

 
Bu bir hata mı?
 struct STRUCT
{
   int a;
  
  STRUCT() {} // Если закомментировать, ошибка пропадает
};

void OnStart ()
{
  STRUCT Struct = { 1 }; // cannot be initialized with initializer list
}
 

şekillendirici kullanırken hata?

Diyelim ki sekmeleri kullanarak yazdık.

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
   input int x= 0 ;
   #define TWO_DIM ( 10000 )
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   double       massive[][TWO_DIM];
  }
//+------------------------------------------------------------------+

hiçbir hata yok.

sonra şekillendiriciyi kullanırız,

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
input int x= 0 ;
#define TWO_DIM( 10000 )
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   double       massive[][TWO_DIM];
  }
//+------------------------------------------------------------------+
'10000' - unexpected in macro formal parameter list     bug.mq5 7       17
'[' - invalid index value       bug.mq5 13      25

onlar. şekillendirici TWO_DIM( 10000 ) arasındaki boşluğu siler

 
Derleme Hatası
 template < typename T>
struct STRUCT
{
   template < typename T1>  
  STRUCT( T1 Value ) {} // 'STRUCT<int><int>' - declaration without type

};

void OnStart ()
{
  STRUCT< int > Struct( 0 ); // 'STRUCT<int>' - cannot to apply function template
}
 
Küçük bir hack. Atama atlama
 template < typename T>
struct STRUCT_COPY
{
  T Value;
  
  STRUCT_COPY( const T& tValue)
  {
     this = (STRUCT_COPY)tValue;
  }  
};

struct STRUCT
{
   int i;
  
   void operator =( const STRUCT& )
  {
     this .i = 5 ;
  }
};

#define PRINT(A) :: Print ( #A + " = " + ( string )(A));

void OnStart ()
{
  STRUCT Struct;  
  Struct.i = 1 ;  
  PRINT(Struct.i);
  
  STRUCT StructCopy1 = Struct;
  PRINT(StructCopy1.i);
  
   // Обходим void STRUCT::operator=(const STRUCT&)
  STRUCT_COPY<STRUCT> StructCopy2(Struct);
  PRINT(StructCopy2.Value.i);  
}

Sonuç

 Struct.i = 1
StructCopy1.i = 5
StructCopy2.Value.i = 1
 

Nasıl doğru?

 struct STRUCT
{
   template < typename T>
   void operator []( int ) {}
};

void OnStart ()
{
  STRUCT Struct;
  
  Struct. operator []< int >( 0 ); // Нормально
  Struct[ 0 ]< int >;             // Ошибка
}
 
hala böyle bir soru var - anladığım kadarıyla, MT5'te aynı CopyClose arabelleğinin ilk kopyalanma zamanı şunlara bağlıdır:

1. Daha önce hiç borsa teklifi almadıysanız, bir grafik açmadıysanız vb. (ping, internet hızı, sabit sürücü, Bases/Broker/geçmiş/ticker/önbellek/dosya hazırlığına bağlıdır)

 2017.04 . 11 11 : 27 : 38.828 время копирования буфера (EURUSD,M1)    проход = 0   время= 8355581
2017.04 . 11 11 : 27 : 38.828 время копирования буфера (EURUSD,M1)    проход = 1   время= 1083

2. daha önce teklifler alındıysa ve ardından bu ticker'ın grafiğinin açık olmaması koşuluyla terminal yeniden başlatıldıysa (Bases/Broker/history/ticker/cache/ dosyası hazırlanıyor)

 2017.04 . 11 11 : 29 : 14.672 время копирования буфера (EURUSD,M1)    проход = 0   время= 599396
2017.04 . 11 11 : 29 : 14.734 время копирования буфера (EURUSD,M1)    проход = 1   время= 259
/////////////////////////////
2017.04 . 12 19 : 32 : 46.489 время копирования буфера (FULT,M5)      проход = 0   время= 98167
2017.04 . 12 19 : 32 : 46.557 время копирования буфера (FULT,M5)      проход = 1   время= 155
2017.04 . 12 19 : 32 : 46.557 время копирования буфера (FULT,M5)      проход = 2   время= 14

zaman, 1. maddeden 10-15 kat daha azdır


karşılaştırma için, 2. maddeye göre MT4'teki erişim süresi, yani. terminal yeniden başlatıldıktan sonra

 2017.04 . 12 19 : 30 : 38.831 время копирования буфера EURUSD,M1: проход = 2   время= 276
2017.04 . 12 19 : 30 : 38.831 время копирования буфера EURUSD,M1: проход = 1   время= 434
2017.04 . 12 19 : 30 : 38.831 время копирования буфера EURUSD,M1: проход = 0   время= 2260
2017.04 . 12 19 : 30 : 38.816 время копирования буфера EURUSD,M1: initialized
2017.04 . 12 19 : 30 : 38.666 время копирования буфера EURUSD,M1 inputs: Pair=USDCAD;

onlar. MT4'te, terminalin yeniden başlatılmasından sonraki süre, büyüklük sıraları daha kısadır.

Bu sefer her şey bir SSD olmadan Windows'ta kontrol edildi!

3. Eğer teklifler alındıysa, terminal yeniden başlatılmadı, veri erişimi sağlandı.

 2017.04 . 11 11 : 35 : 30.648 время копирования буфера (EURUSD,M1)    проход = 0   время= 89
2017.04 . 11 11 : 35 : 30.648 время копирования буфера (EURUSD,M1)    проход = 1   время= 42

Önbelleği hazırladıktan sonra, terminalin sonraki erişimlerde (2 erişimden başlayarak) çok daha az zaman harcadığını doğru anlıyorum?

Terminali yeniden başlattıktan sonra ilk aramanın süresini MT4'teki gibi olacak şekilde bir şekilde azaltmak mümkün müdür?

kod https://www.mql5.com/en/forum/1111/page1870#comment_4856899 adresindeydi.

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • www.mql5.com
Форум алго-трейдеров MQL5
 
kaus_bonus :
hala böyle bir soru var - anladığım kadarıyla, MT5'te aynı CopyClose arabelleğinin ilk kopyalanma zamanı şunlara bağlıdır:

Ortamın ve oynatma yönteminin hiçbir açıklaması olmadığı için çok dağınık bir test yönteminiz var.

Belirtilmemiş:

  • penceredeki çubuk sınırları
  • terminal veritabanlarındaki gerçek veri hacimleri
  • sunucu tam olarak nedir, diskteki veritabanları mı? tüm verilerin diskte olması garanti edilmelidir.
  • test platformu ve bit derinliği (asma altında? ayrıntılı olarak belirtilmesi gerekir)
  • açık pencerelerin varlığı

Bu olmadan, sonuçlar temelsizdir.


Örneğin, EURUSD M1'e bakın - MT5'te 6 milyondan fazla çubuk var (grafiklerde sınırsız mod varsa) ve MT4'ün ne kadarı var? Aslında veritabanında on binlerce M1 çubuğu var mı?
 
Renat Fatkhullin :

Ortamın ve oynatma yönteminin hiçbir açıklaması olmadığı için çok dağınık bir test yönteminiz var.

Belirtilmemiş:

  • penceredeki çubuk sınırları

  • terminal veritabanlarındaki gerçek veri hacimleri
  • sunucu tam olarak nedir, diskteki veritabanları mı? tüm verilerin diskte olması garanti edilmelidir.
  • test platformu ve bit derinliği (asma altında? ayrıntılı olarak belirtilmesi gerekir)
  • açık pencerelerin varlığı

Bu olmadan, sonuçlar temelsizdir.


genel olarak çoğu sorunun cevabı yazımdaydı, soru değil, şimdi tüm verileri vereceğim.

cevap vermeye başlamak için

какой точно сервер, находятся ли базы на диске? все данные обязаны быть гарантированно на диске.

MQ-demo sunucusu, veriler yüklendi çünkü 2. ve 3. paragraftan bahsediyoruz. önceki gönderide. 1. noktada, her şey açıktır ve orada hiçbir soru yoktur - yazıldığı gibi - veriler yüklenir, belirtilen yol boyunca bir önbellek oluşturulur.

лимиты баров в окне

MT4

MT5

фактические объемы данных в базах терминалов

MT4

MT5

платформа и битность тестирования (под вайном? нужно указывать детально)

XP 32bit kazanın, MT en son sürümleri oluşturur

наличие открытых окон

MT4 - 1 tablosu açık, başka bir sembol kullanarak kontrol ediyoruz

MT5 - 1 tablosu açık, başka bir sembol kullanarak kontrol ediyoruz

bir kez daha, terminali yeniden başlatın, komut dosyasını tabloya atın, terminali yeniden başlatmadan ÖNCE verilerinin yüklendiği BAŞKA bir sembolü seçin

MT4

 2017.04 . 12 21 : 18 : 31.575 время копирования буфера EURUSD,M1: проход = 2   время= 36
2017.04 . 12 21 : 18 : 31.575 время копирования буфера EURUSD,M1: проход = 1   время= 282
2017.04 . 12 21 : 18 : 31.575 время копирования буфера EURUSD,M1: проход = 0   время= 1871
2017.04 . 12 21 : 18 : 31.575 время копирования буфера EURUSD,M1: initialized
2017.04 . 12 21 : 18 : 31.405 время копирования буфера EURUSD,M1 inputs: Pair=GBPUSD; 

MT5

 2017.04 . 12 21 : 19 : 47.735 время копирования буфера (EURUSD,H1)    проход = 0   время= 303951
2017.04 . 12 21 : 19 : 47.735 время копирования буфера (EURUSD,H1)    проход = 1   время= 29
2017.04 . 12 21 : 19 : 47.735 время копирования буфера (EURUSD,H1)    проход = 2   время= 25
 

İşte daha ayrıntılı ve daha kesin olan testim:

Koşulların açıklaması
MetaTrader 4 yapı 1065
MetaTrader 5 x64 yapı 1580
Donanım ve işletim sistemi
Windows 10 Pro x64, Intel Xeon E5-2690 v3 @ 2.60GHz, RAM: 32 Gb, SSD Disk
Ticaret Sunucusu
MetaQuotes-Demo
MetaQuotes-Demo
Ayarlardaki grafiklerde çubuk sınırı
10.000
10.000
Ayarlarda geçmişteki çubukların sınırı 10.000.000
sınırlama kavramı yok
EURUSD, M1 için diskteki gerçek çubuk sayısı
3.382 milyon
6.538 milyon
İşaretli sembol ve nokta
EURUSD, M1
EURUSD, M1
Grafikleri Aç
sadece GBPUSD, M1, komut dosyası ona atılır
sadece GBPUSD, M1, komut dosyası ona atılır
Sonuçlar soğuk, terminali başlattıktan sonra
# 0 pass, 1000 records in 680 msc
# 1 pass, 1000 records in 2 msc
# 2 pass, 1000 records in 2 msc

# 0 pass, 1000 records in 113497 msc
# 1 pass, 1000 records in 3 msc
# 2 pass, 1000 records in 3 msc

Sonuçlar sıcak, ikincisi ilkinden hemen sonra
# 0 pass, 1000 records in 13 msc
# 1 pass, 1000 records in 2 msc
# 2 pass, 1000 records in 2 msc
# 0 pass, 1000 records in 14 msc
# 1 pass, 1000 records in 2 msc
# 2 pass, 1000 records in 2 msc

Test dosyaları eklenmiştir ve tüm zamanlar mikrosaniye cinsindendir (milisaniye değil, 1 milisaniye = 1000 mikrosaniye).

Şimdi sonuçlar:

  1. Fark sadece MT4 için 0,6 ms ile MT5 için 113 ms grafik önbelleğinin ilk başlatma hızındadır.

    Burada bir sorun yok - yükseltmek her zaman kaynaklara mal olur.
    Özellikle kavramsal olarak farklı mimariler kullanıldığında: MT5, ölçeklendirme adına daha karmaşık önbelleklere sahiptir (önbellek\*.hc dosyaları orijinal *.hcc dosyalarından oluşturulur) + sunucu verileriyle tam senkronizasyonun zorunlu kontrolü (ikili *.hcc parçaları) ).

  2. Tekrarlanan istekler aynı hızı gösterir - verileri kopyalamak için 2-3 mikrosaniye

    Her iki terminalin de uygulanmasında herhangi bir hata yoktur ve her şey hızlı bir şekilde çalışır.
Dosyalar:
 

Cevap için teşekkürler.

Genel olarak, yazılarımda gösterdiğim gibi sonuçlar.

Ayrıca önümde küçük bir hile var - SSD. Aslında normal olarak test ettim.

Ve yine de MT4 ve MT5 arasındaki sonuçlar neredeyse 200 kat farklılık gösteriyor ( sunucu verileri ?? ve ping? ile tam senkronizasyonun zorunlu kontrolü nedeniyle).

Bunun büyük olasılıkla terminalin bir özelliği olduğunu buraya göndermeden önce bile istifa ettim. Hatta onunla yaşayabilirsin, ama bazı anlarda bu zordur. Örneğin, çünkü MT'de pazar eleme aracı yok, bu yüzden pazara genel bakışa semboller ekleyen küçük bir komut dosyası çıkardım, çünkü. aynı zamanda, fiyatlar yalnızca CopyClose aracılığıyla kullanılabilir, ne SymbolInfoDouble aracılığıyla ne de MqlTick aracılığıyla, sembol genel bakışa eklenene kadar kullanılamazlar, ardından terminali başlattıktan sonra benzer bir komut dosyası çalıştırarak, eğer "sonsuz" uzun çalışırsa çok büyük bir sayı üzerinde çalıştırın. Bu sadece bir örnek olarak.

Neden: