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

 
Anton :

Test kodu:

Bu kod, yazarın sorunu anlamadığını gösterir.

İspat et.
 // Классический SYMBOL_BID vs Альтернативный SYMBOL_BID.
// Запускать только на демо-счетах.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

bool GetPosition( const int Type = OP_BUY )
{
   bool Res = false ;
  
   for ( int i = PositionsTotal () - 1 ; (i >= 0 ) && !Res; i--)
    Res = PositionGetTicket (i) && ( PositionGetInteger ( POSITION_TYPE ) == Type) && 
                                  ( PositionGetString ( POSITION_SYMBOL ) == _Symbol );
                                  
   return (Res);
}

// Альтернативный способ получения Bid-цены текущего символа.
// Запускать только на демо-счетах.
double GetBid()
{
   static const TICKET_TYPE Ticket = GetPosition() ? PositionGetInteger ( POSITION_TICKET ) : OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, 0 , 0 , 0 );
  
   return ( PositionSelectByTicket (Ticket) ? PositionGetDouble ( POSITION_PRICE_CURRENT ) : 0 );
}

#define TOSTRING(A) ", " #A + " = " + ( string )(A)

#define MACROS(A, B)                                              \
   const ulong StartTime ##A = GetMicrosecondCount ();               \
   const double A = B;                                             \
   const ulong Interval ##A = GetMicrosecondCount () - StartTime ##A; \
                                                                  \
   if (Interval ##A > 100 )                                          \
    Time ##A += ( long )Interval ##A;  

long TimeBid1 = 0 ; // Суммарное время на длительный SYMBOL_BID
long TimeBid2 = 0 ; // Суммарное время на длительный GetBid()

const bool Init = EventSetTimer ( 10 ) && GetBid(); // Будем выводить статистику каждый 10 секунд.

void OnTimer ()
{
   // На сколько отстает один вариант от другого по времени выполнения.
   Alert (TOSTRING(TimeBid1 - TimeBid2) + " mcs." + TOSTRING(TimeBid1) + TOSTRING(TimeBid2));
}

void OnTick ()
{  
   const uint StartTime = GetTickCount ();
  
//  return;
  
   while (! IsStopped () && ( GetTickCount () - StartTime < 10000 ))
  {
    MACROS(Bid1, SymbolInfoDouble ( _Symbol , SYMBOL_BID ))
    MACROS(Bid2, GetBid())
      
//    if (Bid1 != Bid2)
//      Alert("Error!" + TOSTRING(Bid1) + TOSTRING(Bid2));
    
//    Sleep(0); // Специально убрал.
  }
}

Bu EA, mevcut sembolün Teklif fiyatını iki şekilde alır. Her biri için uzun süredir devam eden davaların yürütme süresini özetliyor. Ve sonra aralarındaki farkı gösterir.


6/8 Temsilci yüklendi. Ve bu Expert Advisor'ı RannForex-Server demo sunucusunda altı çizelgede (farklı semboller) başlattım. Sonuç.

 2020.10 . 26 16 : 10 : 40.596 Test9 (EURNZD,H1)       Alert : , TimeBid1-TimeBid2 = 236507295 mcs. , TimeBid1 = 246491044 , TimeBid2 = 9983749
2020.10 . 26 16 : 10 : 42.596 Test9 (CAC40,H1)         Alert : , TimeBid1-TimeBid2 = 235249710 mcs. , TimeBid1 = 241768964 , TimeBid2 = 6519254
2020.10 . 26 16 : 10 : 44.267 Test9 (DAX30,H1)         Alert : , TimeBid1-TimeBid2 = 243552816 mcs. , TimeBid1 = 253424672 , TimeBid2 = 9871856
2020.10 . 26 16 : 10 : 44.382 Test9 (DJI30,H1)         Alert : , TimeBid1-TimeBid2 = 265778370 mcs. , TimeBid1 = 272279313 , TimeBid2 = 6500943
2020.10 . 26 16 : 10 : 44.623 Test9 (ASX200,H1)       Alert : , TimeBid1-TimeBid2 = 210921561 mcs. , TimeBid1 = 219901110 , TimeBid2 = 8979549
2020.10 . 26 16 : 10 : 44.732 Test9 (FTSE100,H1)       Alert : , TimeBid1-TimeBid2 = 226824499 mcs. , TimeBid1 = 235809635 , TimeBid2 = 8985136

SYMBOL_BID'yi yürütmek için toplam sürenin ( TimeBid1 ), Teklif fiyatının alternatif alımına katastrofik bir şekilde (TimeBid2) kaybettiğine dair tam bir kanıtımız var.


Güncel fiyatları elde etmek için böyle bir koltuk değneği çözümü, performans açısından MQL5'in en önemli işlevidir. Bu kanıta katılıyor musunuz?


Bu anlamlı koltuk değneğinin daha önce aklıma gelmemiş olması üzücü.


Not: Danışmanın çalışması için algo ticaretine izin vermeniz gerekir. Bu nedenle, yalnızca demo hesaplarda çalıştırın.

 
fxsaber :

Bu EA, mevcut sembolün Teklif fiyatını iki şekilde alır.

POSITION_PRICE_CURRENT Anlık Görüntü mü?

Peki neyi neye benzetiyoruz? Terminale bilinen son fiyatı alarak son kaydedilen (ne zaman?) fiyatı alma?

Eh, doğrudan 8 çekirdekten 6'sı dediler. Neden bu tür testler?

 
fxsaber :

Bu kod, yazarın sorunu anlamadığını gösterir.

İfadeniz bariz olanı görmek istemediğinizi kanıtlıyor.

Bu kod, "SymbolInfoTick frenleri" olmadığını gösterir.

Az ya da çok modern donanımda SymbolInfoTick'in yürütme süresi 1 mikrosaniyeyi geçmez.

Bu EA, mevcut sembolün Teklif fiyatını iki şekilde alır. Her biri için uzun süredir devam eden davaların yürütme süresini özetliyor. Ve sonra aralarındaki farkı gösterir.

6/8 Temsilci yüklendi. Ve bu Expert Advisor'ı RannForex-Server demo sunucusunda altı çizelgede (farklı semboller) başlattım. Sonuç.

SYMBOL_BID'yi yürütmek için toplam sürenin ( TimeBid1 ), Teklif fiyatının alternatif alımına katastrofik bir şekilde (TimeBid2) kaybettiğine dair tam bir kanıtımız var.

Güncel fiyatları elde etmek için böyle bir koltuk değneği çözümü, performans açısından MQL5'in en önemli işlevidir. Bu kanıta katılıyor musunuz?

Bu anlamlı koltuk değneğinin daha önce aklıma gelmemiş olması üzücü.

Not: Danışmanın çalışması için algo ticaretine izin vermeniz gerekir. Bu nedenle, yalnızca demo hesaplarda çalıştırın.

Hayır, bu kanıt değil. Ciddiye alınamayacak kesinlikle kirli bir test.

Ayrıntılı olarak analiz bile etmeyeceğim, GetMicrosecondCount() aracılığıyla ve yine 4 çekirdekli bir CPU'da “Loaded 6/8 Agents” arka planına karşı tek bir çağrının süresini tekrar ölçmeniz yeterli.

"x++" uygulamasında hayali frenler bulmanın mümkün olduğunu yukarıda açıkça gösterdim.

"SymbolInfoTick frenler" hakkındaki iddianız, çok basit ve açık olan kodum tarafından basitçe kontrol edildi ve reddedildi.

SymbolInfoTick'in orijinal uygulaması yeterince hızlı olmasına rağmen, stresli çok iş parçacıklı bir yük altında tek tek iş parçacıklarında tek yürütme süresi sıçramalarına gerçekten izin verdi.

Son yapılanmalarda bu eksiklikten de yoksundur.

Ne hakkında konuştuğunu tam olarak bilen biriyle tartışmaya devam etmen inanılmaz. uygulamaları görür ve bunları çeşitli modlarda profilleyebilir.

"İstiridye ve hindistancevizi tadı hakkında onları yiyenlerle tartışalım."

 
Andrey Khatimlianskii :

POSITION_PRICE_CURRENT Anlık Görüntü mü?

Numara. MT4Orders sadece pozisyon vermek için kullanılır.

Peki neyi neye benzetiyoruz? Terminale bilinen son fiyatı alarak son kaydedilen (ne zaman?) fiyatı alma?

Piyasa İzleme ve pozisyondan fiyat alma süresini karşılaştırın. Fiyatlar uyumlu tabii.

Eh, doğrudan 8 çekirdekten 6'sı dediler. Neden bu tür testler?

Sadece körler bile bir sorun olduğunu görsün diye. Teklif fiyatı pozisyon boyunca yavaşlamadığında ve SymbolInfoTick korkunç bir şekilde geciktiğinde bu saçmalıktır.


Forum üyelerinin desteği olmadan bu MQ duvarının yıkılamayacağını hissediyorum. Kod kısa, profesyoneller hızlı hareket etmeli. Orada kusur yok. Pozisyonlar aracılığıyla fiyatların Piyasa İzleme'den çok daha hızlı elde edildiği açıkça gösterilmektedir. MQ bariz olanı nasıl görmüyor - anlamıyorum.

 
Anton :

Açıklamanız bariz olanı görmek istemediğinizi kanıtlıyor.

Bu kod, "SymbolInfoTick frenleri" olmadığını gösterir.

Az ya da çok modern donanımda SymbolInfoTick'in yürütme süresi 1 mikrosaniyeyi geçmez.

Hayır, bu kanıt değil. Ciddiye alınamayacak kesinlikle kirli bir test.

Ayrıntılı olarak analiz bile etmeyeceğim, GetMicrosecondCount() aracılığıyla ve yine 4 çekirdekli bir CPU'da “Loaded 6/8 Agents” arka planına karşı tek bir çağrının süresini tekrar ölçmeniz yeterli.

"x++" uygulamasında hayali frenler bulmanın mümkün olduğunu yukarıda açıkça gösterdim.

"SymbolInfoTick frenler" hakkındaki iddianız, çok basit ve açık olan kodum tarafından basitçe kontrol edildi ve reddedildi.

SymbolInfoTick'in orijinal uygulaması yeterince hızlı olmasına rağmen, stresli çok iş parçacıklı bir yük altında tek tek iş parçacıklarında tek yürütme süresi sıçramalarına gerçekten izin verdi.

Son yapılanmalarda bu eksiklikten de yoksundur.

Ne hakkında konuştuğunu tam olarak bilen biriyle tartışmaya devam etmen inanılmaz. uygulamaları görür ve bunları çeşitli modlarda profilleyebilir.

"İstiridye ve hindistancevizi tadı hakkında onları yiyenlerle tartışalım."

Koda bakmamışsınız. Beceriksizliğe inanmıyorum.

   if ( Interval ##A > 100 )                                          \
    Time ##A += ( long )Interval ##A;

Bu, yalnızca yürütmenin 100 µs'den fazla sürmesi durumunda dikkate alındığı bir durumdur. Bunun küçük bir değer olduğunu düşünüyorsanız, daha fazlasını yapın. Etkisi aynıdır.

Karşılaştırılan her iki fonksiyon da kesinlikle eşit koşullardadır. Biri yavaşlıyor, diğeri değil. Kodun neyi ölçtüğüne bir kez daha bakın.


Şu anda, muharebe danışmanlarında SymbolInfoTick'in önerilen koltuk değneği ile değiştirilmesi, mevcut fiyatların elde edilmesiyle ilgili neredeyse tüm frenleri ortadan kaldırıyor. Çılgınca, ama ne yazık ki doğru.


ZY OnTick'teyken dikkat ederim. OnTick kabul edildikten sonra gelen keneleri yakalamak için özel olarak yapılmıştır. Kod birdenbire yazılmadı. Bu, ideal koşullar altında hastanedeki ortalama sıcaklığın ölçülmesiyle tamamen yapay bir döngü değildir.

 
fxsaber :

Forum üyelerinin desteği olmadan bu MQ duvarının kırılamayacağını hissediyorum. Kod kısa, profesyoneller hızlı hareket etmeli. Orada kusur yok. Pozisyonlar aracılığıyla fiyatların Piyasa İzleme'den çok daha hızlı elde edildiği açıkça gösterilmektedir. MQ bariz olanı nasıl görmüyor - anlamıyorum.

Görünüşte, kodda gerçekten hiçbir hata yoktur, bu nedenle SymbolInfoTick , açık bir pozisyonun fiyatını almaya kıyasla yavaşlar.

bir pozisyondan fiyat almak için harika bir hile, bitirmezdim ve böyle bir fark olabileceğini asla tahmin bile edemezdim
 
fxsaber :

Sadece körler bile bir sorun olduğunu görsün diye. Teklif fiyatı pozisyon boyunca yavaşlamadığında ve SymbolInfoTick korkunç bir şekilde geciktiğinde bu saçmalıktır.

Piyasa saatinde bir sembol olduğunda ve onlarca sembol olduğunda SymbolInfoTick'i test etmeyi deneyin, ancak bir enstrüman talep edin - örneğiniz gibi

sunucudan sıkıştırılmış trafiğin gelme olasılığı yüksektir ve veriler paketten çıkarıldığında bu periyodik SymbolInfoTick frenleri görünür

onlar. çok sayıda karakter olduğunda, test süresinde daha sık veya derin düşüşler olacaktır.


ve buna göre, eğer bu doğrulanırsa, tüm mimariyi yeniden yapmak .... şüpheli bir zevk

 
Igor Makanu :

Piyasa saatinde bir sembol olduğunda ve onlarca sembol olduğunda SymbolInfoTick'i test etmeyi deneyin, ancak bir enstrüman talep edin - örneğiniz gibi

sunucudan sıkıştırılmış trafiğin gelme olasılığı yüksektir ve veriler paketten çıkarıldığında bu periyodik SymbolInfoTick frenleri görünür

onlar. çok sayıda karakter olduğunda, test süresinde daha sık veya derin düşüşler olacaktır.

Bu hipotez, Piyasa İzleme'deki fiyatların emir defteri fiyatlarından geride kaldığı (ve tam tersi) bu durumda geçerlidir. Ancak şimdilik, fiyat uygunluğu konusuna değinmeden sadece SymbolInfoTick'in Terminal içindeki frenlerinden bahsediyoruz.

 
fxsaber :

Karşılaştırılan her iki fonksiyon da kesinlikle eşit koşullardadır.

En azından, SymbolInfoDouble'dan sonra GetBid çağrılır. Değiştirirseniz sonuç değişmez mi?

Bir şey bana POSITION_PRICE_CURRENT'in kaydedilen fiyatı aldığını ve yeni olanı almaya çalışmadığını söylüyor.

Eh, tekrar ediyorum, %80 yüklü işlemcide test etmenin bir anlamı yok. Gerekli işlevleri değil, işlemcinin performansını ve kaynakların Windows tarafından dağılımını test ediyoruz.

 
Andrey Khatimlianskii :

En azından, SymbolInfoDouble'dan sonra GetBid çağrılır. Değiştirirseniz sonuç değişmez mi?

Yayınlanmadan önce bile bununla denendi. Sonuç üzerinde etkisi yok.

Bir şey bana POSITION_PRICE_CURRENT'in kaydedilen fiyatı aldığını ve yeni olanı almaya çalışmadığını söylüyor.

İşin aslı, MQL programlarının Terminale gelen son fiyata ihtiyacı var, başka bir şeye değil. Terminale bir işaret geldiğinde, tüm tabloları pozisyonlar/siparişler ile otomatik olarak günceller.

Eh, tekrar ediyorum, %80 yüklü işlemcide test etmenin bir anlamı yok. Gerekli işlevleri değil, işlemcinin performansını ve kaynakların Windows tarafından dağılımını test ediyoruz.

Ana koşul, her iki işlev için ortamın kimliğidir. CPU yükü, tutarsızlıkların görünürlüğünde daha belirgin bir faktördür.

Paralel olarak, 20 Uzman Danışman bazen aynı anda SymbolInfoTick'i arayabilir, ardından milisaniyelik bir yük patlaması olur ve gecikmeler ortaya çıkar. Sorunun hemen farkedilmesi için bunu açıkça yapmayı önerdim.


Tekrar ediyorum, test koşulları her iki fonksiyon için de aynıdır. Hakikat.

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

MT5 ve iş başında hız

fxsaber , 2020.10.26 17:53

Şu anda, muharebe danışmanlarında SymbolInfoTick'in önerilen koltuk değneği ile değiştirilmesi, mevcut fiyatların elde edilmesiyle ilgili neredeyse tüm frenleri ortadan kaldırıyor . Çılgınca, ama ne yazık ki doğru.

Neden: