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)
voidOnStart ()
{
// 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.
İ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 . 1910 : 39 : 45.784 Test (EURUSD,H1) AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2020.03 . 1910 : 39 : 46.765 Test (EURUSD,H1) Test Class ArrayResize all : loops= 1000 ms= 9842020.03 . 1910 : 39 : 48.233 Test (EURUSD,H1) Test Class ArrayResize one by one with reserved memory : loops= 1000 ms= 14692020.03 . 1910 : 39 : 49.944 Test (EURUSD,H1) Test Class ArrayResize one by one with newoperator : loops= 1000 ms= 17032020.03 . 1910 : 39 : 50.923 Test (EURUSD,H1) Test Class ArrayResize all : loops= 1000 ms= 9692020.03 . 1910 : 39 : 52.392 Test (EURUSD,H1) Test Class ArrayResize one by one with reserved memory : loops= 1000 ms= 14842020.03 . 1910 : 39 : 54.100 Test (EURUSD,H1) Test Class ArrayResize one by one with newoperator : loops= 1000 ms= 17032020.03 . 1910 : 39 : 55.079 Test (EURUSD,H1) Test Class ArrayResize all : loops= 1000 ms= 9852020.03 . 1910 : 39 : 56.548 Test (EURUSD,H1) Test Class ArrayResize one by one with reserved memory : loops= 1000 ms= 14692020.03 . 1910 : 39 : 58.258 Test (EURUSD,H1) Test Class ArrayResize one by one with newoperator : loops= 1000 ms= 17032020.03 . 1910 : 39 : 59.237 Test (EURUSD,H1) Test Class ArrayResize all : loops= 1000 ms= 9842020.03 . 1910 : 40 : 00.705 Test (EURUSD,H1) Test Class ArrayResize one by one with reserved memory : loops= 1000 ms= 14692020.03 . 1910 : 40 : 02.416 Test (EURUSD,H1) Test Class ArrayResize one by one with newoperator : 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ı
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 :
staticvoid test(T& src){
printf ( "1" );
}
template < typename TT>
staticvoid test(B<TT>& src){
printf ( "2" );
}
};
voidOnStart (){
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.
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
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)
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
fark etmedi
Terminalin ne tükettiğine bakmak gerekiyor.
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ı.
60MB yayınlanmadı. Boş bir Terminal daha fazla gigabayt tüketir. Tüketimi azaltmanın tek yolu Terminali yeniden başlatmaktır.
İ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:
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ü.
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ı:
yardımdaki (editör) bu bağlantılar, bulunmayan bir sayfaya yönlendiriyor
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.
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?