Alexey Viktorov : Herhangi bir şeyi karıştırıyor musun? Belki Ulan-Ude'de?
Bir kişinin piyasa incelemesinde gerçekten 600 enstrümanı varsa ve her enstrüman için yeni bir çubuğun gelişini ve her tikte her zaman dilimini kontrol ederse, pahalı olabileceğini düşündüm...
Ben kendim ticaret yapmıyorum, bu nedenle pratikte bu işlevin kaç kez çağrılması gerektiğini tam olarak bilmiyorum.
Fonksiyondaki enstrümanlar ve zaman çerçeveleri için bir çift döngü, yalnızca sembollerin ve zaman çerçevelerinin sayısı çok büyükse ve fonksiyon yüzlerce enstrümanın her işaretinde çağrılırsa yeni bir çubuk yükleyebilir. Belki o zaman Dmitry haklıdır.
Vladimir : Piyasa İzleme penceresindeki en fazla enstrüman sayısının 1024 ile sınırlı olduğunu hatırlıyorum. Ve şimdi ne var, orada değil mi? 10 bin almak mümkün mü?
her bir onay işaretinde sunucudaki tüm sembolleri kontrol etmemi ve taramamı istiyor. Ve çok değil, az değil, 10.230 var ... Pusu burada ...
//+------------------------------------------------------------------+//| Новый бар 2.mq4 |//| Peter Konow |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Peter Konow"#property link"https://www.mql5.com"#property version"1.00"#property strict//+------------------------------------------------------------------+datetime Время_последнего_бара;
int Частота_таймера = 25 ;
int Всех_символов;
string Символы[];
int Таймфреймы[ 7 ] = { PERIOD_M1 , PERIOD_M5 , PERIOD_M15 , PERIOD_M30 , PERIOD_H1 , PERIOD_H4 , PERIOD_D1 };
int Всех_таймфреймов = 7 ;
int Количество_баров[][ 7 ];
bool События_нового_бара[][ 7 ];
//+------------------------------------------------------------------+#define M1 0#define M5 1#define M15 2#define M30 3#define H1 4#define H4 5#define D1 6//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ()
{ Alert ( "!!!" );
//--- create timerEventSetMillisecondTimer ( 25 );
//-------------------------------------------------------------//Записываем время последнего бара на момент загрузки эксперта. //Для корректного начала работы, робота нужно запустить на М1. //-------------------------------------------------------------
Время_последнего_бара = Time [ 0 ];
//------------------------------------------------------------- //Узнаем сколько символов есть в обзоре рынка.//---------------------------------------------------------
Всех_символов = SymbolsTotal ( true );
//--------------------------------------------------------- //Устанавливаем размер массива Символы. Внутри него будут записаны//имена всех символов, которые есть в окне обзоре рынка.//---------------------------------------------------------ArrayResize (Символы,Всех_символов);
//---------------------------------------------------------//Устанавливаем размеры массивов "Количество_баров[]" и "События_нового_бара[]".//В массиве "Количество_баров[]" будет записыватся текущее количество баров каждого символа//и каждого таймфрейма. А в массиве "События_нового_бара[]" устанавливаться флаги//события нового бара для каждого символа и каждого таймфрейма. //---------------------------------------------------------ArrayResize (Количество_баров,Всех_символов);
ArrayResize (События_нового_бара,Всех_символов);
//---------------------------------------------------------//Записываем наименования символов обзора рынка в массив "Символы[]".//---------------------------------------------------------for ( int a1 = 0 ; a1 < Всех_символов; a1++)
{
Символы[a1] = SymbolName (a1 + 1 , true );
//Возможно, нумерация символов в обзора рынка идет с нуля.//Тогда: Символы[a1] = SymbolName(a1,true);
}
//---------------------------------------------------------return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
//--- destroy timerEventKillTimer ();
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer ()
{
staticbool Начало_отсчета;
staticint Минута;
//---------------------------//Нам нужен корректный старт отсчета. Это должно быть время начала бара.//---------------------------if (!Начало_отсчета && Время_последнего_бара != Time [ 0 ])Начало_отсчета = true ;
//--------------------------- if (Начало_отсчета)Минута++;
//--------------------------- //В следующем цикле, мы будем обращатся к функции iBars для получения количества баров на //каждом из символов и таймфреймов, которые будем проходить в цикле.//Далее, будем сравнивать записанное количество баров с текущим и при //наличии разницы установим флаг события нового бара в массив "События_нового_бара[]".//---------------------------if (Минута*Частота_таймера >= 60000 )
{
for ( int a1 = 0 ; a1 < Всех_символов; a1++)
{
string Этот_символ = Символы[a1];
//---------------------------------for ( int a2 = 0 ; a2 < Всех_таймфреймов; a2++)
{
int Этот_таймфрейм = Таймфреймы[a2];
//------------------------------------------int Текущее_количество_баров = iBars (Этот_символ,Этот_таймфрейм);
//------------------------------------------if (Текущее_количество_баров > Количество_баров[a1][a2])
{
//------------------------------------------------------------//Если это не самая первая запись в массив Количества баров,//то фиксируем событие нового бара.//------------------------------------------------------------if (Количество_баров[a1][a2])
{
События_нового_бара[a1][a2] = true ;
}
//------------------------------------------------------------//Устанавливаем новое значение текущего количества баров.//------------------------------------------------------------
Количество_баров [a1][a2] = Текущее_количество_баров;
}
//------------------------------------------
}
}
//---------
Минута = 0 ;
}
//-----------------------------------------------
}
//+------------------------------------------------------------------+//---------------------------------------------------------------------//Функция Новый_бар() принимает наименование символа и таймфрейм.//Она делает цикл по массиву символов, находит совпадение наименований и //с запрашиваемым символом, и далее ищет нужный таймфрейм для получения//индекса ячейки массива в которой он находится. //Найдя индекс ячейки имени нужного символа и индекс ячейки нужного//таймфрейма, функция обращается к массиву "События_нового_бара" и //возвращает факт события нового бара или его отсутствие.//После возврата флага события, функция снимает этот флаг.//Следовательно, флаг события можно получить только один раз за бар.//---------------------------------------------------------------------bool Новый_бар( string Символ, int Таймфрейм)
{
bool Новый_бар;
//-----------------------for ( int a1 = 0 ; a1 < Всех_символов; a1++)
{
if (Символы[a1] == Символ)
{
Новый_бар = События_нового_бара[a1][Таймфрейм];
if (Новый_бар)События_нового_бара[a1][Таймфрейм] = 0 ;
return (Новый_бар);
}
}
//-----------------------return ( false );
}
//--------------------------//+------------------------------------------------------------------+
Реter Konow : Başarılı oldunuz mu, henüz başaramadınız mı?
Peter, bende de çalışmıyor. Algoritma çok hızlı olmasına rağmen namluyu boş yere sürüyorlar. Aslında henüz çalışmıyor. Anlamak için zaman yok. Garip bir programlama stiliniz var. Ve tüm bu ekonomiyi OnInit ve OnTimer'daki tüm değişkenler ve döngülerle tek bir prosedüre sokabilirsiniz. Birisi kullanmak isterse, çünkü bu vücut kiti ayaklarının altına girecek. Ve aynı vücut kiti ile 20 benzer prosedür varsa? Sonuçta , burada uygulanıyor.
Bir kişinin piyasa incelemesinde gerçekten 600 enstrümanı varsa ve her enstrüman için yeni bir çubuğun gelişini ve her tikte her zaman dilimini kontrol ederse, pahalı olabileceğini düşündüm...
Ben kendim ticaret yapmıyorum, bu nedenle pratikte bu işlevin kaç kez çağrılması gerektiğini tam olarak bilmiyorum.
Fonksiyondaki enstrümanlar ve zaman çerçeveleri için bir çift döngü, yalnızca sembollerin ve zaman çerçevelerinin sayısı çok büyükse ve fonksiyon yüzlerce enstrümanın her işaretinde çağrılırsa yeni bir çubuk yükleyebilir. Belki o zaman Dmitry haklıdır.
Fonksiyonda bir döngü kısalttım.
Galina'nın koduna bakın, kodunuzda nelerin geliştirilebileceği hakkında düşünceleriniz olabilir.
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
Yüklendi, kontrol edildi, çalışmıyor
her zaman false verirOkumayı unuttuğunuz kodları görebilirsiniz. )) Onları nerede yiyor?
Karaganda'da
Karaganda'da
Merak ediyorum, gerçekten bu kadar değerli olan var mı?
16'm var ve şimdiden düşünüyorum da yük çok mu büyük?
Doğru, minimum M15 zaman dilimim var ... Ama yine de terminaldeki yükün ne zaman kritik olmaya başladığını merak ediyorum?
Müşterim, her bir onay işaretinde sunucudaki tüm sembolleri kontrol etmemi ve taramamı istiyor. Ve çok değil, az değil, 10.230 var ... Pusu burada ...
Müşterim, her bir onay işaretinde sunucudaki tüm sembolleri kontrol etmemi ve taramamı istiyor. Ve çok değil, az değil, 10.230 var ... Pusu burada ...
Herhangi bir şeyi karıştırıyor musun? Belki Ulan-Ude'de?
Bir kişinin piyasa incelemesinde gerçekten 600 enstrümanı varsa ve her enstrüman için yeni bir çubuğun gelişini ve her tikte her zaman dilimini kontrol ederse, pahalı olabileceğini düşündüm...
Ben kendim ticaret yapmıyorum, bu nedenle pratikte bu işlevin kaç kez çağrılması gerektiğini tam olarak bilmiyorum.
Fonksiyondaki enstrümanlar ve zaman çerçeveleri için bir çift döngü, yalnızca sembollerin ve zaman çerçevelerinin sayısı çok büyükse ve fonksiyon yüzlerce enstrümanın her işaretinde çağrılırsa yeni bir çubuk yükleyebilir. Belki o zaman Dmitry haklıdır.
Fonksiyonda bir döngü kısalttım.
Piyasa İzleme penceresindeki en fazla enstrüman sayısının 1024 ile sınırlı olduğunu hatırlıyorum. Ve şimdi ne var, orada değil mi? 10 bin almak mümkün mü?
her bir onay işaretinde sunucudaki tüm sembolleri kontrol etmemi ve taramamı istiyor. Ve çok değil, az değil, 10.230 var ... Pusu burada ...
İşte yeni bir seçenek. Son.
Başarılı oldunuz mu, henüz başaramadınız mı?
Peter, bende de çalışmıyor. Algoritma çok hızlı olmasına rağmen namluyu boş yere sürüyorlar. Aslında henüz çalışmıyor. Anlamak için zaman yok.
Garip bir programlama stiliniz var. Ve tüm bu ekonomiyi OnInit ve OnTimer'daki tüm değişkenler ve döngülerle tek bir prosedüre sokabilirsiniz. Birisi kullanmak isterse, çünkü bu vücut kiti ayaklarının altına girecek. Ve aynı vücut kiti ile 20 benzer prosedür varsa? Sonuçta , burada uygulanıyor.
Bir kişinin piyasa incelemesinde gerçekten 600 enstrümanı varsa ve her enstrüman için yeni bir çubuğun gelişini ve her tikte her zaman dilimini kontrol ederse, pahalı olabileceğini düşündüm...
Ben kendim ticaret yapmıyorum, bu nedenle pratikte bu işlevin kaç kez çağrılması gerektiğini tam olarak bilmiyorum.
Fonksiyondaki enstrümanlar ve zaman çerçeveleri için bir çift döngü, yalnızca sembollerin ve zaman çerçevelerinin sayısı çok büyükse ve fonksiyon yüzlerce enstrümanın her işaretinde çağrılırsa yeni bir çubuk yükleyebilir. Belki o zaman Dmitry haklıdır.
Fonksiyonda bir döngü kısalttım.
Samimi olarak.