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

 
Renat Fatkhullin :

Sadece 5000 ve unlim olmak üzere iki durumunuz mu var?

Kendi mutluluğunuzun mimarı sizsiniz.

Evet, ya tam kontrole ya da yüzeyselliğe ihtiyacınız var. Ara seçeneklerde noktayı göremiyorum.
 
Renat Fatkhullin :

Teorik olarak, evet.

Senkronizasyon işlemlerini unutmayınız. Platformdaki çok sayıda işlem eşzamansızdır.

Örneğin, bir borsa veya likidite sağlayıcısı olan bir entegrasyon ağ geçidi, saniyeler hatta dakikalarca gecikmeli işlemler hakkında raporlar gönderebilir. Çoğu zaman, apis, doğrulama için geçmişe erişim sağlamaz, ancak yavaş ve gerçek zamanlı olmayan rapor oluşturucular sağlar.

Piyasanın açılışında veya beklenmeyen bir ağ geçidinin yeniden bağlanması nedeniyle, raporlar gecikmeli olarak alınabilir. Sunucudaki geçmişe kopyalanırlar ve anında eşzamansız olarak terminallere gönderilirler. Tarihe göre sıralama nedeniyle, doğru yerlere eklenirler ve şu anda yeni fırsatlar açabilirsiniz.

Çoğu entegrasyon API'si o kadar cahil ve işlevsel değildir ki, garantili ağ geçitleri oluşturmayı neredeyse tamamen imkansız hale getirirler. Bunun geliştiricileri tarafından kasıtlı sabotajın bir ürünü olduğuna dair bir görüş olmasına rağmen.

Belki sana seçme hakkı verir? Kimin fiziksel enstantanelere ihtiyacı var ve kimin ilgili risklerle endekslerle çalışması gerekiyor.

 
Bu konuyla ilgili olmayan yorumlar " MQL5 MT5 MetaTrader 5 Yeni Başlayanlardan Sorular " bölümüne taşındı.
 
fxsaber :

Belki sana seçme hakkı verir? Kimin fiziksel enstantanelere ihtiyacı var ve kimin ilgili risklerle endekslerle çalışması gerekiyor.

Ve Expert Advisor'da yerel bir önbellek tutmanın ve son güncelleme zamanına göre bir seçim yapmanın sorunu nedir? Bunu yapıyorum ve frenler asla bununla ortaya çıkmadı. Ağ işlevlerim, eşzamanlı uygulamaları nedeniyle tüm arayüzü yavaşlatıyor, WebRequestAsync'in kutudan çıkması harika olurdu, ancak zaten DLL'lere ve hatta C++ sarmalayıcılarına sahip bir grup python'a çok bakıyorum çünkü. python'da bir ticaret API'si var :)

Ancak yerel önbelleğe alma olmadan büyük miktarda veriyle çalışmak çok garip.

not. Genel olarak, hashmap'ler ve önbelleğe alma, çoklu para biriminde büyük talep görüyor ve bu nedenle bu konudaki yukarıdaki kutudan normal (hızlı okuma) hashmap'ler istedim.
Документация по MQL5: Сетевые функции / WebRequest
Документация по MQL5: Сетевые функции / WebRequest
  • www.mql5.com
Для использования функции WebRequest() следует добавить адреса серверов в список разрешенных URL во вкладке "Советники" окна "Настройки". Порт сервера выбирается автоматически на основе указанного протокола - 80 для "http://" и 443 для "https://". Функция WebRequest() является синхронной, это означает, что она приостанавливает выполнение...
 
Andrey Pogoreltsev :

Ve Expert Advisor'da yerel bir önbellek tutmanın ve son güncelleme zamanına göre bir seçim yapmanın sorunu nedir?

Senaryo bunu yapıyor.

Yerel önbelleğe gelince, geçmiş MT4Orders'ta uygulanır .

 
fxsaber :

Yerel önbelleğe gelince, geçmiş MT4Orders'ta uygulanır .

İki yaşında olan senaryoyu beklemiyordum.

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

SiparişKapatTime Uzman Danışman MQL5

fxsaber , 2018.07.06 00:49

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

void LastTimeMQL4( datetime &OpenTime, datetime &CloseTime )
{
   for ( int i = OrdersHistoryTotal() - 1 ; i >= 0 ; i--)
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
    {
      OpenTime = OrderOpenTime();
      CloseTime = OrderCloseTime();
      
       break ;
    }
}

void LastTimeMQL5( datetime &OpenTime, datetime &CloseTime )
{
   if ( HistorySelect ( 0 , INT_MAX ))
  {
     for ( int i = HistoryDealsTotal () - 1 ; i >= 0 ; i--)
    {
       const ulong Ticket = HistoryDealGetTicket (i);
  
       if ( HistoryDealGetInteger (Ticket, DEAL_ENTRY ) == DEAL_ENTRY_OUT )
      {
        CloseTime = ( datetime ) HistoryDealGetInteger (Ticket, DEAL_TIME );

         if ( HistorySelectByPosition ( HistoryDealGetInteger (Ticket, DEAL_POSITION_ID )))
          OpenTime = ( datetime ) HistoryDealGetInteger ( HistoryDealGetTicket ( 0 ), DEAL_TIME );
          
         break ;
      }
    }
  }
}

typedef void (*GetLastTime)( datetime &, datetime & );

void Bench( GetLastTime LastTime, const int Amount = 10000 )
{
   datetime OpenTime, CloseTime;
   datetime Tmp = 0 ;

   for ( int i = 0 ; i < Amount; i++)
  {
    LastTime(OpenTime, CloseTime);
    
    Tmp += CloseTime - OpenTime;        
  }
  
   Print (Tmp);
}

