Gerçek zamanlı keneler - sayfa 20

 
Roman :

Ne yapıyorsun?

Daha önce esnaf ve seviye 2'nin sırasıyla farklı veri abonelikleri olduğunu yazmıştım, bunlar farklı olay işleyicileri.
Bu nedenle, esnafın OnTick'ten ve çetelerin OnBook'tan çağrılması gerekir .
Ve OnBook etkinliklerinden esnaf ve OnTick'ten çeteler aramaya çalışıyorsunuz. Aynı zamanda OnBuk'un ticaret için daha hızlı olacağını düşünmek.
Veri akışlarının her biri için tasarlanmış iki olay işleyiciyi karşılaştırmak bana göre daha hızlı olmayacak, bu bir yanılsama.
Bunların hepsinin deney olduğunu anlıyorum, ancak soketlerin mantığını anlamadan, bu OnTik ve OnBuk işleyicilerinde sonsuza kadar kafanız karışacak.

Daha önce görmediyseniz diye yazdım, "Benim için OnBookEvent()'in alternatifi yok".

Ve tüm kodlar, sonuçlar, açıklamalar - nedenini netleştirmek için.

Gönderinize bakılırsa - anlamıyorsunuz ... :)

Belki mesajı okuyorsundur?

OnBookEvent() aracılığıyla, OnTick() kullanmadan tüm verileri hızla alabilirim, ancak

burada OnTick () aracılığıyla tüm verileri alamıyorum. Öyleyse neden OnTick() kullanmalıyım?

 
prostotrader :

Zaten görmediyseniz, "Benim için OnBookEvent()'in alternatifi yok" yazdım.

Ve tüm kodlar, sonuçlar, açıklamalar - nedenini netleştirmek için.

Gönderinize bakılırsa - anlamıyorsunuz ... :)

Belki konuyu baştan sona okudunuz?

Evet, sizin durumunuzda başka bir alternatif olmadığını anlıyorum ve haklı olarak öyle.
Ve ne hakkında olduğunu anlıyorum. Ben sadece bu noktaya odaklanmak istedim, bu ticaret ve seviye2 farklı veri akışları.
Ve bu unutulmamalı ve bilmeyenler bilsin.
Bu nedenle, eğer işlemlere ihtiyaç duyulursa, bunun için gerekli fonksiyonlar OnTick'ten çağrılmalıdır,
Hacmi veya sipariş defterinin derinliğini içeren bir teklif talebine ihtiyacınız varsa, OnBook'tan ilgili işlevleri çağırın.
OnBook'tan olay alıp işlem almak, OnTick olaylarından hacim veya derinlik elde etmeye çalışmak doğru değildir.
Ve böylece sadece başkalarına açıklama yaptığınızı ve yol boyunca deneyler yaptığınızı fark ettim.

 
Roman :



Ve böylece sadece başkalarına açıklama yaptığınızı ve yol boyunca deneyler yaptığınızı fark ettim.

Doğru anlaşıldı.

Sadece 7 yıl önce benzer deneyler yaptım, OnbookEvent () 'i seçtim.

Ve şimdi kontrol etmeye karar verdim, aniden bir şeyler değişti ... Değişmedi.

 
prostotrader :

Gerçek şu ki, Vadeli Piyasa (FORTS) "yüksek likit" enstrümanlarda bile çok zayıf,

yani , doğru fiyata çok sınırlı sayıda sözleşme satın alabilirsiniz, bu nedenle yalnızca fiyata değil,

ancak bu fiyata sözleşmelerin hacmi çok önemlidir .


Ve SymbolInfo bu fiyatın hacmini vermiyor.

Bu bağlamda, tüm sipariş defterinin hem fiyatlarını hem de hacmini veren MarketBookGet () kullanmanız gerekir.

Bunun konuyla ne ilgisi var? Sadece bu yüzden takıldım, onay almak için OnBook'a ihtiyacınız yok, çünkü. OnTick kesinlikle daha yavaş değil.

Ve neden OnBuk'un vazgeçilmezliği hakkında 20 kez konuşalım? Ondan şüphe eden var mı?


basit tüccar :

Ve OnTck() tetiklendiğinde geçmişten onaylar alabileceğimize katılmıyorum.

OnTck() tetiklendiğinde, son tik zamanını hatırlayarak, tikler alabiliriz

gerçek zamanlı olarak yeni bir onay(lar) geldi - OnTck() işe yaradı, hemen saydık, yani bu geçmiş değil .

Terminale gelen herhangi bir kene zaten tarih oluyor.

Ama bundan bahsetmiyordum, boşluksuz bir bant oluşturmaktan bahsediyordum ( SymbolInfoTick bu konuda yardımcı olmayacak).

 
Aleksey Mavrin :

Başlamak için kodu kontrol etmek istedim

Ama nedense açıcının demo hesabını açamıyorum. Muhtemelen çalışma dışı zaman, yoksa hala sıkıntılar var mı?

Gerçek zamanlı keneler

2020.01.31 13:18

Hesap : 1007932

yatırımcı : FfiR87ty (salt okunur şifre)
 
Andrey Khatimlianskii :

Bunun konuyla ne ilgisi var? Sadece bu yüzden takıldım, onay almak için OnBook'a ihtiyacınız yok, çünkü. OnTick kesinlikle daha yavaş değil.

Ve neden OnBuk'un vazgeçilmezliği hakkında 20 kez konuşalım? Ondan şüphe eden var mı?

Terminale gelen herhangi bir kene zaten tarih oldu.

Ama bundan bahsetmiyordum, boşluksuz bir yayın oluşturmaktan bahsediyordum (SymbolInfoTick bu konuda yardımcı olmayacaktır).

anlaşamadınız anlaşılan :)
Size hacimle en iyi teklif sorularını anlatıyor ve siz ona işlemlerden ve anlaşma kasetinden bahsediyorsunuz :))
Tamam, şimdi anladım.

Eh, nasıl gördüğünüze bağlı olarak, gelen kene zaten tarih oldu.
Değişim sunucusu için, o zaman evet, bu geçmiş, terminal için gerçekten değil.
Sonuçta, OnTik terminali, son 4096 girişi onlara sıcak erişim için önbellekte saklar ve ardından bunları diskteki geçmişe atar.
O zaman bunun henüz bir hikaye olmadığı ortaya çıkıyor)) yani, acil bir kapatma sırasında, önbellek muhtemelen diske kaydedilmeyecek.
Ve terminali yeniden başlattığınızda, önbellekteki kayıp veriler sunucudan zaten yüklenecektir. Ancak bu yalnızca OnTik verileri için geçerlidir.
OnBuk büyük olasılıkla veri yüklemez.

 

Her OnTik için en az bir OnBook olduğunu düşündüm. ama sonra anlamadım


 

Bu kodu Açılış Demosuna koyuyorum, ortalamayı ve max'ı hesaplıyorum. OnTik ve bir sonraki OnBuk arasındaki gecikme.

Kod dizde, belki bir eğri, sonuçlara bakacağım.

 //+------------------------------------------------------------------+
//|                                                   TestOnBook.mq5 |
//|                                           Copyright 2019, Allex@ |
//|                                                 alex-all@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, Allex@"
#property link        "alex-all@mail.ru"
#property version    "1.00"
//---
bool is_book;
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK         // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;
input int    SecForPrint =   300 ;
//---
ulong TimeArrayBook[ 65536 ];
ulong TimeArrayTick[ 65536 ];
ushort curBook,curTick;
ulong   DelaySum= 0 ,DelayCount= 0 ;
int delay,delayMax= 0 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
   curBook= 0 ;
   curTick= 0 ; 
   ArrayInitialize (TimeArrayBook, INT_MAX );
   ArrayInitialize (TimeArrayTick, INT_MAX );
   if (Mode == USE_BOOK) is_book = MarketBookAdd ( Symbol ());
   if ( EventSetTimer (SecForPrint)) 
   return ( INIT_SUCCEEDED );
   else return ( INIT_FAILED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   if (Mode == USE_BOOK)
  {
     if (is_book == true ) MarketBookRelease ( Symbol ());
  }  
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
{ 
  TimeArrayBook[curBook++]= GetMicrosecondCount ();
 }
void OnTick ()
{
  TimeArrayTick[curTick++]= GetMicrosecondCount ();
}
//+------------------------------------------------------------------+
void OnTimer ()
  {
   string out= NULL ;
   int total= MathMax (curBook,curTick);
   int i= 0 ,k= 0 ;
   while (i<total)
     {
       while (i<total && TimeArrayBook[i]<TimeArrayTick[k] )
        {
           Print ( "Book " ,TimeArrayBook[i++]);
        }    
       if (k<curTick- 1 )
        {
         if (i<total)
          {
           delay=TimeArrayBook[i]-TimeArrayTick[k];
           if (delay>delayMax) 
            delayMax=delay;
           if (delay> 0 )
              {
                 DelaySum+=delay;
                 DelayCount++;
              }
          }
         Print ( "Tick " ,TimeArrayTick[k++]);
        }       
        i++;
     }
     if (curTick> 0 )
     {
     Print ( "Tick " ,TimeArrayTick[curTick- 1 ], " last" );
     string out= "Count Event Book after Tick " +DelayCount+ ". Delay Average " + DoubleToString (DelaySum/DelayCount, 2 )+ ". Max " +delayMax;
     Print (out);
     Comment (out);
     }
     curBook= 0 ;
     curTick= 0 ;
  }
//---  
 
Andrey Khatimlianskii :

Terminale gelen herhangi bir kene zaten tarih oldu.

Ama bundan bahsetmiyordum, boşluksuz bir yayın oluşturmaktan bahsediyordum (SymbolInfoTick bu konuda yardımcı olmayacaktır).

TAMAM. Tarihe bakış açınız oldukça açık.

Ama yine de, kene elde etme yönteminin bağlı olacağı görüşündeyim.

onları okumak (tarihten veya gerçek zamanlı olarak).

Ve size SymbolInfoTick ve boşluksuz kaset konusunda itiraz etmedim.

 

İşte gün için bir resim. Tabii ki, OnBuk Tick'in eşleşip eşleşmediği kontrol edilmedi, ancak bir sonraki OnTick OnBuk'un önündeyse, karşılık gelenin ya bir sonraki ya da biraz sonra olacağı umuduyla alındı.

Elbette, ek kontroller olmadan maksimum, bir gösterge veya aykırı değer değildir veya aslında OnBuk bir yerde yavaşlar.


Ama bunu kim açıklayabilir? Neden bu kadar çok OnTick basılmamış ve aralarına tek bir OnBuk sığmıyor?


Neden: