Gerçek zamanlı keneler - sayfa 5

 
Aleksey Mavrin :

Kenelerin aynı anda birden fazla bayrağı olamaz mı?

haklısın düzelttim

 //+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
bool is_book;
MqlTick ticks[];
ulong last_time, mem_cnt;
bool is_first;
int t_cnt, result;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
  is_book = MarketBookAdd ( Symbol ());
  result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , 0 , 1 );
   if (result > 0 )
  {
    last_time = ulong (ticks[ 0 ].time_msc);
    is_first = true ;
  }
   else
  {
    is_first = false ;
     Alert ( "No start time!" );
     return ( INIT_FAILED );
  }   
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+ 
//| возвращает строковое описание тика                               | 
//+------------------------------------------------------------------+ 
string GetTickDescription( MqlTick &tick) 
  { 
   string res = string (tick.time) + "." +   string (tick.time_msc% 1000 ); 
// 
   bool buy_tick=((tick.flags& TICK_FLAG_BUY )== TICK_FLAG_BUY ); 
   bool sell_tick=((tick.flags& TICK_FLAG_SELL )== TICK_FLAG_SELL ); 
   bool ask_tick=((tick.flags& TICK_FLAG_ASK )== TICK_FLAG_ASK ); 
   bool bid_tick=((tick.flags& TICK_FLAG_BID )== TICK_FLAG_BID ); 
   bool last_tick=((tick.flags& TICK_FLAG_LAST )== TICK_FLAG_LAST ); 
   bool volume_tick=((tick.flags& TICK_FLAG_VOLUME )== TICK_FLAG_VOLUME ); 
// 
   if ((buy_tick== true ) || (sell_tick == true )) 
   { 
     res = res + (buy_tick? StringFormat ( " Buy Tick: Last=%G Volume=%d " ,tick.last,tick.volume): "" ); 
     res = res + (sell_tick? StringFormat ( " Sell Tick: Last=%G Volume=%d " ,tick.last,tick.volume): "" ); 
     res = res + (ask_tick? StringFormat ( " Ask=%G " ,tick.ask): "" ); 
     res = res + (bid_tick? StringFormat ( " Bid=%G " ,tick.ask): "" ); 
   } 
   else 
   { 
     res = res + (ask_tick? StringFormat ( " Ask=%G " ,tick.ask): "" ); 
     res = res + (bid_tick? StringFormat ( " Bid=%G " ,tick.ask): "" ); 
     res = res + (last_tick? StringFormat ( " Last=%G " ,tick.last): "" ); 
     res = res + (volume_tick? StringFormat ( " Volume=%d " ,tick.volume): "" ); 
   } 
   return res; 
  } 
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   if (is_book == true ) MarketBookRelease ( Symbol ());
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
//void OnTick()
void OnBookEvent ( const string &symbol)
{
   if ( Symbol () == symbol)
  {
     if (is_first == true )
    {
      result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 );
       if (result > 0 )
      {
         Print ( "First packet of ticks:" );
        t_cnt = 0 ;
         for ( int i= 0 ; i<result; i++)
        {
           if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;
           Print (GetTickDescription(ticks[i]));
        }
        is_first = false ;
        last_time = ulong (ticks[ 0 ].time_msc);
      } 
    }
     else
    {
      result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 );
       if (result > 0 )
      {
         if (result > t_cnt)
        {
          mem_cnt = t_cnt;
          t_cnt = 0 ;
           for ( int i= 0 ; i<(result - int (mem_cnt)); i++)
          {
             if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++;
             Print (GetTickDescription(ticks[i]));
          } 
           if (last_time == ulong (ticks[ 0 ].time_msc))
          {
            t_cnt += int (mem_cnt);
          }
           else last_time = ulong (ticks[ 0 ].time_msc + 1 );
        }
         else
        {
          t_cnt = 0 ;
          last_time++;
        }
      }
       else
      {
        t_cnt = 0 ;
        last_time++;
      }
    }
  }
}
//+------------------------------------------------------------------+
Tüm keneleri toplama prensibini gösterdim ve bu kodu istediğiniz gibi kullanabilirsiniz (tüm flagları alma)
 
Aleksey Mavrin :

Ancak bu, TÜM OnBookEvent olaylarını işleme alacağınızın garantisi olduğu anlamına mı geliyor?

Anlamına geliyor

 
prostotrader :

tekrarlıyorum

OnBookEvent(), yeni bir onay paketinin geldiğinin garantisini verir!

Bir stok büyünüz var.

OnTick ayrıca bir onay işaretinin geldiği anlamına gelir ve CopyTicks'i kullanarak tüm paketi alabilirsiniz.

Ayrıca, herhangi bir yerden (hatta bir grafik olayından) elde edilebilirler. OnBookEvent'in kendi amacı vardır ve ihtiyaç duyulan ve ihtiyaç duyulmayan her yerde onu dürtmek hiç de gerekli değildir.


basit tüccar :

Yardımdan:

Düzenleme hızı : terminal, hızlı erişim için önbellekte her sembol için son 4096 tik'i saklar ( çalışan camlı semboller için - 65536 tik), bu veri talepleri en hızlı şekilde tamamlanır .

Teklifi sonlandır ----

4K son tikler sizin için yeterli değilse, elbette sipariş defterine abone olun. Ancak bunun nerede gerekli olabileceği hakkında hiçbir fikrim yok (ilk çalıştırma hariç).

 
prostotrader :

Anlamına geliyor

Evet ve bu olayların bir kuyruğunu toplamak ve yalnızca kene geçmişine ihtiyaç duyuluyorsa hepsini işlemek hiç de gerekli değildir.

 
Andrey Khatimlianskii :

Bir stok büyünüz var.

OnTick ayrıca bir onay işaretinin geldiği anlamına gelir ve CopyTicks'i kullanarak tüm paketi alabilirsiniz.

Ayrıca, herhangi bir yerden (hatta bir grafik olayından) elde edilebilirler. OnBookEvent'in kendi amacı vardır ve ihtiyaç duyulan ve ihtiyaç duyulmayan her yerde onu dürtmek hiç de gerekli değildir.


4K son tikler sizin için yeterli değilse, elbette sipariş defterine abone olun. Ancak bunun nerede gerekli olabileceği hakkında hiçbir fikrim yok (ilk çalıştırma hariç).

Andrey!

Konuya "Gerçek zamanlı Tiki" adı verildi.

OnTick() olayı tarafından zamanlayıcı veya başka bir şey tarafından kenelerin alınabileceğini 100 kez not etmeye gerek yoktur.

 
prostotrader :

Andrey!

Konuya "Gerçek zamanlı Tiki" adı verildi.

OnTick() olayı tarafından zamanlayıcı veya başka bir şey tarafından kenelerin alınabileceğini 100 kez not etmeye gerek yoktur.

Aynen öyle! Ve OnBookEvent, konuyla OnTimer ile aynı ilişkiye sahiptir.

 
Andrey Khatimlianskii :

Aynen öyle! Ve OnBookEvent, konuyla OnTimer ile aynı ilişkiye sahiptir.

Bu yıl bir değişim aracıyla lansman yapın

 //+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
    is_book = MarketBookAdd ( Symbol ());
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
     if (is_book == true ) MarketBookRelease ( Symbol ());
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
     Print ( __FUNCTION__ + " Tick is done!" );
   
  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
  {
     if ( Symbol () == symbol)
    {
       Print ( __FUNCTION__ + " Tick is done!" );
    }
   
  }
//+------------------------------------------------------------------+
 
prostotrader :

Bu yıl bir değişim aracıyla lansman yapın

Teşekkürler, nasıl çalıştığını biliyorum.

Bir saniyeliğine, ticarete sizinkinden farklı bir yaklaşım olabileceğini hayal edin.

 
Andrey Khatimlianskii :

Teşekkürler, nasıl çalıştığını biliyorum.

Bir saniyeliğine, ticarete sizinkinden farklı bir yaklaşım olabileceğini hayal edin.

Andrew ( tüm saygımla )

Neden "yuvarlanıyorsun"?

Yoksa Gerçek zamanlı olarak almak ile Tarihten almak arasındaki farkı bilmiyor musunuz?

Peki ya ticarete farklı bir yaklaşım?

Herkes uygun gördüğü şekilde robot ticareti yapar ve yazar!

Katma

Gerçek zamanlı kene alma seçeneğimden hoşlanmıyor musunuz?

Öyleyse versiyonunuzu gönderin !

Gelelim başka bir yaklaşıma...

 
prostotrader :

Andrew ( tüm saygımla )

Neden "yuvarlanıyorsun"?

Yoksa Gerçek zamanlı olarak almak ile Tarihten almak arasındaki farkı bilmiyor musunuz?

Peki ya ticarete farklı bir yaklaşım?

Herkes uygun gördüğü şekilde robot ticareti yapar ve yazar!

Katma

Gerçek zamanlı kene alma seçeneğimden hoşlanmıyor musunuz?

Öyleyse versiyonunuzu gönderin !

Gelelim başka bir yaklaşıma...

Kodunuzda OnBookEvent'i OnTick ile değiştirin ve sonucu karşılaştırın.