Gerçek zamanlı keneler - sayfa 10

 
prostotrader :

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

Başka bir hesap numarası gerekiyor

 
prostotrader :

Nasıl görmedin?

Ve bu nedir?

Bunlar, bir şekilde günlükte sona eren aynı fiyatlara sahip kenelerdir (olmamaları gerekir). Neden vurdular - Açıcıyı kontrol edeceğim.

Geçiş yok.

 
Andrey Khatimlianskii :

Burada sadece bir hayran var, o da sensin.

Teknik bilgilerle çalışıyorum.

Bu konudaki camı kelimeden analiz etmek için hiçbir görev yoktu. Görev koşullarına göre fiyat değişikliği olmayan kenelere ihtiyaç duyulmaz.

Açıktır, kazandığınızı düşünün (durumun açıklığı için devam etmek aptalca), ama hiç ikna olmadınız !

Tekrar ediyorum, herkes neyi ve nasıl yapacağını seçer!

İyi şanlar!

 
Andrey Khatimlianskii :

Bir hesap numarasına ihtiyacınız var

Tren


 
prostotrader :

Bence bilerek değil , tek tik al

Böylece, bu zamandan önceki her şeyi atlarsınız (0, yani şimdiki zaman)!

Uygulamam TÜM keneleri sayar

Kodunuz bu tür testler için uygun değil !

Ayrıca, dikkatsizsiniz:

         if ( last_tick_time <= 0 )
        {
                 if ( CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , 0 , 1 ) > 0 )
...
        }
         if ( last_tick_time > 0 )
        {
                 int new_ticks = CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , last_tick_time, 0 );

Bu olmadan, EA her olay işleyicisinde her zaman bir onay alırdı, bu durum böyle değildir.

 
prostotrader :

Açıktır, kazandığınızı düşünün (durumun barizliği için devam etmek aptalca), ama hiç ikna etmediniz!

Tekrar ediyorum, herkes neyi ve nasıl yapacağını seçer!

İyi şanlar!

Parlak!

Geldiler, görevi anlamadılar, FORTS bayrağını salladılar, olay işleyicileri hakkında yanılttılar ve yanlışın kanıtına cevaben iyi şanslar dileyip terk ettiler.

Ve en önemlisi, neyin yanlış olduğunu anlamadılar.


Sana da iyi şanslar!

 
prostotrader :

Tren

Teşekkürler, katıldım.

Sonuçlar benzer, OnBuk, OnTick'e kıyasla genellikle gecikiyor.


Ve hangi durumda OnTick çok daha iyi olabilir (hatta ON FORTS! sizin için dahil!), yanıldığını kabul ettiğinizde göstereceğim.

 

Bu arada, Vasily Sokolov'un doğru kene koleksiyonu hakkında mükemmel bir makalesi vardı. Orada, senkronizasyon süreci ayrıntılı olarak analiz edilir (ki bende yok, bu yüzden bazen aynı işaretler yazdırılıyor):

Но функция CopyTiks не позволяет запрашивать N последних тиков. Вместо этого она предоставляет все тики, пришедшие с указанного момента времени. Это усложняет задачу. Мы должны выполнить запрос, получить массив тиков и сравнить его с массивом тиков, полученным на предыдущем обновлении. При этом мы выясним, какие из вновь пришедших тиков не входили в "прошлую поставку", то есть являются новыми. Но сравнивать тики между собой напрямую невозможно, просто потому что видимых различий между ними может вообще не быть. Например, обратимся к нижеприведенной таблице сделок:

Pirinç. 5. Aynı işlem örneği ile tüm işlemlerin tablosu.

Hemen iki grup kesinlikle aynı kene görüyoruz. Kırmızı çerçevelerle işaretlenirler, aynı zamana, hacme, yöne ve fiyata sahiptirler. Böylece, tek tek keneleri birbirleriyle karşılaştırmanın imkansız olduğundan emin oluyoruz.

Ancak bir grup keneyi karşılaştırabilirsiniz. İki tik grubu eşitse, bu ve sonraki tiklerin son fiyat güncellemesi sırasında zaten analiz edildiği sonucuna varabiliriz.

Пишем скальперский стакан цен на основе графической библиотеки CGraphic
Пишем скальперский стакан цен на основе графической библиотеки CGraphic
  • www.mql5.com
Именно с этой, улучшенной и дополненной версией мы и начнем работать, чтобы постепенно превратить ее в скальперский стакан цен. Краткий обзор графической библиотеки CPanel Созданию пользовательских интерфейсов в MQL5 посвящено много статей. Среди них особенно выделяется серия Анатолия Кажарского "Графические интерфейсы", после которой сложно...
 
Bir test danışmanı tarafından yazılmıştır.
 int OnInit ()
{
   return (! MarketBookAdd ( _Symbol )); // Подписались на стакан.
}

void OnDeinit ( const int )
{
   MarketBookRelease ( _Symbol ); // Отписались от стакана.
}

// Получает BestBands
bool GetBidAsk( double &PriceBid, double &PriceAsk, const MqlBookInfo &MarketDepth[] )
{  
  PriceAsk = 0 ;
  
   const int Size = ArraySize (MarketDepth);
   int Pos = 0 ;
  
   while ((Pos < Size) && (MarketDepth[Pos].type == BOOK_TYPE_SELL ))
  {
    PriceAsk = MarketDepth[Pos].price;
    
    Pos++;
  }
    
  PriceBid = (Pos < Size) ? MarketDepth[Pos].price : 0 ;
  
   return ( true );
}

// Получает последний известный тик.
bool GetLastTick( const string &Symb, MqlTick &Tick )
{
   static MqlTick Ticks[ 1 ];
  
   const bool Res = SymbolInfoTick (Symb, Tick) && ( CopyTicks (Symb, Ticks, COPY_TICKS_INFO , 0 , 1 ) == 1 );
  
   if (Res && (Ticks[ 0 ].time_msc > Tick.time_msc))
    Tick = Ticks[ 0 ];
  
   return (Res);
}

// Получает тики через стакан и стандартным методом.
bool GetLastTicks( const string &Symb, MqlTick &Tick, MqlTick &TickBook )
{
   MqlBookInfo MarketDepth[];

   return ( MarketBookGet (Symb, MarketDepth) && GetLastTick(Symb, Tick) && GetBidAsk(TickBook.bid, TickBook.ask, MarketDepth));
}

// Сравнивает тики.
bool IsDiff( const MqlTick &Tick1, const MqlTick &Tick2 )
{
   return ((Tick1.bid != Tick2.bid) || (Tick1.ask != Tick2.ask));
}

#define TOSTRING(A) (FuncName + " " + #A + ": " + ( string )A.bid + "/" + ( string )A.ask + "\n" )

// Распечатываем тики, полученные разными способами.
void TestFunc( const string FuncName )
{
   static MqlTick Tick = { 0 };
   static MqlTick Book = { 0 };

   if (GetLastTicks( _Symbol , Tick, Book))
     Print ((IsDiff(Tick, Book) ? "* " : NULL ) + TOSTRING(Tick) + TOSTRING(Book)); // Если тики отличаются, добавляем '*'.
}

void OnTick ()
{
  TestFunc( __FUNCTION__ ); // Распечатываем тики, полученные разными способами.
}

void OnBookEvent ( const string &Symb )
{  
   if (Symb == _Symbol )
    TestFunc( __FUNCTION__ ); // Распечатываем тики, полученные разными способами.
}


Sonuç kötü: OnTick/OnBookEvent'te, farklı şekillerde alınan onay işaretleri çoğu zaman aynı Açık işlevi içinde eşleşmez. Aynı zamanda, hangi işlevde bir kene elde etme yönteminin ilgili olduğunu ve hangisinin olmadığını belirlemek imkansızdır. Korkunç belirsizlik.


Camın modası geçtiğinde oluyor gibi görünüyor.

 

Dene:

 //+------------------------------------------------------------------+
//|                                                   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;
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK         // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;
//+------------------------------------------------------------------+
//| 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 ( Mode != USE_BOOK || symbol != Symbol () ) return ;
   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 ( __FUNCTION__ , ": " ,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 ( __FUNCTION__ , ": " ,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++;
         Print ( __FUNCTION__ , ": Pending order!" );
      }
    }
  }
}

void OnTick ()
{
   if ( Mode != USE_TICK ) return ;
   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 ( __FUNCTION__ , ": " , 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 ( __FUNCTION__ , ": " , 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++;
         Print ( __FUNCTION__ , ": Pending order!" );
      }
    }
  
}
//+------------------------------------------------------------------+

GetTickCount64() olmadan bile fonksiyonların nasıl çalıştığını görebilirsiniz.

 2020.01 . 31 17 : 01 : 56.363 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 57.294 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 50.159 Bid= 1585.4 
2020.01 . 31 17 : 01 : 57.637 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 57.637 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 50.159 Bid= 1585.4 
2020.01 . 31 17 : 01 : 57.690 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 57.690 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 50.159 Bid= 1585.4 
2020.01 . 31 17 : 01 : 57.730 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 57.730 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 50.159 Bid= 1585.4 
2020.01 . 31 17 : 01 : 58.293 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 58.294 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 50.159 Bid= 1585.4 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 51.444 Bid= 1585.4 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 51.444 Bid= 1585.4 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 51.536 Bid= 1585.4 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 52.107 Ask= 1585.5 
2020.01 . 31 17 : 01 : 58.519 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 52.326 Ask= 1585.4 
2020.01 . 31 17 : 01 : 59.674 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 51.536 Bid= 1585.4 
2020.01 . 31 17 : 01 : 59.861 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 52.107 Ask= 1585.5 
2020.01 . 31 17 : 02 : 00.530 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 52.326 Ask= 1585.4 
2020.01 . 31 17 : 02 : 01.189 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 01.216 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 55.7 Ask= 1585.5 
2020.01 . 31 17 : 02 : 01.492 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : Pending order!
2020.01 . 31 17 : 02 : 01.707 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 01.707 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 55.530 Ask= 1585.4 
2020.01 . 31 17 : 02 : 01.967 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : Pending order!
2020.01 . 31 17 : 02 : 01.989 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 01.989 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 55.790 Bid= 1585.4 
2020.01 . 31 17 : 02 : 02.287 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : Pending order!
2020.01 . 31 17 : 02 : 02.641 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 02.641 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 56.104 Ask= 1585.5 
2020.01 . 31 17 : 02 : 02.888 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 03.050 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 03.050 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 56.691 Ask= 1585.6 
2020.01 . 31 17 : 02 : 03.050 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 56.869 Bid= 1585.6 
2020.01 . 31 17 : 02 : 03.376 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 56.869 Bid= 1585.6 
2020.01 . 31 17 : 02 : 03.468 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 03.708 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 03.708 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 57.286 Ask= 1585.5   Bid= 1585.5 
2020.01 . 31 17 : 02 : 03.708 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 57.440 Ask= 1585.6   Bid= 1585.6 
2020.01 . 31 17 : 02 : 04.860 Ticks_test (GOLD- 3.20 ,H1)       OnTick : 2020.01 . 31 17 : 01 : 47.889 Ask= 1585.4 
2020.01 . 31 17 : 02 : 04.860 Ticks_test (GOLD- 3.20 ,H1)       OnBookEvent : 2020.01 . 31 17 : 01 : 57.440 Ask= 1585.6   Bid= 1585.6 
Dosyalar:
20200131.log  28 kb