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

 
Valeriy Yastremskiy :

Terminalin belleğinin terminal programlarının, µl, tix ve diğerlerinin belleğine eklendiğini doğru anlıyorum.

Numara. Just CopyTicks, 10 saniye boyunca istenen kenelerin önbelleğini tutar. Örneğin, 3 GB bellek talep ettiyseniz, Terminal bu 3 GB'ı önbellekte saklayacaktır. Toplamda, Terminal 6 GB tüketecektir. ArrayFree yaparsanız ve başka bir sembol için 3 GB talep ederseniz, Terminal 9 GB tüketecektir. Vb.

 
Valeriy Yastremskiy :

Terminalin belleğinin terminal programlarının, µl, tix ve diğerlerinin belleğine eklendiğini doğru anlıyorum.

Kesinlikle.
 
Formülü kullanarak birkaç sembolün onay geçmişine dayalı olarak özel bir sembol oluşturan bir komut dosyası yapmanız gerekir.
 MqlTick Formula( const MqlTick &Symbol1_Tick
                 const MqlTick &Symbol2_Tick,
                 const MqlTick &Symbol3_Tick,
                 const MqlTick &Symbol4_Tick,
                 const MqlTick &Symbol5_Tick );

Bir milyar kene için bile 100 MB RAM bu sorunu çözmek için yeterli olacak gibi görünüyor. Ancak MT5'te bu görev CopyTicks kullanılarak çözülemez.

Böyle bir koltuk değneği yapılır:

  1. CopyTicks, her bir sembol için ayrı ayrı çağrılır (ve her çağrıdan sonra her zaman önbelleğin temizlenmesini bekler), kenelerin geçmişini FileSave aracılığıyla ilgili dosyalarına yazar.
  2. Daha sonra bu dosyalardan keneler okunur ve bunlara Formül çağrılır.

Evet, bu korkunç bir koltuk değneği ama başka seçenek yok. Onlar. CopyTicks ile doğrudan çalışamazsınız. Kene dosya arşivlerini kullanmak gereklidir.


En büyük RAM tüketimi 1. adımda olacaktır. Her aramadan sonra önbelleğin serbest bırakılmasını beklemek koşuluyla bile. Aynı zamanda 2. madde. ücretsiz yapılacak!

 

Her biri birkaç danışmana sahip 8 çiftte aynı anda işlem yapılıyor. Ve genel olarak kaynaklar açısından iyi görünse de, belleğin% 25'inden fazlası meşgul değil, işlemci% 10'dan fazla yüklenmedi, gecikmeler gözle fark edilir, örneğin birkaç saniye içinde yeni bir grafik açılır ve genel olarak ticaret için. Belki bazı en iyi uygulamalar vardır, en azından tez, daha hızlı çalışması için tüm bunlar nasıl paketlenebilir? Birkaç Uzman Danışmanı sanallaştırdığınızı biliyorum. Buradaki tuzaklar nelerdir? Ticaret emirleri nasıl gönderilir ? Nelere dikkat edilmeli?

PS Ben kendim Sanal aracılığıyla senkronizasyonu ve MT4Orders aracılığıyla ticaret, grafik başına 1 Uzman Danışman kullanıyorum.

 
fxsaber :

karşılıklı. VPS'nizi alalım. Piyasa tarayıcıları üzerinde çalışamaz.

Tehdit Birkaç ay boyunca meydana gelen donmalardan kurtulmak güzel olurdu. Bu betiği sonsuz RAM'e sahip bir makinede çalıştırın. Örneğin, 1 Haziran'dan itibaren tek karakterli keneler indiremiyorum. Sadece CopyTicks'i sıfır kaynak tüketimiyle kapatıyor.

Kilitlendiğinde terminalin bir dökümünü alın. Bakalım nedeni neymiş.

 
traveller00 :

Her biri birkaç danışmana sahip 8 çiftte aynı anda işlem yapılıyor. Ve genel olarak kaynaklar açısından iyi görünse de, belleğin% 25'inden fazlası meşgul değil, işlemci% 10'dan fazla yüklenmedi, gecikmeler gözle fark edilir, örneğin birkaç saniye içinde yeni bir grafik açılır ve genel olarak ticaret için. Belki bazı en iyi uygulamalar vardır, en azından tez, tüm bunlar daha hızlı çalışması için nasıl paketlenebilir?

