Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 320

 

Sevgili programcılar, lütfen söyleyin, kim bilir!

Toplam kâra ulaşıldığında bir sipariş paketini (500-2500) kapatan MT4 için bir uzman var. Ve fark ettiğim gibi, siparişleri birer birer kapatıyor, onları sihire göre sıralıyor - en küçükten en büyüğe.

İşte sorunun kendisi: Kapanış emirlerinin başlangıcında Expert Advisor'a, emirleri aynı şekilde kapatacak, yalnızca sondan büyüye göre - en büyükten en küçüğe doğru sıralayacak bir komut dosyası başlatma işlevi eklemek mümkün müdür ?

Ve bu fikir, siparişleri kapatma hızını artıracak mı?

Bir yerde, aynı anda sunucuya en fazla 4 istek gönderilebileceği söylendi.
 
Tapochun :
O zaman koda bakmanız gerekiyor ... belki içindedir ... baskılarda benzer bir satır var mı?
Yok. Daha önce, her şey soru sorulmadan test edildi ... başka ne olabileceğini söyle bana?


 
Novikov :

Sevgili programcılar, lütfen söyleyin, kim bilir!

Toplam kâra ulaşıldığında bir sipariş paketini (500-2500) kapatan MT4 için bir uzman var. Ve fark ettiğim gibi, siparişleri tek tek kapatıyor, onları sihire göre sıralıyor - en küçükten en büyüğe.

İşte sorunun kendisi: Kapanış emirlerinin başlangıcında Expert Advisor'a, emirleri aynı şekilde kapatacak, yalnızca sondan büyüye göre - en büyükten en küçüğe doğru sıralayacak bir komut dosyası başlatma işlevi eklemek mümkün müdür ?

Ve bu fikir, siparişleri kapatma hızını artıracak mı?

Bir yerde, aynı anda sunucuya en fazla 4 istek gönderilebileceği söylendi.

Bir Uzman Danışmandan komut dosyası çalıştırmak imkansızdır. Sunucuya aynı anda farklı uzmanlardan birkaç istek göndermek gerçekten mümkün. Birkaç Uzman Danışmanı senkronize ederseniz, performans artışı elde etmek gerçekten mümkündür.

Ama ben olsam alnımı açık kapıya vurmazdım. MetaTrader5'e geçmek daha iyi. Birkaç saniye içinde 100-200 sipariş gibi inanılmaz bir hızla gruplar halinde pozisyonları kapatmanıza izin veren bir OrderSendAsync işlevi vardır:

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

Geliştiriciler! Hata 10024 (Çok sık istekler)

C-4 , 2014.11.07 15:55

Genel olarak, küçük araştırmamın sonucunu özetliyorum.

50 milisaniyede 50 isteği iletmeyi başardı; 180 ms'de 100 talep; 2100 ms için 200; 9000 ms başına 500 talep; 23000 ms'de 1000 talep. (zamanlar ortalamadır). Onlar. Ne kadar çok zorlamanız gerekiyorsa, o kadar fazla zaman alır. Belki de kötü kodlamadan kaynaklanıyordur.

Bir uygulama paketinin gerçek yürütme süresi kesinlikle daha uzundur. Bu süre, en kötü duruma eşit gibi görünüyor. Emri gönderme zamanı + emri uygulama zamanı. Ancak her durumda, limitte, borsa tarafından ortalama emir yürütme süresi + ticaret sunucusuyla iletişim kurmak için geçen süreye eğilimlidir. 60'tan az emir varsa, işlem sunucusuyla iletişim kurmanıza gerek yoktur, tüm emirler gönderildi ve yürütülmesini bekliyoruz. Göndermenin kendisi 40-60 milisaniye sürer. Daha fazla uygulama varsa, burada daha zordur. Sunucunun yanıtını beklemeniz, istek göndermeyi yeniden açmanız, ret için beklemeniz vb. Onlar. ağ üzerinden böyle bir mesaj alışverişi var. Çok sayıda uygulama olduğunda, uygulamalar yürütülürken havuz kademeli olarak serbest bırakılır. Müteakip gönderiler, her biri bir veya iki uygulama olmak üzere küçük parçalar halinde gelir ve bu ağdır. Bu nedenle zaman artıyor. Genel olarak, kod doğru çalışıyor gibi görünüyor, sadece istek gönderme / alma mekanizmasını anlamanız gerekiyor.

Bu tür gönderimleri test eden kod aşağıda eklenmiştir.

ps Özetle, HFT ticareti için bile 60 uygulamanın fazlasıyla yeterli olduğunu söyleyebiliriz. Gerçekten de, ticaret eylemlerinin bilinçli bir analizi aslında gereklidir - bir başvuru gönderdiler, bir sonuç aldılar, ticaret ortamını analiz ettiler ve gerekirse yeni bir tane gönderdiler. Tüm döngü, 40-60 milisaniye ölçeğini + 1 isteğin ortalama yürütme süresini açıkça aşacaktır.


 
R0MAN :
Yok. Daha önce, her şey soru sorulmadan test edildi ... başka ne olabileceğini söyle bana?


Yeni verilerle test etmeyi deneyin. Başka bir terminalde başlatmayı denediniz mi?
 
Tapochun :
Yeni verilerle test etmeyi deneyin. Başka bir terminalde başlatmayı denediniz mi?
Numara. Bugün bx ile yeni bir tane kurdum. üzerinde test etmeye çalıştım. Bir tane daha deneyeceğim... Sonucu buraya yazarım.
 
C-4 :

