COPY_TICKS_INFO ve COPY_TICKS_ALL olmak üzere iki bağımsız akışın, bilgi ve ticaret akışının OnTick'e ulaştığını ve ön işleme tabi tutulduğunu hatırlatmak isterim.
Bu diziler birbiriyle senkronize değildir, bu nedenle OnBookEvent'i OnTick ile karşılaştırırsanız, TICKS_INFO almanız gerekir .
OnBookEvent tanımı gereği daha hızlı olmalıdır . ön işleme tabi tutulmaz.
Testlerle kimin daha hızlı olduğunu güvenilir bir şekilde belirlemek imkansızdır. kenelerin aksine emir defterinin piyasa saatini bilmiyoruz.
Geliştiricilere birçok kez sorulmasına rağmen, CAM SÜRESİ EKLE! ! !
ps hıza ek olarak, camın OnTick'e göre başka avantajları da vardır,
Daha önce de belirtildiği gibi, OnTick'te en iyi Teklif ve Satış fiyatını almak imkansızdır,
ve diğer sembollerden gelen verilerOnTick'e gelmez , birkaç enstrümanı analiz eden Uzman Danışmanlar için işe yaramaz.
Bir an için anlama arzunuz varmış gibi göründü ve bu gururu yatıştırmaya yardımcı olacak. Hayır, sadece görünüyordu.
Genel olarak, sorun çözüldü ve herkes sizinkine, fxsaber'a ve kodlarıma bakabilir ve sonuçlar çıkarabilir. Sizinle diyaloğu kesiyorum, sizden yüksek sesli çığlıklardan başka bir şey gelmiyor ve beyniniz bilgi almak için hiç çalışmıyor.
COPY_TICKS_INFO ve COPY_TICKS_ALL olmak üzere iki bağımsız akışın, bilgi ve ticaret akışının OnTick'e ulaştığını ve ön işleme tabi tutulduğunu hatırlatmak isterim.
Bu diziler birbiriyle senkronize değildir, bu nedenle OnBookEvent'i OnTick ile karşılaştırırsanız, TICKS_INFO almanız gerekir .
Sergey, On-fonksiyonlarını sadece bir giriş noktası olarak kullanıyoruz.
Soru, hangi giriş noktasının önce geleceğiydi (son tik hakkında eşit derecede doğru bilgi verirken).
Uzman Danışmanımı çalıştırın ve günlüğe bakın. Olayın zamanı (ms olarak doğru) ve bilinen son onayın zamanı (ms ile de) günlükte görüntülenir.
Sadece "kim önce geldi" için birkaç bireysel keneyi analiz edin.
Sergey Chalyshev :
OnBookEvent tanımı gereği daha hızlı olmalıdır . ön işleme tabi tutulmaz.
OnTik'in bunu geçtiğini sanmıyorum. Ve testler bunu doğruluyor, gecikme yok.
Sergey Chalyshev :
daha önce de belirtildiği gibi, OnTick'te en iyi Teklif ve Satış fiyatını almak imkansızdır.
Sergey, On-fonksiyonlarını sadece bir giriş noktası olarak kullanıyoruz.
Soru, hangi giriş noktasının önce geleceğiydi (son tik için aynı doğru bilgiyi verirken) .
Uzman Danışmanımı çalıştırın ve günlüğe bakın. Olayın zamanı (ms olarak doğru) ve bilinen son onayın zamanı (ms ile de) günlükte görüntülenir.
Sadece "kim önce geldi" için birkaç bireysel keneyi analiz edin.
Bunu yanlış yapıyorsun. Belki sipariş defteri olayı gelmiştir ama henüz tik tarihine dahil edilmemiştir. Bid Ask fiyatlarını karşılaştırmak ve kenelerin geçmişine girmemek gerekir.
OnTik'in bunu geçtiğini sanmıyorum. Ve testler bunu doğruluyor, gecikme yok.
Tarihe geçmeden önce keneler mutlaka işlenir ve gerekli tüm çizelgelere, göstergelere ve Uzman Danışmanlara dağıtılır. Ve tüm bunlar MT5'te sırayla yapılır (paralelleştirilmez).
Belki CopyTicks'in yardımıyla.
Hayır, CopyTicks ile en iyi fiyatı almak da mümkün değil ve ya siparişiniz en iyi fiyata mal olursa.
Kabul edilmelidir ki OnBookEvent() ve OnTick() tüm keneler aynıdır (kodda bir hata vardı),
ancak diğer DOM değişiklikleri hiçbir şekilde OnTick()'e yansıtılmaz
Bu FOREX yatırımcıları için önemli değildir.(Yukarıdaki mesajdan dikkatli alıntı: " 2 kat daha fazla OnBook olayı var. Hepsinin bir yük taşımaması üzücü (en iyi teklif/sor ve son bir teklife ihtiyacınız varsa)" . )
Düzeltilmiş kod:
//+------------------------------------------------------------------+//| 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, tot_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 |//+------------------------------------------------------------------+intOnInit ()
{
tot_cnt = 0 ;
if (Mode == USE_BOOK) 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 );
}
ArraySetAsSeries (ticks, true );
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.bid): "" );
}
else
{
res = res + (ask_tick? StringFormat ( " Ask=%G " ,tick.ask): "" );
res = res + (bid_tick? StringFormat ( " Bid=%G " ,tick.bid): "" );
res = res + (last_tick? StringFormat ( " Last=%G " ,tick.last): "" );
res = res + (volume_tick? StringFormat ( " Volume=%d " ,tick.volume): "" );
}
return res;
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
if (Mode == USE_BOOK)
{
Print ( "USE_BOOK ticks received: " , tot_cnt);
if (is_book == true ) MarketBookRelease ( Symbol ());
}
else
{
Print ( "USE_TICK ticks received: " , tot_cnt);
}
}
//+------------------------------------------------------------------+//| BookEvent function |//+------------------------------------------------------------------+voidOnBookEvent ( conststring &symbol)
{
if ( Mode != USE_BOOK || symbol != Symbol () ) return ;
tot_cnt++;
if (is_first == true )
{
result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 ); //копируем все вновь пришедшие тики от последнего известного времениif (result > 0 )
{
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);
}
else
{
Print ( __FUNCTION__ , ": Pending order!" ); //Изменения стакана (добавлен/удален отложенный ордер)
}
}
else
{
Print ( __FUNCTION__ , ": Pending order!" ); //Изменения стакана (добавлен/удален отложенный ордер)
}
}
}
//+------------------------------------------------------------------+//| OnTick function |//+------------------------------------------------------------------+voidOnTick ()
{
if ( Mode != USE_TICK ) return ;
tot_cnt++;
if (is_first == true )
{
result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 ); //копируем все вновь пришедшие тики от последнего известного времениif (result > 0 )
{
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);
}
else
{
Print ( __FUNCTION__ , ": Pending order!" ); //Изменения стакана (добавлен/удален отложенный ордер)
}
}
else
{
Print ( __FUNCTION__ , ": Pending order!" ); //Изменения стакана (добавлен/удален отложенный ордер)
}
}
}
//+------------------------------------------------------------------+
Kabul edilmelidir ki OnBookEvent() ve OnTick() tüm keneler aynıdır (kodda bir hata vardı),
ancak diğer DOM değişiklikleri hiçbir şekilde OnTick()'e yansıtılmaz
Bu FOREX yatırımcıları için önemli değildir.(Yukarıdaki mesajdan dikkatli alıntı: " 2 kat daha fazla OnBook olayı var. Hepsinin bir yük taşımaması üzücü (en iyi teklif/sor ve son bir teklife ihtiyacınız varsa)" . )
Düzeltilmiş kod:
Sonuç (parça)
Tarihteki keneler elbette çakışacaktır, ancak yukarıdaki resimde, OnCalculat'ta tüm bilgi kenelerinin tarihe düşmediği veya atlanmadığı ortaya çıkıyor.
Bir yanlışlık var mı bilmiyorum, şimdi pazartesi halledeceğim.
Mevcut fiyatı hemen alabilecekseniz neden kopyalayasınız? Teorik olarak, CopyTicks'in iç kısımlarında, fonksiyon gövdesindeki kodun uzunluğunu artıran ek parametre kontrolleri vardır. Ve SymbolInfoTick'in ek parametresi yoktur ve teoride bu işlevin uygulanması daha az kod içermelidir. Daha az kod - daha hızlı yürütme.
Tek kötü yanı, SymbolInfoTick işlevi hakkında CopyTicks'in sahip olduğu gibi ayrıntılı bir belge bulunmaması ve nasıl çalıştığı tam olarak açık olmamasıdır. Önbellekler, ya da ham olanı hemen verir.
COPY_TICKS_INFO ve COPY_TICKS_ALL olmak üzere iki bağımsız akışın, bilgi ve ticaret akışının OnTick'e ulaştığını ve ön işleme tabi tutulduğunu hatırlatmak isterim.
Bu diziler birbiriyle senkronize değildir, bu nedenle OnBookEvent'i OnTick ile karşılaştırırsanız, TICKS_INFO almanız gerekir .
OnBookEvent tanımı gereği daha hızlı olmalıdır . ön işleme tabi tutulmaz.
Testlerle kimin daha hızlı olduğunu güvenilir bir şekilde belirlemek imkansızdır. kenelerin aksine emir defterinin piyasa saatini bilmiyoruz.
Geliştiricilere birçok kez sorulmasına rağmen, CAM SÜRESİ EKLE! ! !
ps hıza ek olarak, camın OnTick'e göre başka avantajları da vardır,
Daha önce de belirtildiği gibi, OnTick'te en iyi Teklif ve Satış fiyatını almak imkansızdır,
ve diğer sembollerden gelen veriler OnTick'e gelmez , birkaç enstrümanı analiz eden Uzman Danışmanlar için işe yaramaz.
COPY_TICKS_ALL, COPY_TICKS_INFO ile değiştirildi
Sonuç
Sarı ile işaretlenmiş - aynı kene!
Belki de kodda hala bir yanlışlık var? ...Bir an için anlama arzunuz varmış gibi göründü ve bu gururu yatıştırmaya yardımcı olacak.
Hayır, sadece görünüyordu.
Genel olarak, sorun çözüldü ve herkes sizinkine, fxsaber'a ve kodlarıma bakabilir ve sonuçlar çıkarabilir.
Sizinle diyaloğu kesiyorum, sizden yüksek sesli çığlıklardan başka bir şey gelmiyor ve beyniniz bilgi almak için hiç çalışmıyor.
FORTS'ta iyi şanslar.
COPY_TICKS_INFO ve COPY_TICKS_ALL olmak üzere iki bağımsız akışın, bilgi ve ticaret akışının OnTick'e ulaştığını ve ön işleme tabi tutulduğunu hatırlatmak isterim.
Bu diziler birbiriyle senkronize değildir, bu nedenle OnBookEvent'i OnTick ile karşılaştırırsanız, TICKS_INFO almanız gerekir .
Sergey, On-fonksiyonlarını sadece bir giriş noktası olarak kullanıyoruz.
Soru, hangi giriş noktasının önce geleceğiydi (son tik hakkında eşit derecede doğru bilgi verirken).
Uzman Danışmanımı çalıştırın ve günlüğe bakın. Olayın zamanı (ms olarak doğru) ve bilinen son onayın zamanı (ms ile de) günlükte görüntülenir.
Sadece "kim önce geldi" için birkaç bireysel keneyi analiz edin.
OnBookEvent tanımı gereği daha hızlı olmalıdır . ön işleme tabi tutulmaz.
OnTik'in bunu geçtiğini sanmıyorum. Ve testler bunu doğruluyor, gecikme yok.
daha önce de belirtildiği gibi, OnTick'te en iyi Teklif ve Satış fiyatını almak imkansızdır.
Belki CopyTicks'in yardımıyla.
Uzman Danışmanımı çalıştırın ve günlüğe bakın. Olayın zamanı (ms olarak doğru) ve bilinen son onayın zamanı (ms ile de) günlükte görüntülenir.
Sadece "kim önce geldi" için birkaç bireysel keneyi analiz edin.
Olağan durum, OnBuk'un OnTick ile aynı anda veya 1-2 ms sonra gelmesidir. Ancak gecikmeler de var:
5 saatlik çalışma için:
2 kat daha fazla OnBook etkinliği. Hepsinin bir yük taşımaması üzücü (en iyi teklife/sormaya ve son bir teklife ihtiyacınız varsa).
Sergey, On-fonksiyonlarını sadece bir giriş noktası olarak kullanıyoruz.
Soru, hangi giriş noktasının önce geleceğiydi (son tik için aynı doğru bilgiyi verirken) .
Uzman Danışmanımı çalıştırın ve günlüğe bakın. Olayın zamanı (ms olarak doğru) ve bilinen son onayın zamanı (ms ile de) günlükte görüntülenir.
Sadece "kim önce geldi" için birkaç bireysel keneyi analiz edin.
Bunu yanlış yapıyorsun. Belki sipariş defteri olayı gelmiştir ama henüz tik tarihine dahil edilmemiştir. Bid Ask fiyatlarını karşılaştırmak ve kenelerin geçmişine girmemek gerekir.
OnTik'in bunu geçtiğini sanmıyorum. Ve testler bunu doğruluyor, gecikme yok.
Tarihe geçmeden önce keneler mutlaka işlenir ve gerekli tüm çizelgelere, göstergelere ve Uzman Danışmanlara dağıtılır. Ve tüm bunlar MT5'te sırayla yapılır (paralelleştirilmez).
Belki CopyTicks'in yardımıyla.
Просто проанализируйте несколько отдельных тиков на предмет "кто раньше".
Ben farklı anlıyorum:
mavi çizgiler OnBook ,
kırmızı OnCalculate = OnTick .
İlgilenirseniz gösterge kodunu gösterebilirim
Ben farklı anlıyorum:
mavi çizgiler OnBook ,
kırmızı OnTick .
İlgilenirseniz gösterge kodunu gösterebilirim
Serezha yok!
Kabul edilmelidir ki OnBookEvent() ve OnTick() tüm keneler aynıdır (kodda bir hata vardı),
ancak diğer DOM değişiklikleri hiçbir şekilde OnTick()'e yansıtılmaz
Bu FOREX yatırımcıları için önemli değildir.(Yukarıdaki mesajdan dikkatli alıntı: " 2 kat daha fazla OnBook olayı var. Hepsinin bir yük taşımaması üzücü (en iyi teklif/sor ve son bir teklife ihtiyacınız varsa)" . )
Düzeltilmiş kod:
Результат (фрагмент)Serezha yok!
Kabul edilmelidir ki OnBookEvent() ve OnTick() tüm keneler aynıdır (kodda bir hata vardı),
ancak diğer DOM değişiklikleri hiçbir şekilde OnTick()'e yansıtılmaz
Bu FOREX yatırımcıları için önemli değildir.(Yukarıdaki mesajdan dikkatli alıntı: " 2 kat daha fazla OnBook olayı var. Hepsinin bir yük taşımaması üzücü (en iyi teklif/sor ve son bir teklife ihtiyacınız varsa)" . )
Düzeltilmiş kod:
Sonuç (parça)
Tarihteki keneler elbette çakışacaktır, ancak yukarıdaki resimde, OnCalculat'ta tüm bilgi kenelerinin tarihe düşmediği veya atlanmadığı ortaya çıkıyor.
Bir yanlışlık var mı bilmiyorum, şimdi pazartesi halledeceğim.
Ya da belki gerçek zamanlı olarak, yerine
kullanmak
Mevcut fiyatı hemen alabilecekseniz neden kopyalayasınız?
Teorik olarak, CopyTicks'in iç kısımlarında, fonksiyon gövdesindeki kodun uzunluğunu artıran ek parametre kontrolleri vardır.
Ve SymbolInfoTick'in ek parametresi yoktur ve teoride bu işlevin uygulanması daha az kod içermelidir.
Daha az kod - daha hızlı yürütme.
Tek kötü yanı, SymbolInfoTick işlevi hakkında CopyTicks'in sahip olduğu gibi ayrıntılı bir belge bulunmaması ve nasıl çalıştığı tam olarak açık olmamasıdır.
Önbellekler, ya da ham olanı hemen verir.