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

 
fxsaber :

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.

b2699 - düzeltildi, teşekkürler.

 
Frenleri gösteren kodlar kumbarasında. Bu sefer Tester .
 

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

SL/TP siparişlerinin kabulü

fxsaber , 2020.12.11 09:17

 // Измеряет размер лага между приходом тика на MT5-сервер и MT5-Терминал.
// Запускать на той же машине, на которой установлен MT5-сервер.

100 kene işlendi. Sunucu ile Tick Terminali arasındaki varış gecikmesi, bir ila sekiz milisaniye arasında değişir. Ortalama olarak - dört milisaniyeden biraz fazla. Bu, bu şubeyi başlatan TP siparişlerinin tetiklenmesindeki gecikmeye tam olarak eşittir.


Gecikmenin kendisi MT5 sunucusunun içinde bulunur. Sunucu->Terminal kanalının bununla hiçbir ilgisi yoktur.


Bu gecikmeyi düzeltmek için geliştiricilerden büyük bir istek. Artık sıfır pingli borsalarda, yalnızca Terminal'de değil, aynı zamanda Sunucuda da kenelerin gelmesinde sürekli iyi bir gecikme yaşıyoruz. Özellikle, varantların kabulü.

 
Ticaret yaparken gecikmeleri azaltmak için, savaş Terminalini bir RAM sürücüsüne geçirmenizi tavsiye ederim.
 

Market Watch: SymbolInfoTick'e gelmesine rağmen aniden tarihte bir işaretin yokluğuyla karşılaştım.



Aynı onay işaretlerini MQL aracılığıyla yazdırmak ilginç bir bayrak üretir.

                         [time]     [bid]     [ask] [last] [volume]    [time_msc] [flags] [volume_real]
        [ 0 ] 2021.01 . 04 20 : 52 : 55 103.16300 103.16500 0.0000          0 1609793575267        4        0.00000
        [ 1 ] 2021.01 . 04 20 : 52 : 55 103.16300 103.16400 0.0000          0 1609793575788        4        0.00000
        [ 2 ] 2021.01 . 04 20 : 52 : 59 103.16400 103.16400 0.0000          0 1609793579367      130        0.00000
        [ 3 ] 2021.01 . 04 20 : 53 : 01 103.16400 103.16400 0.0000          0 1609793581817        2        0.00000
        [ 4 ] 2021.01 . 04 20 : 53 : 01 103.16300 103.16400 0.0000          0 1609793581969        2        0.00000

Bu bayrak, eksik Piyasa İzleme işaretinden hemen önce geçmiş işaretiyle oluşturuldu. Belki bu size sorunun nerede olduğunu söyler.


PS Ne yazık ki, bu sistematik olarak gerçekleşir. Onay geçmişi, Terminale gelen tüm onay işaretlerini içermez.

 
fxsaber :

Market Watch: SymbolInfoTick'e gelmesine rağmen aniden tarihte bir işaretin yokluğuyla karşılaştım.



Aynı onay işaretlerini MQL aracılığıyla yazdırmak ilginç bir bayrak üretir.

Bu bayrak, eksik Piyasa İzleme işaretinden hemen önce geçmiş işaretiyle oluşturuldu. Belki bu size sorunun nerede olduğunu söyler.


PS Ne yazık ki, bu sistematik olarak gerçekleşir. Onay geçmişi, Terminale gelen tüm onay işaretlerini içermez.

ve orada. Diyelim ki EA gerçek bir hesapta bütün gün işlem yapıyor, biz kar ediyoruz.

ertesi gün önceki gün test cihazını çalıştırdım, bir kayıp alıyorum.

nedeni açık değil, ya komisyoncu yanlış keneler veriyor ya da başka bir şey...

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Информация о счете - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

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

MT5 ve iş başında hız

fxsaber , 2021.01.04 20:51

Market Watch: SymbolInfoTick'e gelmesine rağmen aniden tarihte bir işaretin yokluğuyla karşılaştım.


tkc'nin Terminal tarafından oluşturulmadığı, ancak Sunucudan indirildiği paralel bir Terminal başlattı.

Ekranda bu Terminal solda - bir onay işareti var. Ve diğer Terminalde (sağda) - hayır!


Terminalin, gelen tüm keneleri kene geçmişine itmediği ortaya çıktı. Ve boşluksuz bir geçmiş istiyorsanız, şimdi tkc dosyasını çivilemeniz ve Sunucudan çekmeniz gerekiyor.

Kötü böcek.

 
// Попытка поймать тик, который не попал в историю тиков.

// Сравнение двух тиков.
bool IsEqual( const MqlTick &Tick1, const MqlTick &Tick2 )
{
   return ((Tick1.time_msc == Tick2.time_msc) &&
         ! NormalizeDouble (Tick1.bid - Tick2.bid, _Digits ) &&
         ! NormalizeDouble (Tick1.ask - Tick2.ask, _Digits ));
}

// Проверяет наличие тика в истории.
bool IsHistory( const MqlTick &Tick )
{
   bool Res = false ;
  
   MqlTick Ticks[];
  
   const int Size = CopyTicksRange ( _Symbol , Ticks, COPY_TICKS_ALL , Tick.time_msc, Tick.time_msc + 1 );
  
   for ( int i = 0 ; !Res && (i < Size); i++)
    Res = IsEqual(Tick, Ticks[i]);
    
   return (Res);
}

void OnTick ()
{
   static MqlTick Ticks[];
   MqlTick Tick;
  
   if ( SymbolInfoTick ( _Symbol , Tick)) // Взяли текущий тик.
  {
     const int Size = ArrayResize (Ticks, ArraySize (Ticks) + 1 );
    
    Ticks[Size - 1 ] = Tick; // Дописали его в массив
    
     MqlTick HistoryTick[ 1 ];
    
     if ( CopyTicks ( _Symbol , HistoryTick, COPY_TICKS_ALL , 0 , 1 ) > 0 ) // Взяли последний исторический тик
    {
       int i = 0 ;
      
       while ((i < Size) && (Ticks[i].time_msc < HistoryTick[ 0 ].time_msc)) // Если исторический тик пришел позже проверяемого
      {
         if (!IsHistory(Ticks[i]))                                     // Если в истории тиков нет проверяемого тика,
        {
           Alert ( "!IsHistory(Ticks[i]) == true" );
           ArrayPrint (Ticks, _Digits , NULL , i, 1 , ARRAYPRINT_HEADER ); // выводим его.
        }
          
        i++;
      }
      
       ArrayRemove (Ticks, 0 , i); // Удалили тики, что проверили.
    }
  }  
}

Böyle bir EA, tarihte kaçırılan keneleri yakalayamadı. Savaş - yakalandı. Görünüşe göre, bu keneler OnTick'i başlatmıyor.

Atlanan işaretlerin kendileri on milisaniye için geçerli olabilir.

 
fxsaber :
Yukarıda kaynağı olan bir yazı vardı. Şimdi boş. Sebeb olmak?
Muhtemelen, gönderi site güncellemesi sırasındaydı (İngilizce bölümünde bu tür iki gönderi var).
 
fxsaber :

tkc'nin Terminal tarafından oluşturulmadığı, ancak Sunucudan indirildiği paralel bir Terminal başlattım.

Ekranda bu Terminal solda - bir onay işareti var. Ve diğer Terminalde (sağda) - hayır!

Her iki Terminalde de böyle bir komut dosyası başlattı.

 // Сохранение тиковой истории в текстовый файл.

string GetTickFlag( uint tickflag )
{
   string flag = " " + ( string )tickflag;

#define TICKFLAG_MACRO(A) flag += (( bool )(tickflag & TICK_FLAG_ ##A)) ? " TICK_FLAG_" + #A : "" ; \
                        tickflag -= tickflag & TICK_FLAG_ ##A;
TICKFLAG_MACRO(BID)
TICKFLAG_MACRO(ASK)
TICKFLAG_MACRO(LAST)
TICKFLAG_MACRO(VOLUME)
TICKFLAG_MACRO(BUY)
TICKFLAG_MACRO(SELL)
#undef TICKFLAG_MACRO

   if (tickflag)
    flag += " FLAG_UNKNOWN (" + ( string )tickflag + ")" ;

   return (flag);
}

#define TOSTRING(A) " " + #A + " = " + ( string )Tick.A
string TickToString( const MqlTick &Tick, const int FilterFlags = 0xFF )
{
   return (TOSTRING(time) + "." + :: IntegerToString (Tick.time_msc % 1000 , 3 , '0' ) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags & FilterFlags));
}
#undef TOSTRING


void OnStart ()
{  
   MqlTick Ticks[];
   const int Size = CopyTicksRange ( _Symbol , Ticks, COPY_TICKS_ALL , D'2021.01.05 01:00' * 1000 , D'2021.01.05 10:50' * 1000 );
  
   string From = ( string )Ticks[ 0 ].time;
   string To = ( string )Ticks[Size - 1 ].time;
  
   StringReplace (From, ":" , "." );
   StringReplace (To, ":" , "." );
  
   const int handle = FileOpen ( _Symbol + "_" + From + "-" + To + ".txt" , FILE_WRITE | FILE_ANSI | FILE_TXT );

   if (handle != INVALID_HANDLE )
  {        
     for ( int i = 0 ; i < Size; i++)
       FileWrite (handle, TickToString(Ticks[i], 0x7F )); // Фильтр флагов, иначе очень много различий.

     FileClose (handle);
  }
  
   Alert ( "Done." );
}


Hangi aralığı talep ettiğinize bağlı olarak tkc değişebilir (Sunucu ile senkronize edin). Bu nedenle, istekten önce mevcut olmayan bazı keneler mevcut olmaya başlayabilir.

Buna rağmen, farklı semboller üzerinde birkaç tanesini tanımlamak hala mümkündü. Bir bayrak filtresi uygulamak zorunda kaldım, çünkü farklı Terminallerdeki keneler için çok farklıdırlar.

Farklılıklar böyle görünüyor.


EURJPY.


USDCHF


Genel olarak, gerçek zamanlı ticaret yaparken, kenelerin yakın geçmişi, Terminal'e gelen ve Sunucuda bulunan bazı keneleri içermeyebilir.

Bu hatayı düzeltmemiz gerekiyor.