Bir Uzman Danışmandan komut dosyası çalıştırmak imkansızdır. Sunucuya aynı anda farklı uzmanlardan birkaç istek göndermek gerçekten mümkün. Birkaç Uzman Danışmanı senkronize ederseniz, performans artışı elde etmek gerçekten mümkündür.

Ama ben olsam alnımı açık kapıya vurmazdım. MetaTrader5'e geçmek daha iyi . Birkaç saniye içinde 100-200 sipariş gibi inanılmaz bir hızla gruplar halinde pozisyonları kapatmanıza izin veren bir OrderSendAsync işlevi vardır:



Ve burada MT5 ve hatta daha fazla 100-200 sipariş? Peki MT5'teki diğer 100-200 siparişler neler? Bu, MT5'te 100-200 işlem enstrümanı demek! Sonuçta, 1 cihazda sadece 1 sipariş açılabilir - yanılmıyorsam!

Ve 28 enstrümanda ve aynı zamanda kısmen kilitli çok sayıda sipariş biriktiriyorum!

Sorunun konusuyla ilgili önerilecek bir şey var - minnettar olacağım, ancak soruyla ilgili olmayan bir şeyi tavsiye etmek gereksiz ve yapıcı değil!

 
C-4 :

Bir Uzman Danışmandan komut dosyası çalıştırmak imkansızdır. Sunucuya aynı anda farklı uzmanlardan birkaç istek göndermek gerçekten mümkün. Birkaç Uzman Danışmanı senkronize ederseniz, performans artışı elde etmek gerçekten mümkündür.

Ama ben olsam alnımı açık kapıya vurmazdım. MetaTrader5'e geçmek daha iyi. Birkaç saniye içinde 100-200 sipariş gibi inanılmaz bir hızla gruplar halinde pozisyonları kapatmanıza izin veren bir OrderSendAsync işlevi vardır:


Ö! Vasily, eğer buradaysa, soruma bak, teşekkür ederim.

 
R0MAN :
Ö! Vasily, eğer buradaysa, soruma bak, teşekkür ederim.

Hey! Baktım. Maalesef böyle bir hata ile hiç karşılaşmadım. Akla gelen tek şey, test cihazının geçmiş klasörünü kontrol etmektir, örneğin burada y:\MetaTrader 5\tester\bases\AdmiralMarkets-MT5\history\. Gerekli sembol için dosya yoksa, verileri y:\MetaTrader 5\Bases\AdmiralMarkets-MT5\ ana dizininden manuel olarak kopyalamayı deneyin ve test cihazını yeniden başlatın. Şimdiye kadar başka bir fikir yok.

ps Bütün bunlar tuhaf ama. Test eden kişi geçmişi otomatik olarak kopyalamalıdır. Ama sen asla bilemezsin.

 
C-4 :
Hey! Baktım. Maalesef böyle bir hata ile hiç karşılaşmadım. Akla gelen tek şey, test cihazının geçmiş klasörünü kontrol etmektir, örneğin burada y:\MetaTrader 5\tester\bases\AdmiralMarkets-MT5\history\. Gerekli sembol için dosya yoksa, verileri y:\MetaTrader 5\Bases\AdmiralMarkets-MT5\ ana dizininden manuel olarak kopyalamayı deneyin ve test cihazını yeniden başlatın. Şimdiye kadar başka bir fikir yok.
Sayesinde. Kampa geleceğim ve onunla ilgileneceğim ... şimdi cep telefonumdan.
 
Novikov :

Ve burada MT5 ve hatta daha fazla 100-200 sipariş? Peki MT5'teki diğer 100-200 siparişler neler? Bu, MT5'te 100-200 işlem enstrümanı demek! Sonuçta, 1 cihazda sadece 1 sipariş açılabilir - yanılmıyorsam!

Ve 28 enstrümanda ve aynı zamanda kısmen kilitli çok sayıda sipariş biriktiriyorum!

Sorunun konusu hakkında önerilecek bir şey var - minnettar olacağım, ancak soruyla ilgili olmayan bir şeyi tavsiye etmek gereksiz ve yapıcı değil!

Bir kez daha (dikkatlice okuyun):

MetaTrader4'te emirleri yalnızca sırayla kapatabilirsiniz: bir emri kapatmak için bir emir gönderin, yürütülmesini bekleyin, bir sonraki emre geçin, vb. Bu nedenle, MetaTrader4'te bir grup siparişi kapatma süresi önemlidir ve önemsiz bir şekilde azaltılamaz. Ancak, her biri kendi grafiğinize birkaç Uzman Danışman yükleyebilir ve birbirleriyle bilgi alışverişinde bulunmalarını ve ortak bir komutla siparişleri kapatmalarını sağlayabilirsiniz. Her Uzman Danışman, siparişleri yalnızca kendi enstrümanında kapatır. MetaTrader4'te birkaç işlem akışı olması nedeniyle, birbirlerini engellemezler ve birbirine paralel emirler gönderirler, bu nedenle genel hız önemli ölçüde artar. Ancak, böyle bir uzman havuzunun organizasyonu zordur ve bilgi seviyenize bakılırsa size böyle bir şey tavsiye etmem.

Hala çok fazla saçmaladığımı düşünüyorsanız, işte kısa bir özet:

1. Sorunuzun cevabı olumsuz, senaryoyu bir uzmandan çalıştıramazsınız.

2. MetaTrader4'te işlem emirlerinin yürütme hızını karmaşık yöntemlere başvurmadan artırmak mümkün değildir.

3. Sorunuza normal bir çözüm ancak MetaTrader4'te bulunmayan OrderSendAsync işlevi yardımıyla mümkündür.

Neden: