Hatalar, hatalar, sorular - sayfa 2677

 
fxsaber :

serbest bırakıyorum tabii. Terminalin kendisi, işlem sırasında ihtiyaç duymadığım keneleri önbellekte saklar.

Bu tikleri tekrar soğukta yükseltmek benim için daha iyi. Terminalin "soğutma" mekanizması gereklidir.

fark etmedi

 void OnStart ()
  {
   Print ( "используется памяти до закачки истории: " + string ( MQLInfoInteger ( MQL_MEMORY_USED ))+ " Mb" );
   MqlTick items[];
   ulong t0= GetMicrosecondCount ();
   uint     count= CopyTicks ( Symbol (),items, COPY_TICKS_INFO , 0 , 100000000 );
   t0= GetMicrosecondCount ()-t0;
   Print ( "Загружено за " + string (t0/ 1000 )+ " миллисекунд " + ( string )count+ " тиков" );
   Print ( "используется памяти после закачки истории: " + string ( MQLInfoInteger ( MQL_MEMORY_USED ))+ " Mb" );
   ArrayFree (items);
   Print ( "используется памяти после ArrayFree: " + string ( MQLInfoInteger ( MQL_MEMORY_USED ))+ " Mb" );
  }


Tehdit Kenelerin, onay başına 60 bayt boyutunda, paketlenmemiş bir biçimde bellekte saklanması üzücü. 5 kez kolayca paketlenebilir (tik başına ~12 bayt)

 
Stanislav Korotky :

CopyRates'e göre otomatik indirme yapmak daha iyidir.

Bu durumda, zaman çerçevesi bilinmemektedir. İndirme, bir nokta karakterinin talebiyle başlatılır.

Ne yapılabilir bir düşünelim

 
Nikolai Semko :

fark etmedi

Terminalin ne tükettiğine bakmak gerekiyor.

 void OnStart ()
  {
//   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print ( "используется памяти до закачки истории: " + string ( TerminalInfoInteger ( TERMINAL_MEMORY_USED ) )+ " Mb" );
   MqlTick items[];
   ulong t0= GetMicrosecondCount ();
   uint     count= CopyTicks ( Symbol (),items, COPY_TICKS_INFO , 0 , 1 e7);
   t0= GetMicrosecondCount ()-t0;
   Print ( "Загружено за " + string (t0/ 1000 )+ " миллисекунд " + ( string )count+ " тиков" );
//   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print ( "используется памяти после закачки истории: " + string ( TerminalInfoInteger ( TERMINAL_MEMORY_USED ) )+ " Mb" );
   ArrayFree (items);
//   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print ( "используется памяти после ArrayFree: " + string ( TerminalInfoInteger ( TERMINAL_MEMORY_USED ) )+ " Mb" );
  }


Uzun süredir çalışmakta olan Terminaldeki sonuç. Hiçbir danışman/gösterge çalışmıyor. İki çizelge, yalnızca cari yıl için M1 çubukları.

используется памяти до закачки истории: 1043 Mb
Загружено за 11223 миллисекунд 10000000 тиков
используется памяти после закачки истории: 1675 Mb
используется памяти после ArrayFree : 1102 Mb

60MB yayınlanmadı. Boş bir Terminal daha fazla gigabayt tüketir. Tüketimi azaltmanın tek yolu Terminali yeniden başlatmaktır.

 
Sergey Dzyublik :

İyi günler!
Yeni operatörü daha önce kullanmadım, çünkü mantıksal olarak ayrılmış belleğe sahip ArrayResize'dan daha yavaş olması gerekir.
Ancak sonuçlar etkileyiciydi, bunun tam tersi olduğu ortaya çıktı - yeni operatör aracılığıyla kendi kendine yapılan bir dizi daha hızlı.

MT5 (2363 derlemesi):

Beta 2364'te yayınlandı (maalesef bir şablon içinde yeni T() için bir derleyici hatası var)

Komut dosyanızın günlükleri:

 2020.03 . 19 10 : 39 : 45.784 Test (EURUSD,H1)        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2020.03 . 19 10 : 39 : 46.765 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops= 1000 ms= 984
2020.03 . 19 10 : 39 : 48.233 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops= 1000 ms= 1469
2020.03 . 19 10 : 39 : 49.944 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator          : loops= 1000 ms= 1703
2020.03 . 19 10 : 39 : 50.923 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops= 1000 ms= 969
2020.03 . 19 10 : 39 : 52.392 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops= 1000 ms= 1484
2020.03 . 19 10 : 39 : 54.100 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator          : loops= 1000 ms= 1703
2020.03 . 19 10 : 39 : 55.079 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops= 1000 ms= 985
2020.03 . 19 10 : 39 : 56.548 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops= 1000 ms= 1469
2020.03 . 19 10 : 39 : 58.258 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator          : loops= 1000 ms= 1703
2020.03 . 19 10 : 39 : 59.237 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops= 1000 ms= 984
2020.03 . 19 10 : 40 : 00.705 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops= 1000 ms= 1469
2020.03 . 19 10 : 40 : 02.416 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator          : loops= 1000 ms= 1703
Nesneler için ArrayResize'ın daha hızlı çalışmaya başladığı görülebilir.

Bir kez daha, ArrayResize işlevinin parçalarından birinin karmaşıklığı logaritmadan sıfıra düşürüldü.
 
Ilyas :
Nesneler için ArrayResize'ın daha hızlı çalışmaya başladığı görülebilir.
Bir kez daha, ArrayResize işlevinin parçalarından birinin karmaşıklığı logaritmadan sıfıra düşürüldü.

Gerçek bir projede , veri türü için ArrayResizeReserve ve ArrayOnNew dizilerinin hızını karşılaştırmak mümkündü - tek bir int alanına sahip bir sınıf, kayıt sayısı 20M'dir.

MT5'te (yapı 2363), biri hariç tüm karşılaştırma parametrelerinde ArrayOnNew'in ArrayResizeReserve'den daha kötü olduğu ortaya çıktı:

Okuma/yazma erişimi (std::fill_n, std::copy, std::vector::clear): 2-2,5 kat daha yavaş
"Soğuk"/"sıcak" bellek için tüm öğelerin bir kerede oluşturulması (std::vector::resize) - 1.1-1.2 kat daha yavaş
"Sıcak" bellek için tüm öğeleri birer birer oluşturma (std::vector::push_back) - 1,2 kat daha hızlı

 

yardımdaki (editör) bu bağlantılar, bulunmayan bir sayfaya yönlendiriyor


 
MT5 hatası (derleme 2363) MQL'deki şablon işlevlerinin yürütme öncelikleri ile C++'daki şablon işlevleri arasında uyumsuzluk (çevrimiçi: https://onlinegdb.com/HkNqBDZ88 ).
Sorun, ilk "test" işlevi, bağımsız değişken olarak tamamen özelleştirilmiş bir şablon temel sınıfı içerdiğinde ortaya çıkar.
ve ikinci "test" işlevi birinciyi aşırı yükler, bir şablon işlevidir ve argüman olarak uzman olmayan bir şablon temel sınıfını alır.

 template < typename T>
struct B{
   T data;
};

template < typename T>
struct BB : public B<T>{};


template < typename T>                                             
struct A{
public :
   static void test(T& src){
       printf ( "1" );
   }
   
   template < typename TT>
   static void test(B<TT>& src){
       printf ( "2" );
   }
};
      

void OnStart (){
   BB< int > bb;
   A<B< int >>::test(bb);         //'test' - ambiguous call to overloaded function         
}
 
Tüm sağlık!! Soru: Genel olarak durum şu şekilde: Bilgisayarımda MT4 ve MT5 olmak üzere iki platform kullanıyorum, MT 4 ile sinyale sorunsuz bağlandım. Ancak MT5'ten başka bir sinyale çalışmıyor. Bir hesap var ve fonların hareketi gösteriliyor, ancak hesap sütununda hesap numarası yok ve terminal panelinde sinyal düğmesi yok. Ve bir vps sunucusu kiraladıktan sonra, geçiş düğmesi çalışmazken bana geçişin gerekli olduğunu yazıyor. Nedenini söyle.
 
Anna :
Tüm sağlık!! Soru: Genel olarak durum şu şekilde: Bilgisayarımda MT4 ve MT5 olmak üzere iki platform kullanıyorum, MT 4 ile sinyale sorunsuz bağlandım. Ancak MT5'ten başka bir sinyale çalışmıyor. Bir hesap var ve fonların hareketi gösteriliyor, ancak hesap sütununda hesap numarası yok ve terminal panelinde sinyal düğmesi yok. Ve bir vps sunucusu kiraladıktan sonra, geçiş düğmesi çalışmazken bana geçişin gerekli olduğunu yazıyor. Nedenini söyle.

MetaTrader 5 (terminalde yerleşik sanal barındırmayı kiralamak için) 64 bit işletim sistemi gerektirir.

 

Win 10'da yerel aracılara bağlanan var mı?

2 PC'yi bağlamaya çalıştı, uzak aracı sürekli olarak hazır-bağlanıyor-hazır-bağlanıyor ... işleri almıyor

Güvenlik duvarına Metatrader Agent için onay kutuları varmış gibi baktım , ajanların dosya yoluyla dışa aktarılması - içe aktarılması ayrıca bağlantı noktalarını ve bilgisayar adını da görüyor

Bir yere ek bağlantı noktalarının iletilmesi gerektiğinden şüpheleniyorum?