Gerçek zamanlı keneler - sayfa 7

 
prostotrader :

Bir şeyi kanıtlamak veya çürütmek için kodunuzu göndermelisiniz!

Komşu OnTick olayları arasında daha sonra CopyTicks geçmişine giren ve OnBookEvent aracılığıyla gerçek zamanlı olarak yakalanabilen kayıtlar olduğunu kanıtlamayı taahhüt ettiniz.

Ne yazık ki, bu verilen günlüklerden görünmez.

 
fxsaber :

Komşu OnTick olayları arasında daha sonra CopyTicks geçmişine giren ve OnBookEvent aracılığıyla gerçek zamanlı olarak yakalanabilen kayıtlar olduğunu kanıtlamayı taahhüt ettiniz.

Ne yazık ki, bu verilen günlüklerden görünmez.

Çalışma kodunu göndererek ve neden daha hızlı ve gerçek zamanlı çalıştığını açıklayarak bunu kanıtladım,

MQL5 işlevlerine ve kişisel deneyime dayalıdır.

Kendiniz kontrol etmek istiyorsunuz. Veya çalışma koduyla bunun tersini kanıtlayın.

 
prostotrader :

Çalışan kodu göndererek ve neden daha hızlı ve gerçek zamanlı çalıştığını açıklayarak bunu kanıtladım.

Ne yazık ki, CopyTicks geçmişinin eksik OnTick kayıtları şeklindeki ana kanıt eksik olduğunda, kabul edilemez.

 
fxsaber :

Ne yazık ki, CopyTicks geçmişinin eksik OnTick kayıtları şeklindeki ana kanıt eksik olduğunda, kabul edilemez.

Ee n'aber?

Kendiniz kontrol edin.

 
prostotrader :

Ee n'aber?

Kendiniz kontrol edin.

Yalnızca, kanıtınızın yalnızca mantıksal değerlendirmelerle kabul edilemeyeceğine ve başka bir bakış açısıyla çelişmediğine dikkat çekti.

 
fxsaber :

Yalnızca, kanıtınızın yalnızca mantıksal değerlendirmelerle kabul edilemeyeceğine ve başka bir bakış açısıyla çelişmediğine dikkat çekti.

Tamam, anlıyorum, ancak yine de OnBookEvent () üzerindeki yardımı okumanızı tavsiye ederim.

Hiçbir şey kanıtlamayacaktım, sadece konu başlığına çalışan bir kod yazdım ve açıkladım (forum üyelerinin isteği üzerine)

neden bu yöntem OnTick()'ten daha iyi, eğer biri inanmıyorsa , o zaman kendisi kontrol etsin!

Veya açıklamalarımı reddeden bir çalışma kodu düzenleyin.

Katma

Burada, forumda OnBookEvent() ile hiç çalışmamış binlerce FOREX insanı var.

ve bir bardakla.

Bu konuya yazacak herkes için ne yapmalıyım?

 
prostotrader :

İlk OnTick() 'in zamanı 2020.01'dir . otuz 19 : 31 : 11.112

ikinci OnTick() 'in zamanı 2020.01'dir . otuz 19 : 31 : 11.802

Yani bu 690 ms için OnTick() arasında 690 ms geçmiştir.

OnBookEvent() 15 kez ateşlendi

Bu tetikleyicilerin kenelerle ilgili olmadığını düşünüyor musunuz?

Son bandı (teklif / talep) etkilemeyen veya devam eden sipariş defterindeki bir değişikliği tik olarak adlandırmazsanız, evet, bu tetikleyiciler tiklerle ilgili değildir.


basit tüccar :

Birçok kişinin unuttuğu önemli bir nokta daha var.

Bu, bir danışmanın girdi verilerini analiz ederek karar verme hızıdır.

OnTick() yerine OnBookEvent() kullanarak EA'm sizinkinden daha hızlı olacaktır.

Yanılıyorsun ve bunu sana bininci kez söylüyorum.

Bu EA'yı iki grafikte bir terminalde çalıştırın: biri "OnBookEvent Kullan" modunda, ikincisi "OnTick Kullan" modunda (bu bir giriş parametresidir). Olay işleyicilerinin içindeki kod aynıdır (bunu ayrı bir işleve koyabilir ve oradan çağırabilirsiniz, ancak mesele bu değil):

 //---
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK         // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;

//---
bool is_book;
long last_tick_time = 0 ;
MqlTick cur_ticks[], last_tick;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
         if ( Mode == USE_BOOK )
        {
                is_book = MarketBookAdd ( Symbol ());
                 if ( !is_book ) Alert ( "MarketBookAdd failed with error #" , GetLastError (), "!" );
        }

        last_tick_time = 0 ;

         return ( INIT_SUCCEEDED );
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
         if (is_book == true ) MarketBookRelease ( Symbol ());
}

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
{
         if ( Mode != USE_BOOK || symbol != _Symbol ) return ;

         if ( last_tick_time <= 0 )
        {
                 if ( CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , 0 , 1 ) > 0 )
                {
                        last_tick_time = cur_ticks[ 0 ].time_msc;
                        last_tick = cur_ticks[ 0 ];
                }
        }
         if ( last_tick_time > 0 )
        {
                 int new_ticks = CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , last_tick_time, 0 );
                 for ( int i = 0 ; i < new_ticks; i ++ )
                {
                        PrintTick( "OnBook" , cur_ticks[i] );
                }
                 if ( new_ticks > 0 )
                {
                        last_tick_time = cur_ticks[new_ticks- 1 ].time_msc;
                        last_tick = cur_ticks[new_ticks- 1 ];
                }
        }
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
{
         if ( Mode != USE_TICK ) return ;

         if ( last_tick_time <= 0 )
        {
                 if ( CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , 0 , 1 ) > 0 )
                {
                        last_tick_time = cur_ticks[ 0 ].time_msc;
                        last_tick = cur_ticks[ 0 ];
                }
        }
         if ( last_tick_time > 0 )
        {
                 int new_ticks = CopyTicks ( _Symbol , cur_ticks, COPY_TICKS_ALL , last_tick_time, 0 );
                 for ( int i = 0 ; i < new_ticks; i ++ )
                {
                        PrintTick( "OnTick" , cur_ticks[i] );
                }
                 if ( new_ticks > 0 )
                {
                        last_tick_time = cur_ticks[new_ticks- 1 ].time_msc;
                        last_tick = cur_ticks[new_ticks- 1 ];
                }
        }
}

void PrintTick( string func_name, MqlTick &tick )
{
         if ( tick.time_msc == last_tick.time_msc &&
                        tick.bid == last_tick.bid &&
                        tick.ask == last_tick.ask &&
                        tick.last == last_tick.last ) return ;
         Print ( GetTickCount64 (), ": tick received from " , func_name, ": " ,
                        tick.time, "   " , tick.time_msc, "  " ,
                         DoubleToString ( tick.bid, _Digits ), " / " ,
                         DoubleToString ( tick.ask, _Digits ), " / " ,
                         DoubleToString ( tick.last, _Digits ) );
};

Ardından, Uzman Danışmanlar günlüğüne bir göz atın ve onay alma zamanını analiz edin:


İlginç bir şey bulursanız (örneğin, OnTick'ten bir tik alma zamanı ( GetTickCount64 ) OnBook'taki benzer tik için (aynı tik için) daha uzunsa), buraya gönderin.

 
Andrey Khatimlianskii :

Son bandı (teklif / talep) etkilemeyen veya devam eden sipariş defterindeki bir değişikliği tik olarak adlandırmazsanız, evet, bu tetikleyiciler tiklerle ilgili değildir.


Yanılıyorsun ve bunu sana bininci kez söylüyorum.

Bu EA'yı iki grafikte bir terminalde çalıştırın: biri "OnBookEvent Kullan" modunda, ikincisi "OnTick Kullan" modunda (bu bir giriş parametresidir). Olay işleyicilerinin içindeki kod aynıdır (bunu ayrı bir işleve koyabilir ve oradan çağırabilirsiniz, ancak mesele bu değil):

Ardından, Uzman Danışmanlar günlüğüne bir göz atın ve onay alma zamanını analiz edin:


İlginç bir şey bulursanız (örneğin, OnTick'ten bir onay (GetTickCount64) alma süresi, OnBook'taki benzer süreden (aynı onay için) daha uzunsa), buraya gönderin.

Hepsi dediğim gibi!

Günlüğün ilk satırında (işbirliği) açıklamalarımın doğrudan doğrulanması

OnTick() daha sonra tetiklenir ve eski verilerle sonuçlanır


Dosyalar:
20200131.log  220 kb
 
prostotrader :

Hepsi dediğim gibi!

Günlüğün ilk satırında (işbirliği) açıklamalarımın doğrudan doğrulanması

OnTick() daha sonra tetiklenir ve eski verilerle sonuçlanır

Bu günlük parçasından önce bazı bilgileri göster.

Lansmandan hemen sonra mıydı (ilk kayıtlar)? Danışmanlar hangi sırayla göreve başladı?

ps: Ekli günlüğü gördüm, şimdi bir göz atacağım

 
Andrey Khatimlianskii :

Bu günlük parçasından önce bazı bilgileri göster.

Lansmandan hemen sonra mıydı (ilk kayıtlar)? Danışmanlar hangi sırayla göreve başladı?

Önce onbook, sonra ontic, log yukarıda ekli