#define BENCH(A)                                                              \
{                                                                             \
   const ulong StartTime = GetMicrosecondCount ();                              \
  A;                                                                          \
   Print ( "Time[" + #A + "] = " + ( string )( GetMicrosecondCount () - StartTime)); \
}

#define PRINT(A) Print ( #A + " = " + ( string )(A))

void OnStart ()
{  
   if ( HistorySelect ( 0 , INT_MAX ))
    PRINT( HistoryDealsTotal ());

  BENCH(Bench(LastTimeMQL4))
  BENCH(Bench(LastTimeMQL5))  
}


böyle frenler gösterecek!

 // Первый запуск
2020.08 . 28 22 : 01 : 12.941 HistoryDealsTotal () = 9435
2020.08 . 28 22 : 01 : 13.198 2046.04 . 30 00 : 13 : 20
2020.08 . 28 22 : 01 : 13.198 Time[Bench(LastTimeMQL4)] = 257277
2020.08 . 28 22 : 01 : 43.982 2046.04 . 30 00 : 13 : 20
2020.08 . 28 22 : 01 : 43.982 Time[Bench(LastTimeMQL5)] = 30783493

// Второй запуск
2020.08 . 28 22 : 03 : 31.474 HistoryDealsTotal () = 9435
2020.08 . 28 22 : 03 : 31.724 2046.04 . 30 00 : 13 : 20
2020.08 . 28 22 : 03 : 31.724 Time[Bench(LastTimeMQL4)] = 250491
2020.08 . 28 22 : 04 : 02.011 2046.04 . 30 00 : 13 : 20
2020.08 . 28 22 : 04 : 02.011 Time[Bench(LastTimeMQL5)] = 30286258

Pure MQL5, kısmi (yalnızca HistorySelectByPosition) önbelleğe alma işleminden 100 kat daha yavaştır.

 
Test genellikle kabul edilemez.

MQL5 stili için tüm derinlik için 10.000 HistorySelect seçimini özel olarak test ettiniz. Evet ve döngüler ayrıca sarıldı.

Koşulların net bir ilk ifadesi, bariz önyargılarının ve şok edici sayıların verilmesinin bir açıklaması olmadan - bu tamamen hile ve sahtekarlıktır.

Bir kurt bileti sergisi olan böyle kirli bir oyun için.
 
Renat Fatkhullin :
Test genellikle kabul edilemez.

MQL5 stili için tüm derinlik için 10.000 HistorySelect seçimini özel olarak test ettiniz. Evet ve döngüler ayrıca sarıldı.

Koşulların net bir ilk ifadesi, bariz önyargılarının ve şok edici sayıların verilmesinin bir açıklaması olmadan - bu tamamen hile ve sahtekarlıktır.

Bir kurt bileti sergisi olan böyle kirli bir oyun için.

Peki, algınız yanlış. Yavaşlama olmaması için kendinizi önbelleğe almanın doğru olduğu gösterilmiştir.

Eğer doğru anladıysam bu uygulamadan sonra

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

MT5 ve iş başında hız

Renat Fatkhullin , 2020.08.27 22:58

Getirme işlemlerinde zaten birçok şeyi optimize ettik ve şimdi en uygun önbellek güncellemesini düşünüyoruz, gerçekte getirmelerin %99'u tamamen işe yaramaz olacak ve aslında atlanacak.

Diğer bir deyişle, örnek sınırlarını kasıtlı olarak rastgele seçmezseniz, önbellek %100'e yakın isabetleri gösterecektir.

Büyük ihtimalle önümüzdeki hafta etkili bir çözüm bulunacaktır.


bu örnek çok daha hızlı çalışacaktır.


ЗЫ Komut dosyası, işlem geçmişindeki son pozisyonun açılış/kapanış zamanını hesaplar.

 
fxsaber :

Yavaşlama olmaması için kendinizi önbelleğe almanın doğru olduğu gösterilmiştir.

Bu şekilde "önbelleğe alırsanız", süper hızlı olacaktır.

 void LastTimeMQL5( datetime &OpenTime, datetime &CloseTime )
{
   static ulong PrevTicketIn = 0 ;   // Хранит тикет входа позиции с последнего вызова.
   static ulong PrevTicketOut = 0 ; // Хранит тикет выхода позиции с последнего вызова.
  
   if ( HistorySelect ( 0 , INT_MAX ))
  {
     for ( int i = HistoryDealsTotal () - 1 ; i >= 0 ; i--)
    {
       const ulong Ticket = HistoryDealGetTicket (i);
      
       if (Ticket == PrevTicketOut)            
      {
        OpenTime = ( datetime ) HistoryDealGetInteger (PrevTicketIn, DEAL_TIME );
        CloseTime = ( datetime ) HistoryDealGetInteger (PrevTicketOut, DEAL_TIME );        
        
         break ;
      }
       else if ( HistoryDealGetInteger (Ticket, DEAL_ENTRY ) == DEAL_ENTRY_OUT )
      {
        PrevTicketOut = Ticket;
        
        CloseTime = ( datetime ) HistoryDealGetInteger (Ticket, DEAL_TIME );

         if ( HistorySelectByPosition ( HistoryDealGetInteger (Ticket, DEAL_POSITION_ID )))
        {
          PrevTicketIn = HistoryDealGetTicket ( 0 );
          OpenTime = ( datetime ) HistoryDealGetInteger (PrevTicketIn, DEAL_TIME );
        }
          
         break ;
      }
    }
  }
}

Kim böyle yazar?

 
fxsaber :

Bu şekilde "önbelleğe alırsanız", süper hızlı olacaktır.

Kim böyle yazar?

C programcıları.

Neden: