"CopyTicks"in Test Edilmesi - sayfa 14

 
Rashid Umarov :

örneğin

biraz yeniden yapıldı

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

#define TICKFLAG_MACRO(A) flag += (( bool )(tickflag & TICK_FLAG_ ##A)) ? " 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 (flag == "" )
    flag = "FLAG_UNKNOWN" ;
     
   return (flag);
}

Sonuç

 2016.09 . 14 13 : 52 : 33.925 Test (Si- 9.16 ,M1)       Tick23: time = 2016.09 . 13 18 : 52 : 35.505 bid = 0.0 ask = 0.0 last = 65253.0 volume = 35    TICK_FLAG_BID TICK_FLAG_ASK

Her iki fiyatın da sıfır olmayan değerlerden sıfıra değiştiği ortaya çıktı. Ve sıfırdan sonra tekrar gel sıfır değil.

 
fxsaber :

Gösterge, CopyTicks'in son keneleri döndürmeyebileceğini gösterir.

Hala daha ilginç

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

#define TICKFLAG_MACRO(A) flag += (( bool )(tickflag & TICK_FLAG_ ##A)) ? " 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 (flag == "" )
    flag = " FLAG_UNKNOWN (" + ( string )tickflag + ")" ;
     
   return (flag);
}

#define TOSTRING(A) " " + #A + " = " + ( string )Tick.A

string TickToString( const MqlTick &Tick )
{
   static int i = 0 ;
  
  i++;
  
   return ( "Tick" + ( string )i + ":" + TOSTRING(time) + "." + ( string )(Tick.time_msc % 1000 ) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

bool MySymbolInfoTick( const string Symb, MqlTick &Tick, const uint Type = COPY_TICKS_ALL )
{
   MqlTick Ticks[];
   const int Amount = :: CopyTicks (Symb, Ticks, Type, 0 , 1 );
   const bool Res = (Amount > 0 );
  
   if (Res)
    Tick = Ticks[Amount - 1 ];
  
   return (Res);
}

#define INDICATOR // Переключение между индикатором и экспертом

#ifdef INDICATOR
   #define NAME "Indicator: "

   #property indicator_chart_window
   #property indicator_buffers 0
   #property indicator_plots    0

   int OnCalculate ( const int rates_total,
                   const int prev_calculated,
                   const datetime &time[],
                   const double &open[],
                   const double &high[],
                   const double &low[],
                   const double &close[],
                   const long &tick_volume[],
                   const long &volume[],
                   const int &spread[] )
#else
   #define NAME "Expert: "

   void OnTick ( void )
#endif
{
   MqlTick Tick1, Tick2;
  
   if ( SymbolInfoTick ( _Symbol , Tick1) && MySymbolInfoTick( _Symbol , Tick2))
     if (Tick1.time_msc != Tick2.time_msc)
       Print (NAME + ((Tick1.time_msc > Tick2.time_msc) ? "EventTime > CopyTicks_Time" : "EventTime < CopyTicks_Time" ) +
             "\nFrom Event: " + TickToString(Tick1) + "\nFrom CopyTicks: " + TickToString(Tick2) + "\n" );

#ifdef INDICATOR 
   return (rates_total);
#endif
}
Sonuç
 2016.09 . 14 14 : 25 : 24.533 Test2 (Si- 9.16 ,M1)      From CopyTicks : Tick16: time = 2016.09 . 14 14 : 25 : 06.62 bid = 65013.0 ask = 65015.0 last = 65014.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL
2016.09 . 14 14 : 25 : 24.533 Test2 (Si- 9.16 ,M1)      From Event: Tick15: time = 2016.09 . 14 14 : 25 : 06.68 bid = 65013.0 ask = 65015.0 last = 65014.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL
2016.09 . 14 14 : 25 : 24.533 Test2 (Si- 9.16 ,M1)      Indicator: EventTime > CopyTicks_Time
2016.09 . 14 14 : 25 : 24.533 Test2 (Si- 9.16 ,M1)      
2016.09 . 14 14 : 25 : 24.533 Test2 (Si- 9.16 ,M1)      From CopyTicks : Tick14: time = 2016.09 . 14 14 : 25 : 06.62 bid = 65013.0 ask = 65015.0 last = 65014.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL
2016.09 . 14 14 : 25 : 24.533 Test2 (Si- 9.16 ,M1)      From Event: Tick13: time = 2016.09 . 14 14 : 25 : 06.68 bid = 65013.0 ask = 65015.0 last = 65014.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL
2016.09 . 14 14 : 25 : 24.533 Test2 (Si- 9.16 ,M1)      Indicator: EventTime > CopyTicks_Time
2016.09 . 14 14 : 25 : 18.974 Test2 (Si- 9.16 ,M1)      
2016.09 . 14 14 : 25 : 18.974 Test2 (Si- 9.16 ,M1)      From CopyTicks : Tick12: time = 2016.09 . 14 14 : 25 : 00.519 bid = 65011.0 ask = 65012.0 last = 65012.0 volume = 8 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_BUY
2016.09 . 14 14 : 25 : 18.974 Test2 (Si- 9.16 ,M1)      From Event: Tick11: time = 2016.09 . 14 14 : 25 : 00.510 bid = 65011.0 ask = 65012.0 last = 65012.0 volume = 8 FLAG_UNKNOWN ( 0 )
2016.09 . 14 14 : 25 : 18.974 Test2 (Si- 9.16 ,M1)      Indicator: EventTime < CopyTicks_Time

CopyTicks hem geride kalabilir hem de Event tick'e öncülük edebilir. Olay işareti genellikle boş bir bayrağa sahiptir.

PS Yardımda s'yi işaretlemek için MqlTick bayrağını düzeltin.

 

Başkaları CopyTicks'i nasıl kullanıyor - asla bilemeyeceğim. Güven yok maalesef Çok nemli.

danışman

 #include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

void OnTick ( void )
{
   static MqlTick PrevTick;  
   static int Amount = 0 ;
  
   MqlTick Ticks[];
  
   if (Amount > 0 )
  {
    Amount = CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , PrevTick.time_msc);
    
     int i;
    
     for (i = 0 ; i < Amount; i++)
       if (_R(Ticks[i]) == PrevTick) // https://www.mql5.com/ru/code/16280
         break ;
        
     if (i == Amount)
       Print ( "В истории (length = " + ( string )Amount + ") нет тика, что был на предыдущем Event." );
  }
   else
    Amount = CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , TimeCurrent () * 1000 );
    
   if (Amount > 0 )
    PrevTick = Ticks[Amount - 1 ];  
}

Sonuç

 2016.09 . 15 11 : 04 : 02.810 Test2 (RTS- 9.16 ,M1)     В истории (length = 2 ) нет тика, что был на предыдущем Event.
2016.09 . 15 11 : 03 : 59.312 Test2 (RTS- 9.16 ,M1)     В истории (length = 13 ) нет тика, что был на предыдущем Event.
2016.09 . 15 11 : 03 : 59.290 Test2 (RTS- 9.16 ,M1)     В истории (length = 1 ) нет тика, что был на предыдущем Event.

Tarihte olan kene, bir sonraki Tick etkinliğinde artık tarihte değil!

Sevgili geliştiriciler, CopyTicks'i çalışır duruma getirin. Basit testler bile başarısız oluyor.

 
Şu anda, CopyTicks biraz gergin, ancak == 0'dan gelen giriş parametresiyle gerçek zamanlı olarak çalışıyor.
 

Her OnTick'teki diziye yeni geçmiş tikler eklemek gerekir. Bunu uygulayan var mı?

Bahse girerim işe yaramaz. Curve CopyTick'ler atlanamaz.

 
fxsaber :
Şu anda, CopyTicks biraz esnektir, ancak == 0'dan gelen giriş parametresiyle gerçek zamanlı olarak çalışır.
İşte uzantılardan biri
 void OnTick ( void )
{
   MqlTick Ticks[];
  
   const int Amount = CopyTicks ( _Symbol , Ticks);
  
   if ((Amount > 1 ) && (Ticks[Amount - 1 ].time_msc < Ticks[Amount - 2 ].time_msc))
     Print ( "Некорректная история!" );
}
Sonuç
 2016.09 . 15 13 : 11 : 13.231 Test4 (RTS- 9.16 ,M1)     Некорректная история!
2016.09 . 15 13 : 10 : 48.954 Test4 (RTS- 9.16 ,M1)     Некорректная история!
Aşırı keneler alıyoruz ve en son kene bir öncekinden daha az zamana sahip olduğu ortaya çıkıyor.
 
fxsaber :
İşte esnemelerden biri... Sonuç Aşırı keneler alıyoruz ve en son kenenin bir öncekinden daha kısa bir süreye sahip olduğu ortaya çıkıyor.

Bu göstergenin koduna bakın

https://www.mql5.com/ru/forum/94399/page6#comment_2776784

Таблица всех сделок. Доступ через MQL5
Таблица всех сделок. Доступ через MQL5
  • incelemeler: 1
  • www.mql5.com
Как организовать получение таблицы сделок? Пока не важно из индикатора или из советника...
 
fxsaber :
Aşırı keneler alıyoruz ve en son kene bir öncekinden daha az zamana sahip olduğu ortaya çıkıyor.
Bu yalnızca COPY_TICKS_ALL için geçerlidir. Diğer modlarda önerilen Expert Advisor herhangi bir hata bulamadı.
 
Bu başlıktaki raporlara göre Servis Masasına mı yazmam gerekiyor yoksa geliştiriciler kendileri mi izliyor?
 
fxsaber :
Bu başlıktaki raporlara göre Servis Masasına mı yazmam gerekiyor yoksa geliştiriciler kendileri mi izliyor?
Daha iyi yaz. Fazlalık olmayacak.