Yeni MT4Orders'ı kullanın (bu dalın oluşturulmasından sonra geçmişle çalışmanın hızlandırıldığı yer) ve mevcut ortamın anlık görüntüsünü alın: siparişler ve pozisyonlar. Her şey benim için uçuyor.

Birkaç Uzman Danışmanı sanallaştırdığınızı biliyorum. Buradaki tuzaklar nelerdir? Ticaret emirleri nasıl gönderilir ? Nelere dikkat etmeli?

Her şeyi senkronize OrderSend aracılığıyla yapıyorum ama aynı zamanda MT5 kontrollerini devre dışı bırakıyorum.

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

Kitaplıklar: MT4Orders

fxsaber , 2020.09.29 08:45

Böyle bir çizgi

MT4ORDERS::OrderSend_MaxPause = 0 ; // Отключение проверки корректности работы MT5-OrderSend.

hepsini kapatabilirsiniz. MT5 ticaret geçmişi yavaşlarsa faydalı olabilir, çünkü. MT4Orders, bazen bu geçmişe erişerek MT5-OrderSend'i doğrular (hatta düzeltir).

Bunu yapmanı tavsiye etmem.


Her kümeye (giriş parametreleri kümesine) kendi Sanalı verilir. Senkronizör tüm Sanallardan geçer ve her biri için senkronizasyon yapar. Bunu ilk Sanaldan değil, bir döngüde yapmak gerekir.

Herhangi bir OrderSend'i çağırdıktan sonra (eşzamanlayıcının içinde), mutlaka bir anlık görüntü alınır ve OrderSend yürütmesi sırasında gelen (tüm Sanallara) yeni onay işaretleri eklenir. Onlar. herhangi bir varsayımsal duraklamadan sonra - her şeyi taze yaparız.

Her seferinde yalnızca CopyTicks aracılığıyla yeni keneler alınır. Yönlendirme için SymbolInfoTick yok. Aynı zamanda, CopyTicks_LastTick.time_msc < SymbolInfoTick.time_msc (çağrılar birbiri ardına (herhangi bir sırayla) olsa bile sık sık olur) olup olmadığı kontrol edilir, ardından senkronizör açılmaz. Aksi takdirde, gerçek hayatta limit sınırının yerine getirildiğini ancak sanalda olmadığını görebilirsiniz. Ve senkronizasyon sorunları olacaktır.

Anlık görüntüler VIRTUAL::Snapshot kullanılarak yapılır. Belirgin hıza ek olarak, bu aynı zamanda sembolünüzü diğerlerinden ayırmanıza izin verir - oraya sadece sembolünüz gelir. Bu daha fazlasını verir. hız. Ayrıca, anlık görüntüde yalnızca geçmiş devre dışı bırakılmaz,

 #define VIRTUAL_SNAPSHOT_WITHOUT_HISTORY // Отказ от снепшота истории для повышения производительности

