"CopyTicks"in Test Edilmesi - sayfa 17

 
fxsaber :
Bir çubuğun tik hacmi bir ilke midir? Prensipte borsada hiçbir şey ifade etmeyen bir gösterge. Bilinçli olarak kullanılamaz. Biraz çöp.

Aslında borsadaki tik hacmi palet sayısıdır. Yani, gerçek işlem sayısı.

 
Slawa :

Aslında borsadaki tik hacmi palet sayısıdır. Yani, gerçek işlem sayısı.

Böylece, bir öncekiyle tamamen aynı olan bir anlaşma geldiğinde çubuk değişmez.
 
fxsaber :
Böylece, bir öncekiyle tamamen aynı olan bir anlaşma geldiğinde çubuk değişmez.
Kene ve gerçek hacimler değişir
 
EA, yeni geçmiş işaretler ekler ve Nth CopyTicks hatasını tespit eder
 #include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

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 )
{
   return (TOSTRING(time) + "." + ( string )(Tick.time_msc % 1000 ) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

#define TOSTRING2(A) #A + " = " + ( string )A

int AddFreshTicks( MqlTick &Ticks[], const string Symb = NULL , const uint flags = COPY_TICKS_ALL )
{
   int Res = 0 ;
   const int Amount = ArraySize (Ticks);
  
   MqlTick NewTicks[];  
   const int NewAmount = (Amount == 0 ) ? CopyTicks ((Symb == NULL )? Symbol () : Symb, NewTicks, flags) :
                                         CopyTicks ((Symb == NULL )? Symbol () : Symb, NewTicks, flags, Ticks[Amount - 1 ].time_msc);
  
   if (NewAmount > 0 )
  {
     if (Amount > 0 )
    {
       // Взяли крайнее время из предыдущей истории
       const long LastTime = Ticks[Amount - 1 ].time_msc;
      
       int Count = 1 ;
      
       // Находим (Count) в предыдушей истории количество тиков со временем LastTime
       for ( int i = Amount - 2 ; i >= 0 ; i--)
      {
         if (Ticks[i].time_msc < LastTime)
           break ;
          
        Count++;
      }

       if ((Count < Amount) && (Count < NewAmount))      
      {
         // Если Count-тик c LastTime-временем в новой истории не равен самому последнего тику в старой истории, выводим в журнал
         if (_R(Ticks[Amount - 1 ]) != NewTicks[Count - 1 ]) // https://www.mql5.com/ru/code/16280
           Print (TOSTRING2(TickToString(Ticks[Amount - 1 ])) + "\n" +
                TOSTRING2(TickToString(NewTicks[Count - 1 ])) + "\n" + TOSTRING2(TickToString(NewTicks[Count])) + "\n" );              

        Res = ArrayCopy (Ticks, NewTicks, Amount, Count);
      }
    }
     else
      Res = ArrayCopy (Ticks, NewTicks);
  }
  
   return (Res);
}

void OnTick ( void )
{
   static MqlTick PrevTicks[];
  
   // Дописываем свежие тики
  AddFreshTicks(PrevTicks);
}

Bu sefer detaylı yorum yazdım sonuç net olsun

 2016.09 . 22 12 : 20 : 03.762 Test8 (RTS- 12.16 ,M1)    TickToString(NewTicks[Count]) =  time = 2016.09 . 22 12 : 19 : 53.233 bid = 0.0 ask = 0.0 last = 98560.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_BUY
2016.09 . 22 12 : 20 : 03.762 Test8 (RTS- 12.16 ,M1)    TickToString(NewTicks[Count- 1 ]) =  time = 2016.09 . 22 12 : 19 : 51.968 bid = 0.0 ask = 0.0 last = 98550.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL
2016.09 . 22 12 : 20 : 03.762 Test8 (RTS- 12.16 ,M1)    TickToString(Ticks[Amount- 1 ]) =  time = 2016.09 . 22 12 : 19 : 51.968 bid = 98550.0 ask = 0.0 last = 98550.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL
2016.09 . 22 12 : 20 : 02.504 Test8 (RTS- 12.16 ,M1)    
2016.09 . 22 12 : 20 : 02.504 Test8 (RTS- 12.16 ,M1)    TickToString(NewTicks[Count]) =  time = 2016.09 . 22 12 : 19 : 51.968 bid = 98550.0 ask = 0.0 last = 98550.0 volume = 1 TICK_FLAG_LAST TICK_FLAG_VOLUME TICK_FLAG_SELL
2016.09 . 22 12 : 20 : 02.504 Test8 (RTS- 12.16 ,M1)    TickToString(NewTicks[Count- 1 ]) =  time = 2016.09 . 22 12 : 19 : 51.813 bid = 98550.0 ask = 0.0 last = 0.0 volume = 0 TICK_FLAG_BID
2016.09 . 22 12 : 20 : 02.504 Test8 (RTS- 12.16 ,M1)    TickToString(Ticks[Amount- 1 ]) =  time = 2016.09 . 22 12 : 19 : 51.813 bid = 98550.0 ask = 98560.0 last = 0.0 volume = 0 TICK_FLAG_BID
Sorun sadece COPY_TICKS_ALL değil, aynı zamanda diğer modları da (LAST, INFO) ilgilendiriyor.
 
fxsaber :
EA, yeni geçmiş işaretler ekler ve Nth CopyTicks hatasını tespit eder

Bu sefer detaylı yorum yazdım sonuç net olsun

Sorun sadece COPY_TICKS_ALL değil, aynı zamanda diğer modları da (LAST, INFO) ilgilendiriyor.

From == 0 aracılığıyla keneler eklemeye çalıştım. Çalışmıyor! - CopyTicks hataları.

Sevgili geliştiriciler, bu işleve gerçekten ihtiyacım var (taze tarihsel veriler eklemek için). Şimdiye kadar frenlemesine izin verin, ancak çalışıyor . Lütfen bunun çalışan bir versiyonunu buraya yazın.

CopyTicks hataları, tek bir derleme değil, uzun bir süre için düzeltilecektir. Başkaları CopyTicks'i nasıl kullanıyor, hiçbir fikrim yok. Görünüşe göre hiç kullanmıyorlar. Fantezi yeterli değil.

 

Tam olarak neyi bir hata olarak kabul ettiğinizi açıkça belirtirsiniz.

 
Renat Fatkhullin :

Tam olarak neyi bir hata olarak kabul ettiğinizi açıkça belirtirsiniz.

Kod ile çok net bir şekilde cevaplandı. Her şeyi daha ayrıntılı olarak boyadığım Hizmet Masası'na bir uygulama oluşturdum.
 
fxsaber :
Kod ile çok net bir şekilde cevaplandı. Her şeyi daha ayrıntılı olarak boyadığım Hizmet Masası'na bir uygulama oluşturdum.

Hata, yeni elde edilen kene dizisinde, ilk girişlerin sıfır teklif, sorma veya son içermesidir. önceki dizide, dizinin sonundaki aynı tikler sıfır içermez, ancak o anki teklif, sor ve son değerlerini içerir.

CopyTicks'teki bu hata, derleme yayınlandıktan sonra düzeltildi. Artık CopyTicks'i çağırdıktan sonraki ilk onay kayıtları sıfır içermeyecek, ancak mevcut teklif, talep ve talep edilen zamanda son değerleri içerecektir.

Ne yazık ki, düzeltmeler mevcut yapıya dahil edilmedi.

 
Slawa :

Hata, yeni elde edilen kene dizisinde, ilk girişlerin sıfır teklif, sorma veya son içermesidir. önceki dizide, dizinin sonundaki aynı tikler sıfır içermez, ancak o anki teklif, sor ve son değerlerini içerir.

CopyTicks'teki bu hata, derleme yayınlandıktan sonra düzeltildi. Artık CopyTicks'i çağırdıktan sonraki ilk onay kayıtları sıfır içermeyecek, ancak mevcut teklif, talep ve talep edilen zamanda son değerleri içerecektir.

Seni anlamadığım bir şey. Geçmişi depolamak için kendi dahili biçiminiz olduğunu söylemek istiyorsunuz. Ve CopyTicks her istekte oradan bir parça alır ve MqlTick dizisini mi oluşturur? Aynı bayraklar CopyTicks tarafından hesaplanıyor mu, ancak bunlar geçmişte saklanmıyor mu? Bir şeyi hesaplayan ve onu yalnızca kullanıcı dostu bir biçime dönüştürmekle kalmayan bir tür conta.

İsteğin zamanına bağlı olarak bir şeyi doldurmak için CopyTicks'e ihtiyacım yok. Ben sadece bozulma olmadan tarih almak istiyorum. Ve sorunsuz ekleyin.

Ne yazık ki, düzeltmeler mevcut yapıya dahil edilmedi.

Lütfen sunucunuzda bir beta yapı yayınlayın. Daha fazla tutarsızlık bulacağımdan eminim. Hadi bu CopyTicks'i yalayalım ki sonunda güvenebilsin!

 
fxsaber :
EA, yeni geçmiş işaretler ekler ve Nth CopyTicks hatasını tespit eder
YALNIZCA bant gerekliyse (COPY_TICKS_TRADE - time_msc, last, volume ve flags), bu çözüm tamamen uygundur - hiçbir hata bulunamadı.