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

 
fxsaber :

Terminalin CPU'yu hiçbir şeye tepki vermeyecek kadar %100 yüklediği durumları defalarca gördüm.

Sonra günlüklere baktım ve OnTick'te çılgınca kene atlamaları olduğunu gördüm. Ancak bir Uzman Danışmanı doğru yazarsanız, böyle korkunç bir durumun ticaretin sonucunu etkilemeyeceği gerçekçidir. Özel olarak analiz edildi, her şey açık.

Market ürünlerindeki gecikmelerle başa çıkmak için ne kadar yaygın mekanizmalar olduğunu merak ediyorum. Makinenin fırlatma gücünden bahsettiğini hiç görmedim. Minimum ping evet.

Onları nereden içeri aldın?

2-5 dolar için VPS'de ise, az ya da çok ciddi WinAPI işlevinde kolayca onlarca ve yüzlerce milisaniyelik gecikmeler olabilir. Hipervizör seviyesinden her şeyi yavaşlatır ve sanal makineyi bir slayt gösterisine dönüştürür.

Açıklamasını yukarıda yaptım.

 
Renat Fatkhullin :

Bu, GetMicrosecondsCount'u yavaşlatmaz, ancak işletim sistemi, boğulmuş vpsky'nizin herhangi bir iş parçacığı için CPU kaynaklarını nicelendirir. VPS'nizdeki herhangi bir işlev, herhangi bir eylem, herhangi bir program için.

Eh, hiçbir CPU zamanlayıcı, her kopyada 1500 yürütme iş parçacığına sahip 20 (bu hala harika) işletim sistemine sahip olduğunda kaynakları dürüstçe kesip dağıtamaz. 8-16 çekirdek alın ve bunları 20*1.500 = 30.000 (otuz bin fiziksel iş parçacığı) olarak bölün.

Benim durumumda (win7 + 2 çekirdekli sanal kutu + kendi donanım parçasında 16 GB RAM, başka hiçbir şeyin dönmediği yerde ), periyodik 2-3 ms nereden geliyor?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MT5 ve iş başında hız

Andrey Khatimliansky , 2020.10.05 10:19

Tam olarak bir VPS değil, kiralık bir demir parçası üzerinde sanal bir makine:

 2020.09 . 29 00 : 11 : 11.350 Terminal        MetaTrader 5 x64 build 2615 started for MetaQuotes Software Corp.
2020.09 . 29 00 : 11 : 11.352 Terminal        Windows 7 Service Pack 1 build 7601 on Virtual Box, Intel Core i7- 4770   @ 3.40 GHz, 14 / 15 Gb memory, 4 / 31 Gb disk, IE 11 , Admin, GMT+ 2
2020.10 . 05 11 : 11 : 25.340 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 11 : 31.308 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 12 : 34.699 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 3 mсs.
2020.10 . 05 11 : 13 : 04.388 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 13 : 58.116 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 14 : 08.388 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 14 : 14.975 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 14 : 19.095 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 15 : 28.814 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 15 : 55.814 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 15 : 56.814 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 16 : 27.818 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 9 mсs.
2020.10 . 05 11 : 16 : 35.275 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 16 : 45.775 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 27 mсs.
2020.10 . 05 11 : 16 : 51.715 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.
2020.10 . 05 11 : 17 : 30.477 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 5 mсs.
2020.10 . 05 11 : 18 : 25.081 test (GBPUSD,M15)       Alert : Time[test.mq5 7 in OnTimer : GetMicrosecondCount ()] = 2 mсs.

 
Andrey Khatimlianskii :

Benim durumumda (win7 + 2 çekirdekli sanal kutu + kendi donanım parçasında 16 GB RAM, başka hiçbir şeyin dönmediği yerde ), periyodik 2-3 ms nereden geliyor?

Bu, ikili sanallaştırmanın bedeli.

Üstelik VirtualBox, tam teşekküllü bir Hyper-V tipi hiper yönetici değildir, ancak mevcut masaüstü işletim sisteminizin (Windows 7 de mi?)

Yani, sahip olduğunuz: Windows 7/10 -> VirtualBox -> Windows 7. Aslında, iki sanallaştırma düzeyi ve birincisi, sadece normal bir program olarak kabul edildiğinde VirtualBox'ın isteklerini bilmiyor. CPU kaynaklarının tahsisi (iş parçacığı zamanlayıcı) açıkça cehenneme.

Ve şöyle olmalı: Hyper-V 2016/2019 -> Windows 2016/2019

 
Renat Fatkhullin :

Bu, GetMicrosecondsCount'u yavaşlatmaz, ancak işletim sistemi, boğulmuş vpsky'nizin herhangi bir iş parçacığı için CPU kaynaklarını nicelendirir. VPS'nizdeki herhangi bir işlev, herhangi bir eylem, herhangi bir program için.

Bu argümanın sizi düşündüreceğini düşünüyorum. Danışman.

 #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

// Сделал действия по этой ссылке: https://www.mql5.com/ru/forum/342090/page41#comment_18597040

void OnStart ()
{
  _BV(
   for ( int i = 0 ; i < 1 e6; i++)
     GetMicrosecondCount ();
      , 1 )
      
  _BV(
   for ( int i = 0 ; i < 1 e6; i++)
     GetTickCount ();
      , 1 )      
}



 2020.10 . 06 00 : 24 : 26.779 Alert : Time[Test6.mq5 52 : for (inti= 0 ;i< 1 e6;i++) GetMicrosecondCount ();] = 16289902 mсs.
2020.10 . 06 00 : 24 : 26.784 Alert : Time[Test6.mq5 57 : for (inti= 0 ;i< 1 e6;i++) GetTickCount ();] = 4300 mсs.