aynı zamanda doldurulması geçmişe erişim gerektiren alanlar (aşağıda işaretlenmiştir).

 #define MACROS(A) this . ##A = ::Order ##A();

   bool ORDERS::Copy( const bool WithoutHistory = false )
  {
    MACROS(CloseTimeMsc)

     if (WithoutHistory && ! this .CloseTimeMsc) // Для исторических ордеров оставляем все без изменений.
    {
       const string Str = NULL ;
       this . comment = Str;

       this . Commission = 0 ;
       this . OpenPriceRequest = this .OpenPrice;
    }
     else // В MT4Orders требуется обращение к истории.
    {
       const string Str = ::OrderComment();
       this .comment = Str;

      MACROS(Commission)
      MACROS(OpenPriceRequest)
    }

LastDeal.time_msc'nin LastTick.time_msc'den büyük olmadığından emin olmak için daha önce kontroller yaptım. Bu koşulun karşılanmadığı durumlarda, bariz nedenlerle senkronizasyonu reddetti. Ancak böyle bir kontrol çok fazla kaynak tüketir (tarihle çalışır), bu yüzden reddettim.


İşlem On-fonksiyonu - OnTick.


Muhtemelen ana olanları listeledi.

 

Senkronize, anladığım kadarıyla, sadece OrderSend değil, aynı zamanda tüm ticaret emirleri de dahil olmak üzere değiştirme, silme vb.


SymbolInfoTick, kenelerin sırası bozulabileceğinden iletilmiyor mu? Ve CopyTicks tam olarak doğru sırada.


SymbolInfoTick'in sadece zamanı kontrol etmek için gerekli olduğu ortaya çıktı ve bu kadar mı? Tüm ticaret ve benzeri işlemler yalnızca CopyTicks üzerinden mi yapılır?


Birden fazla Uzman Danışmanı 1'e 1 grafikte toplamaya çalışmak mantıklı mı? İmkansız bir şey değil, ama ortalığı karıştırmaya ve yeniden yazmaya değer mi, yoksa kâr minimum mu olacak anlamaya çalışıyorum.

 
traveller00 :

Birden fazla Uzman Danışmanı 1'e 1 grafikte toplamaya çalışmak mantıklı mı? İmkansız bir şey değil, ama ortalığı karıştırmaya ve yeniden yazmaya değer mi, yoksa kâr minimum mu olacak anlamaya çalışıyorum.

Kâr nereden gelebilir? Herkes bunlardan herhangi birinin alım satım işlemini bekliyor olacak.

Eh, sadece daha az paralelleştirme.

Bir sipariş önbelleği tutulamadığı sürece, ancak faydası şüphelidir..

 
Anton :

Kilitlendiğinde terminalin bir dökümünü alın. Bakalım nedeni neymiş.

Sorunu yeniden üreten kod konusunda kısa mısınız? Yoksa çoğalmıyor musunuz?

 
traveller00 :

Senkronize, anladığım kadarıyla, sadece OrderSend değil, aynı zamanda tüm ticaret emirleri de dahil olmak üzere değiştirme, silme vb.

MT5-OrderSend'i kastetmiştim.

SymbolInfoTick, kenelerin sırası bozulabileceğinden iletilmiyor mu? Ve CopyTicks tam olarak doğru sırada.

Çünkü delikler olacak.

SymbolInfoTick'in sadece zamanı kontrol etmek için gerekli olduğu ortaya çıktı ve bu kadar mı?

Evet.

Tüm işlemler ve benzeri işlemler yalnızca CopyTicks üzerinden mi yapılır?

Bir tek.

Birden fazla Uzman Danışmanı 1'e 1 grafikte toplamaya çalışmak mantıklı mı? İmkansız bir şey değil, ama ortalığı karıştırmaya ve yeniden yazmaya değer mi, yoksa kâr minimum mu olacak anlamaya çalışıyorum.

Benim için bu çok büyük bir yardım.


Her tek geçiş (tek test modunda), girişlerini sonunda aynı dosyaya yazar. Bu nedenle, Optimizasyondan sonra bazı geçişleri görüntüledikten sonra, bu geçişlerin verilerini içeren bir dosya alıyorum. Ayrıca bu dosyada onları filtreliyorum, sadece sevdiğim şeyleri bırakıyorum. Ve bu dosyayı savaş robotunun başlangıcındaki FileSelectDialog aracılığıyla seçiyorum. Böylece portföy ticareti yapıyor.


Optimizasyonun 20 dakika sürdüğü ortaya çıktı. Görüntüleme geçişleri - 3 dakika. Filtreleri 3 dakikadır. Savaş çalışmasına başlamak - saniyeler. Robotun derlenmesi gerekmez. Sürümleri ve çizelgeleri takip edin - aynı şekilde.

Başlangıçta, her setin Raporunu görüyorum. Her zaman karşılık gelen sanalın durumunu ve gerçek dünyadan adaşını görebilirim ve kısayol tuşuyla hem sanal hem de gerçek için ayrıntılı bir HTML Raporu. Tek bir set olarak ve tüm portföy.


Sanalların alım satım istatistikleri özel olarak hızlı yazıldığı için (klavyeden) hızlı bir şekilde setleri birbirleriyle karşılaştırmak mümkündür.

Dosyalar:
clip0184.gif  64 kb