Mt4 End desteği. - sayfa 32

 
Vitaly Muzichenko :

Yüklendi, kontrol edildi, çalışmıyor

her zaman false verir
Başarılı oldunuz mu, henüz başaramadınız mı?
 
Реter Konow :
Okumayı unuttuğunuz kodları görebilirsiniz. )) Onları nerede yiyor?

Karaganda'da

 
Dmitry Fedoseev :

Karaganda'da

Herhangi bir şeyi karıştırıyor musun? Belki Ulan-Ude'de?
 
George Merts :

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 ...

 
Artyom Trishkin :

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 ...

Piyasa İzleme penceresindeki en fazla enstrüman sayısının 1024 ile sınırlı olduğunu hatırlıyorum. Ve şimdi ne, orada değil mi? 10 bin almak mümkün mü?
 
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.

Fonksiyonda bir döngü kısalttım.

 
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 ...

Özen... ;)
 

İşte yeni bir seçenek. Son.

 //+------------------------------------------------------------------+
//|                                                  Новый бар 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                                   |
//+------------------------------------------------------------------+
int OnInit ()
  { Alert ( "!!!" );
//--- create timer
   EventSetMillisecondTimer ( 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                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();
      
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
{
 static bool Начало_отсчета;
 static int   Минута;
 //---------------------------
 //Нам нужен корректный старт отсчета. Это должно быть время начала бара.
 //---------------------------
 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.

 
Реter Konow :

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.

Samimi olarak.