"CopyTicks"in Test Edilmesi - sayfa 40

 
Kopitix mevcut bir onay işaretini çekemez
 struct MQLTICK
{
   uchar Data[ sizeof ( MqlTick )];
};

union UNION
{
  MQLTICK Tick1;
   MqlTick Tick2;  
  
  UNION()
  {
     ArrayInitialize ( this .Tick1.Data, 1 );
  }
};

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

void OnStart ()
{  
   const string Name = "A1234" ;

   if ( CustomSymbolCreate (Name) || SymbolInfoInteger (Name, SYMBOL_CUSTOM ))
  {    
    UNION Union;
    
     MqlTick Ticks[] = {{ 0 }};
    Ticks[ 0 ] = Union.Tick2;
    
    Ticks[ 0 ].time = TimeCurrent ();
    Ticks[ 0 ].time_msc = Ticks[ 0 ].time * 1000 ;
    
     Print (TOSTRING( CustomTicksReplace (Name, Ticks[ 0 ].time_msc, Ticks[ 0 ].time_msc, Ticks))); // Тик записали без проблем
    
     MqlTick Ticks2[];
    
     SymbolSelect (Name, true );            
    
     // Прочесть тик не можем
     Print (TOSTRING( CopyTicksRange (Name, Ticks2)));
     Print (TOSTRING( CopyTicks (Name, Ticks2)));
    
     SymbolSelect (Name, false );            
     CustomSymbolDelete (Name);    
  }
}

Sonuç

 CustomTicksReplace (Name,Ticks[ 0 ].time_msc,Ticks[ 0 ].time_msc,Ticks) = 1
CopyTicksRange (Name,Ticks2) = 0
CopyTicks (Name,Ticks2) = 0
 

Kopitix orijinal verileri değiştirir

 struct MQLTICK
{
   uchar Data[ sizeof ( MqlTick )];
};

union UNION
{
  MQLTICK Tick1;
   MqlTick Tick2;  
  
  UNION()
  {
     ArrayInitialize ( this .Tick1.Data, 1 );
  }
};

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

void OnStart ()
{  
   const string Name = "A1234" ;

   if ( CustomSymbolCreate (Name) || SymbolInfoInteger (Name, SYMBOL_CUSTOM ))
  {    
    UNION Union;
    
     MqlTick Ticks[] = {{ 0 }};
    Ticks[ 0 ] = Union.Tick2;
    
    Ticks[ 0 ].time = 0 ;
    Ticks[ 0 ].time_msc = 0 ;

     Print (TOSTRING(Ticks[ 0 ].ask));
    
     Print (TOSTRING( CustomTicksReplace (Name, Ticks[ 0 ].time_msc, Ticks[ 0 ].time_msc, Ticks)));
    
     MqlTick Ticks2[];
    
     SymbolSelect (Name, true );            
    
     // Прочесть тик не можем
     Print (TOSTRING( CopyTicksRange (Name, Ticks2)));

     Print (TOSTRING(Ticks2[ 0 ].ask));
    
     SymbolSelect (Name, false );            
     CustomSymbolDelete (Name);    
  }
}


Sonuç

 Ticks[ 0 ].ask = 7.748604185489348 e- 304
CustomTicksReplace (Name,Ticks[ 0 ].time_msc,Ticks[ 0 ].time_msc,Ticks) = 1
CopyTicksRange (Name,Ticks2) = 1
Ticks2[ 0 ].ask = 0.0
 

Neden fazladan keneler oluşur?


Komut dosyası ekstra keneler görüntüler

 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 ) IntegerToString (Tick.time_msc % 1000 , 3 , '0' ) +
         TOSTRING(bid) + TOSTRING(ask) + TOSTRING(last)+ TOSTRING(volume) + GetTickFlag(Tick.flags));
}

struct MQLTICK : public MqlTick
{
   bool operator ==( const MqlTick &Tick ) const
  {
     return ((!Tick.ask || (Tick.ask == this .ask)) &&
           (!Tick.bid || (Tick.bid == this .bid)));
  }
  
   void operator =( const MqlTick &Tick )
  {
     this .ask = Tick.ask ? Tick.ask : this .ask;
     this .bid = Tick.bid ? Tick.bid : this .bid;
  }
};

void OnStart ()
{
   MqlTick Ticks[];
   const int Amount = CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , 0 , 1 e4 );

  MQLTICK Tick = { 0 };  
  
   for ( int i = 0 ; i < Amount; i++)
     if (Tick == Ticks[i])
       Print (TickToString(Ticks[i]));
     else
      Tick = Ticks[i];
}


EURUSD Metaquotes-Demo Sonucu

 time = 2017.11 . 14 02 : 27 : 14.352 bid = 1.16679 ask = 1.16682 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 02 : 29 : 11.325 bid = 1.16685 ask = 1.16687 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 03 : 04 : 02.402 bid = 1.16715 ask = 1.16717 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 03 : 41 : 09.453 bid = 1.16707 ask = 1.1671 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 03 : 42 : 53.101 bid = 1.16718 ask = 1.16721 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 04 : 51 : 22.072 bid = 1.16719 ask = 1.16721 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 04 : 53 : 55.649 bid = 1.16714 ask = 1.16717 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 04 : 56 : 12.254 bid = 1.16713 ask = 1.16716 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 04 : 57 : 12.497 bid = 1.16713 ask = 1.16716 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 04 : 58 : 28.934 bid = 1.16719 ask = 1.16722 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 05 : 18 : 44.717 bid = 1.16728 ask = 1.16731 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 05 : 25 : 39.559 bid = 1.16725 ask = 1.16728 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 05 : 27 : 54.243 bid = 1.16718 ask = 1.1672 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 05 : 29 : 38.909 bid = 1.16718 ask = 1.1672 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 05 : 31 : 40.868 bid = 1.16719 ask = 1.1672 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 05 : 38 : 29.393 bid = 1.16709 ask = 1.16712 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 05 : 39 : 29.429 bid = 1.16709 ask = 1.16712 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 05 : 47 : 36.539 bid = 1.16718 ask = 1.1672 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 06 : 19 : 44.287 bid = 1.16726 ask = 1.16729 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 21 : 11.941 bid = 1.16729 ask = 1.16732 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 22 : 22.686 bid = 1.16729 ask = 1.16732 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 23 : 11.019 bid = 1.16729 ask = 1.16732 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 06 : 23 : 24.926 bid = 1.16729 ask = 1.16732 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 24 : 22.060 bid = 1.16729 ask = 1.16732 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 06 : 24 : 26.871 bid = 1.16729 ask = 1.16732 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 25 : 26.704 bid = 1.16729 ask = 1.16732 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 06 : 25 : 27.401 bid = 1.16729 ask = 1.16732 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 42 : 16.087 bid = 1.16729 ask = 1.16732 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 44 : 00.557 bid = 1.16734 ask = 1.16737 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 44 : 36.362 bid = 1.16734 ask = 1.16737 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 06 : 45 : 00.577 bid = 1.16734 ask = 1.16737 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 51 : 36.472 bid = 1.16734 ask = 1.16737 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 52 : 37.091 bid = 1.16734 ask = 1.16737 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 53 : 38.025 bid = 1.16734 ask = 1.16737 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 06 : 56 : 11.389 bid = 1.16729 ask = 1.16732 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 07 : 03 : 22.022 bid = 1.16708 ask = 1.16711 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 07 : 08 : 35.305 bid = 1.16718 ask = 1.16721 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 07 : 24 : 15.039 bid = 1.16755 ask = 1.16758 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 07 : 27 : 16.339 bid = 1.16751 ask = 1.16754 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 07 : 39 : 26.342 bid = 1.16739 ask = 1.16742 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 07 : 43 : 33.909 bid = 1.16744 ask = 1.16747 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 07 : 45 : 25.462 bid = 1.16744 ask = 1.16747 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 07 : 47 : 05.824 bid = 1.16741 ask = 1.16744 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 07 : 48 : 19.985 bid = 1.16744 ask = 1.16747 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 07 : 49 : 57.642 bid = 1.16744 ask = 1.16747 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 07 : 52 : 39.036 bid = 1.16738 ask = 1.16741 last = 0.0 volume = 0 TICK_FLAG_ASK
 time = 2017.11 . 14 08 : 04 : 47.750 bid = 1.16739 ask = 1.16741 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 08 : 23 : 23.778 bid = 1.16705 ask = 1.16707 last = 0.0 volume = 0 TICK_FLAG_BID TICK_FLAG_ASK
 time = 2017.11 . 14 08 : 28 : 22.233 bid = 1.16706 ask = 1.16708 last = 0.0 volume = 0 TICK_FLAG_BID
 time = 2017.11 . 14 08 : 28 : 37.245 bid = 1.16706 ask = 1.16708 last = 0.0 volume = 0 TICK_FLAG_ASK
 

COPY_TICKS_ALL modundaki Kopitikler serbest meslek sahibidir - boş Teklif/Talep alanlarını doldurur.

 void OnStart ()
{
   MqlTick Ticks[];
   const int Amount = CopyTicks ( _Symbol , Ticks);
  
   ArrayPrint (Ticks);
}
[ 1986 ] 2017.11 . 14 10 : 12 : 11 1.16873 1.16873 0.0000          0 1510654331879        6
[ 1987 ] 2017.11 . 14 10 : 12 : 12 1.16871 1.16873 0.0000          0 1510654332026        2
[ 1988 ] 2017.11 . 14 10 : 12 : 12 1.16871 1.16871 0.0000          0 1510654332947        4
[ 1989 ] 2017.11 . 14 10 : 12 : 16 1.16869 1.16870 0.0000          0 1510654336930        6
[ 1990 ] 2017.11 . 14 10 : 12 : 17 1.16867 1.16868 0.0000          0 1510654337028        6
[ 1991 ] 2017.11 . 14 10 : 12 : 20 1.16866 1.16868 0.0000          0 1510654340943        2
[ 1992 ] 2017.11 . 14 10 : 12 : 22 1.16868 1.16869 0.0000          0 1510654342728        6
[ 1993 ] 2017.11 . 14 10 : 12 : 22 1.16868 1.16870 0.0000          0 1510654342834        4
[ 1994 ] 2017.11 . 14 10 : 12 : 22 1.16868 1.16869 0.0000          0 1510654342954        4
[ 1995 ] 2017.11 . 14 10 : 12 : 23 1.16867 1.16869 0.0000          0 1510654343339        2
[ 1996 ] 2017.11 . 14 10 : 12 : 27 1.16867 1.16868 0.0000          0 1510654347042        4
[ 1997 ] 2017.11 . 14 10 : 12 : 31 1.16867 1.16869 0.0000          0 1510654351428        4
[ 1998 ] 2017.11 . 14 10 : 12 : 31 1.16868 1.16869 0.0000          0 1510654351832        2
[ 1999 ] 2017.11 . 14 10 : 12 : 31 1.16869 1.16871 0.0000          0 1510654351942        6


Bu ne için? INFO modunda bu davranış uygundur, ancak TÜMÜNDE ham verileri bekliyorsunuz ve yalnızca GUI bunları gösteriyor.



Fiyat değişmediyse, o zaman sadece sıfırdır. Ve böylece bayrakların fazladan bir varlık olduğu ortaya çıktı. Sıfır fiyatları göstermek yerine bu flag ile MqlTick yapısını arttırdık.

Tkc sadece (sıfır fiyat olmadan) bayrak mı, sadece (bayraksız) fiyatları mı saklıyor, yoksa irrasyonel olarak hem bayrakları hem de fiyatları mı sunuyor?


Ve bayrak neden tanıtıldı?

  • TICK_FLAG_VOLUME – тик изменил объем

Hacim değişti ya da değişmedi - hiç önemli değil. Yoksa bir şey anlamadım?


Threat Raw TÜM verileri özellikle özel karakterler için gereklidir, tk. bu, özel semboller aracılığıyla bir veri alışverişi kanalı sorunuyla doğrudan ilgilidir.

 
fxsaber :

COPY_TICKS_ALL modundaki Kopitikler serbest meslek sahibidir - boş Teklif/Talep alanlarını doldurur.


Bu ne için? INFO modunda bu davranış uygundur, ancak TÜMÜNDE ham verileri bekliyorsunuz ve yalnızca GUI bunları gösteriyor.



Fiyat değişmediyse, o zaman sadece sıfırdır. Ve böylece bayrakların fazladan bir varlık olduğu ortaya çıktı. Sıfır fiyatları göstermek yerine bu flag ile MqlTick yapısını arttırdık.

Tkc sadece (sıfır fiyat olmadan) bayrak mı, sadece (bayraksız) fiyatları mı saklıyor, yoksa irrasyonel olarak hem bayrakları hem de fiyatları mı sunuyor?


Ve bayrak neden tanıtıldı?

Hacmin değişip değişmediği - hiç önemli değil. Yoksa bir şey anlamadım?


Threat Raw TÜM verileri özellikle özel karakterler için gereklidir, tk. bu, özel semboller aracılığıyla bir veri alışverişi kanalı sorunuyla doğrudan ilgilidir.


Tespit ettiğiniz eksiklikleri hizmet masasına yazar mısınız?

Her şey boşmuş gibi geliyor.


Ve bayrak neden tanıtıldı?

  • TICK_FLAG_VOLUME - değiştirilen ses seviyesini işaretleyin

Bana göre bu çok önemli bir gösterge. Bir anlaşmanın yapıldığını ve sadece değiştirilmediğini, teklif talebini değiştirdiğini başka nasıl öğrenebilirsiniz?

 
Sergey Chalyshev :

Tespit ettiğiniz eksiklikleri hizmet masasına yazar mısınız?

Yönetim Kurulu tüm başvurulara anında cevap vermektedir. Orada daha fazla tartışma sürüyor.

Bana göre bu çok önemli bir gösterge. Bir anlaşmanın yapıldığını ve sadece değiştirilmediğini, teklif talebini değiştirdiğini başka nasıl öğrenebilirsiniz?

Bir bayrak yeter

  • TICK_FLAG_LAST - tik, son işlemin fiyatını değiştirdi
"Anlaşmayı geçti" olarak yeniden yapmak. Son fiyatın değişmiş olması kimseyi rahatsız etmiyor. Tamamen eşleşen fiyat ve hacim ile birkaç ardışık işlem olabilir. Bu nedenle, yalnızca bir bayrak olmalıdır - bir anlaşma.
 

TICK_FLAG_VOLUME - değiştirilen ses seviyesini işaretleyin

Her nasılsa daha önce yardımda yazılanları düşünmemiştim.

Neyi değiştirdi?

Yukarıdakiler aslında ne anlama geliyor?

 
fxsaber :

Yönetim Kurulu tüm taleplere ivedilikle cevap vermektedir. Orada daha fazla tartışma sürüyor.

Bir bayrak yeter

"Anlaşmayı geçti" olarak yeniden yapmak. Son fiyatın değişmiş olması kimseyi rahatsız etmiyor. Tamamen eşleşen fiyat ve hacim ile birkaç ardışık işlem olabilir. Bu nedenle, yalnızca bir bayrak olmalıdır - bir anlaşma.

Eğer iyi tepki verirse.

Bayraklar hakkında:

Danışmanlarda durumu analiz etmek, çakışan işlemleri birleştirmek için böyle bir fikir vardı, bu, olduğu gibi, yeterli.

Böyle bir durum - değişim zamanı, sunucunun zamanı, bilgisayarın zamanı uyuşmuyor. MarketClosed nasıl bulunur, eğer bir anlaşma son fiyattan bile gelmişse, ticaret devam ediyor demektir.

Ve tüm işlemleri bir seviyede birleştirirseniz, seviyenin ne kadar süreyle işlem gördüğü belli olmaz mı?

PS Ekstra bayrakları, iletilen işaretlerin miktarını etkilemez.

 
Sergey Chalyshev :

Eğer iyi tepki verirse.

Bayraklar hakkında:

Uzman Danışmanlarda durumu analiz etmek, çakışan işlemleri birleştirmek için böyle bir fikir vardı, bu da olduğu gibi yeterli.

Böyle bir durum - değişim zamanı, sunucunun zamanı, bilgisayarın zamanı uyuşmuyor. MarketClosed'ın nasıl öğrenileceği, son fiyattan bir anlaşma yapılmışsa, ticaret devam ediyor.

Ve tüm işlemleri aynı seviyede birleştirirseniz, seviyenin ne kadar süreyle işlem gördüğü belli olmaz mı?

Neden aynı seviyede birleşelim? Birleştirmezdim, ama kaseti şimdi olduğu gibi bırakırdım - borsadan ne geldi.

PS Ekstra bayrakları, iletilen işaretlerin miktarını etkilemez.
Bayraklar gerekli bir önlemdir, çünkü ham MQ verileri döndürülmez. Bunları CopyTicks içinde değiştirirler.
 

tkc dosyaları aya göre ayrılmıştır. Bununla ilgili sorular

  1. Kene verileri henüz terminale indirilmemişse, CopyTicks çağrıldığında, terminal hangi tkc dosyalarının çekileceğini nasıl bilebilir?
  2. CopyTicksRange, CopyTicks'i temel alıyor mu yoksa bağımsız mı?
  3. Örneğin, Eylül ayı için onay almanın CopyTicksRange kullanmaktan her zaman daha hızlı olacağını doğru anlıyor muyum? CopyTicks, giriş parametreleri aracılığıyla hangi ay verilerinin çekilmesi gerektiğini bilmiyor mu?
  4. Göstergedeki geçmişi mümkün olan en kısa sürede almanız gerekir. CopyTicksRange üzerinden istekte bulunmak ve her şey indirilene kadar -1 şeklinde bir yumruk almak mümkündür. Ve bir ay için sorarsanız: şimdiki, sonra önceki, vb. Daha yavaş olmayacak, ancak aynı zamanda gösterge en azından bir miktar geçmişle çalışmaya hazır olacak. Doğru?