Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 86

 

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

Hatalar, hatalar, sorular

fxsaber , 2018.06.20 23:18

Sipariş sistemdeyken, Terminal'de değilken, bu tür hayali sipariş durumlarının ne kadar sürdüğünü kontrol etmeye karar verdim.

 // Советник отслеживает длительность ситуаций, когда ордер отсутствует среди текущих и исторических

#define TOSTRING(A)   #A + " = " + ( string )(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString (A) + " (" + ( string )(A) + ")\n"

bool OrderIsExist( const ulong & OrderTicket )
{
   return ( OrderTicket ? OrderSelect ( OrderTicket ) || HistoryOrderSelect ( OrderTicket ) : true );
}

void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &, const MqlTradeResult & )
{
   static bool PrevIsExist = true ;
   static ulong StartTime = 0 ;
   static ulong MaxInterval = 0 ;
  
   const ulong NowTime = GetMicrosecondCount ();
   const bool IsExist = OrderIsExist(Trans.order);
    
   if (!IsExist)
  {
     Print (TOSTRING2(Trans.type) + TOSTRING(Trans.order) +
          TOSTRING( OrderSelect (Trans.order)) + TOSTRING( HistoryOrderSelect (Trans.order)));       
  
     if (PrevIsExist) 
      StartTime = NowTime;
  }
   else if (!PrevIsExist)
  {
     const ulong Interval = NowTime - StartTime;
    
     Print (TOSTRING(Interval) + TOSTRING2(Trans.type) + TOSTRING(Trans.order) +
          TOSTRING( OrderSelect (Trans.order)) + TOSTRING( HistoryOrderSelect (Trans.order)));       
    
     if (Interval > MaxInterval)
    {
      MaxInterval = Interval;
      
       Comment (TOSTRING(MaxInterval) + TOSTRING(Trans.order)); // mcs.
    }
  }
          
  PrevIsExist = IsExist;
}


Sonuç

 2018.06 . 21 00 : 10 : 31.047 Trans.type = TRADE_TRANSACTION_ORDER_DELETE ( 2 )
2018.06 . 21 00 : 10 : 31.047 Trans.order = 2210967406
2018.06 . 21 00 : 10 : 31.047 OrderSelect (Trans.order) = false
2018.06 . 21 00 : 10 : 31.047 HistoryOrderSelect (Trans.order) = false
2018.06 . 21 00 : 10 : 31.047 
2018.06 . 21 00 : 10 : 31.080 Interval = 32643
2018.06 . 21 00 : 10 : 31.080 Trans.type = TRADE_TRANSACTION_HISTORY_ADD ( 3 )
2018.06 . 21 00 : 10 : 31.080 Trans.order = 2210967406
2018.06 . 21 00 : 10 : 31.080 OrderSelect (Trans.order) = false
2018.06 . 21 00 : 10 : 31.080 HistoryOrderSelect (Trans.order) = true


32 milisaniyelik bir emir var ama Terminalde yok! Bu aralıkta ticaret mantığı yürütülürse bunun ne gibi sonuçları olabileceğini hayal edin...


İlginç bir şekilde, hayali siparişler çoğunlukla yalnızca TRADE_TRANSACTION_ORDER_DELETE ve TRADE_TRANSACTION_DEAL_ADD (çok daha az sıklıkla) işlem türleri için mevcuttur.


Platformun çok kötü nüansı.


ZY Ne yazık ki ilk beşte alım satım işlemlerinin şüpheli performansı.

 
Geçmişi baştan sorgularsanız HistorySelect yavaşlar. Bu nedenle, şöyle bir şey yapmak arzu edilir

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

SiparişKapatTime Uzman Danışman MQL5

fxsaber , 2018.07.06 09:27

 void LastTimeMQL5( datetime &OpenTime, datetime &CloseTime )
{
   static datetime PrevTime = 0 ;
  
   if ( HistorySelect ( PrevTime , INT_MAX )) // HistorySelect(0, INT_MAX) - slow.
  {
     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 ;
      }
    }
  }
  
  PrevTime = CloseTime;
}


Çözümün koltuk değneğinin eşiğinde olduğu açıktır. Diğer uygulamalar çok kısa olmayacaktır. Genel durumda frenleri atlamanın basit bir yolu çalışmayacaktır.

 
fxsaber :
Çok karakterli OnTick'in hızlı uygulanması

düşünemiyorum

OnTick neden Symbol parametresine sahip ve genel olarak OnTick parametresiz ??

ve neden yine yorumun altında

neden sadece ana OnChartEvent aracılığıyla değil?

 void OnTick ()
{
   OnTick ( _Symbol ); 
}

void OnChartEvent ( const int id, const long &lparam, const double &, const string & )
{
   if (id == CHARTEVENT_CUSTOM )
     OnTick (Symbols[( int )lparam]);
}

// Мультисимвольный OnTick
void OnTick ( const string &Symb )
{
}
 
fxsaber havalı bir kod kurutucumuz var. Bunu çözemiyorum
 
Hızlı528 :

neden sadece ana OnChartEvent aracılığıyla değil?

Çünkü "sinekler ve pirzolalar" ayrı olduğunda uygundur. Tüm mantığınızı çok karakterli bir OnTick'e yazın. İsimler tesadüf...

 
fxsaber :

Çünkü "sinekler ve pirzolalar" ayrı olduğunda uygundur. Tüm mantığınızı çok karakterli bir OnTick'e yazın. İsimler tesadüf...

, 2028'e kadar herkes seninle

bu eklediğiniz kodunuz, şimdi tam kodunu bulacağım

Индикатор

#property indicator_chart_window
#property indicator_plots 0

input long Chart = 0 ; // идентификатор графика-получателя события
input int Index = 0 ;

int OnCalculate ( const int rates_total, const int prev_calculated, const int , const double &[] )
{
   if (prev_calculated)
     EventChartCustom (Chart, 0 , Index, 0 , NULL );
  
   return (rates_total);
}


Советник

input int AmountSymbols = 1 ;

const string Symbols[] = { "EURUSD" , "GBPUSD" , "AUDUSD" , "USDJPY" , "USDCAD" };

void OnInit ()
{
   for ( int i = 0 ; i < AmountSymbols; i++)
     if (Symbols[i] != _Symbol )
       iCustom (Symbols[i], PERIOD_W1 , "Spy.ex5" , ChartID (), i); // MQL5\Indicators\Spy.ex5
}

void OnTick ()
{
   OnTick ( _Symbol ); 
}

void OnChartEvent ( const int id, const long &lparam, const double &, const string & )
{
   if (id == CHARTEVENT_CUSTOM )
     OnTick (Symbols[( int )lparam]);
}

// Мультисимвольный OnTick
void OnTick ( const string &Symb )
{
}
 
Hızlı528 :

Hiç kimse sizi çok karakterli NewTick olayının bu uygulamasını kullanmaya zorlamıyor. Bu konuya her şeyi basit bir şekilde koydum.

 
fxsaber :

Hiç kimse sizi çok karakterli NewTick olayının bu uygulamasını kullanmaya zorlamıyor. Bu konuya her şeyi basit bir şekilde koydum.

Tam olarak OnTick anıyla ilgileniyordum, ayrıca parametrelerle de derleyici yutuyor

 
Hızlı528 :

neden OnTick ????

Bilmiyorum, sadece bir tesadüf.

 
fxsaber :

Bilmiyorum, sadece bir tesadüf.

bana söyleme, bir numara buldu, MK hala ana işlevlerden birinin adının ödünç alınmasını düzeltmedi, okuma ve arama ile bu konuda çok zaman öldürdü

belgelenmemiş bir özellik arıyorum