Yani her şey yavaşlamıyor. Bu nedenle, oldukça zararsız bir şekilde winmm::timeBeginPeriod(1)+winmm::timeGetTime()'a geçerek GetTickCount gibi bir hız elde edebildim, ancak korkunç 16ms sınırı olmadan. Ancak Market ürünleri için böyle bir yol sıralanmıştır, çünkü. DLL. Milisaniyelik bir normal sürüm yapmanız pek olası değildir.

 
Renat Fatkhullin :

Tüm pencereleri simge durumuna küçültmek için MQL5 işlevi ve uygulamanın kendisi harika bir fikir. Hadi halledelim.

İşte başka bir şey.

bir VPS'de kendi başına bir terminal başlatırsa, o zaman burada her şeyin onunla aniden kesileceği gerçeğine şiddetle karşı çıkacaktır. RDP oturumundan ayrılırsa, kendisi pencereleri simge durumuna küçültebilir ve küçültmelidir.

Şimdi kısayol tuşuyla WinAPI katlama yoluyla yapıyorum. Çok uygun ve çok daha zararsız normal TerminalClose.
 
Renat Fatkhullin :


İşte söylemek istediklerime bir örnek.
Farklı brokerlerin her iki sunucusu da aynı alanda bulunur ve aynı konumda bulunabilir.
Birleşik Krallık'ta barındırılan AMP için hizmet haritası teklifleri.
Ve Just için, nedense NL'de teklif veriyor.
Niye ya? Daha yakın bir VPS varsa.

dfg

jt

 
fxsaber :

Bu argümanın sizi düşündüreceğini düşünüyorum. Danışman.


Yani her şey yavaşlamıyor. Bu nedenle, oldukça zararsız bir şekilde winmm::timeBeginPeriod(1)+winmm::timeGetTime()'a geçerek GetTickCount gibi bir hız elde edebildim, ancak korkunç 16ms sınırı olmadan. Ancak Market ürünleri için böyle bir yol sıralanmıştır, çünkü. DLL. Milisaniyelik bir normal sürüm yapmanız pek olası değildir.

Pekala, korelasyon ve makullük kontrolü olmadan stres testleri yapmakta ustasınız.

Elbette mikrosaniye ölçümü, kaynakların bir milisaniyeden 1000 kat daha az aralıkları ölçebilmesini gerektirir.

Periyodik olarak aralıkları doğru bir şekilde ölçmeniz gerekiyorsa, mikrosaniye kullanın. Ve size 0 mikrosaniyeye mal olacak.

Milyonlarca kez kendi kendini ölçmeye kararlıysanız, büyük olasılıkla kendinizi kandırıyorsunuz.


Boğulmuş bir VPS'de, sistem zamanlayıcısının timeBeginPeriod boyunca hız aşırtması doludur. Sadece CPU'nun maliyetini artıracaksınız:

Bu işlev, genel bir Windows ayarını etkiler. Windows, herhangi bir işlem tarafından istenen en düşük değeri (yani en yüksek çözünürlüğü) kullanır. Daha yüksek bir çözünürlük ayarlamak, bekleme işlevlerinde zaman aşımı aralıklarının doğruluğunu artırabilir. Bununla birlikte, iş parçacığı zamanlayıcı görevleri daha sık değiştirdiği için genel sistem performansını da azaltabilir. Yüksek çözünürlükler, CPU güç yönetim sisteminin güç tasarrufu modlarına girmesini de önleyebilir. Daha yüksek bir çözünürlük ayarlamak, yüksek çözünürlüklü performans sayacının doğruluğunu artırmaz.

Aksi takdirde, işletim sisteminde uzun zaman önce GetTickCount/GetTickCount64'ü doğru yaparlardı ve ücretsiz doğrulukla sevinirlerdi. Ama hayır, bu zamanlayıcının doğruluğu için ödeme yapmanız gerekecek.

 
Lütfen CHART_IS_MAXIMIZED frenlerini düzeltin. Artık WinAPI çözümü normalden çok daha hızlı değil.
 
Roman :

İşte söylemek istediklerime bir örnek.
Farklı brokerlerin her iki sunucusu da aynı alanda bulunur ve aynı konumda bulunabilir.
Birleşik Krallık'ta barındırılan AMP için hizmet haritası teklifleri.
Ve nedense Just teklifleri NL'de.
Niye ya? Daha yakın bir VPS varsa.

Sunucularımızın coğrafi noktalarını biliyoruz, ancak aracılık sunucularının konumlarını GeoIP veritabanlarından oluşturuyoruz.

Ve çoğu zaman bilgilerin doğru olmadığı olur. Bu nedenle, hiçbir durumda aracının puanının doğru şekilde gösterildiğini varsayamayız.

Soruyu cevaplamak için her şeyi manuel olarak iki kez kontrol etmemiz ve yeniden taramamız gerektiğinden yarın daha ayrıntılı olarak anlayacağız.

 
Renat Fatkhullin :

Bu ikili sanallaştırmanın bedeli.

Üstelik VirtualBox, tam teşekküllü bir Hyper-V tipi hiper yönetici değildir, ancak mevcut masaüstü işletim sisteminizin (Windows 7 de mi?)

Yani, sahip olduğunuz: Windows 7/10 -> VirtualBox -> Windows 7. Aslında, iki sanallaştırma düzeyi ve birincisi, sadece normal bir program olarak kabul edildiğinde VirtualBox'ın isteklerini bilmiyor. CPU kaynaklarının (iş parçacığı zamanlayıcı) tahsisi açıkça cehenneme.

Ve şöyle olmalı: Hyper-V 2016/2019 -> Windows 2016/2019

Hayır, CentOS'ta dönen sanal makinelerim var. Ama bu diyaloğu sürdürmek için yetkin değilim.