J'en ai 16 - et je me demande déjà si ce n'est pas une charge trop lourde ?
J'ai une échéance minimale de M15... Mais quand même, je me demande quand la charge sur le terminal commence à être critique ?
Mon client me demande de vérifier et de scanner tous les symboles sur le serveur à chaque tick. Et il n'y a pas beaucoup, pas peu, mais 10 230... C'est là que réside le problème...
J'ai un client qui me demande de vérifier et de scanner à chaque tic tous les personnages sur le serveur. Et il n'y a pas beaucoup, pas peu, mais 10 230... C'est le problème...
Je me souviens qu'il y avait une limite du nombre maximum de symboles dans la fenêtre Market Watch à 1024. N'existe-t-il pas maintenant ? Je peux avoir 10 000 ?
Alexey Viktorov: Y a-t-il une confusion ? Peut-être que c'est dans l'Ulan-Ude ?
Je me disais que si une personne a vraiment 600 instruments dans l'aperçu du marché et qu'à chaque tick elle vérifie l'arrivée d'une nouvelle barre pour chaque instrument et chaque timeframe, cela pourrait être coûteux....
Je ne fais pas moi-même de commerce, donc je ne sais pas exactement combien de fois cette fonction doit être appelée en pratique.
La double boucle sur les symboles et les horizons temporels dans la fonction de nouvelle barre peut augmenter la charge uniquement si le nombre de symboles et d'horizons temporels est très important et que la fonction est appelée à chaque tick de centaines de symboles. Peut-être que Dmitry a raison alors.
Vladimir: Je me souviens qu'il y avait une limite du nombre maximum de symboles dans la fenêtre Market Watch à 1024. N'existe-t-il pas maintenant ? Vous pouvez aussi avoir 10 mille ?
J'ai un client qui me demande de vérifier et de scanner à chaque tic tous les symboles sur le serveur. Et il n'y a pas beaucoup, pas peu, mais 10 230... C'est là que réside le problème...
Voici la nouvelle version. Ce n'est pas définitif.
//+------------------------------------------------------------------+//| Новый бар 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);
}
//--------------------------//+------------------------------------------------------------------+
Peter, ça ne marche pas pour moi non plus. Bien que l'algorithme soit assez rapide, c'est une perte de temps. Mais ça ne marche pas encore. Pas le temps d'y penser. Votre style de programmation est étrange. Vous pouvez mettre tout cela avec toutes les variables et les boucles de OnInit et OnTimer dans une seule procédure. Si quelqu'un veut l'utiliser, tous ces trucs vont le gêner. Que faire s'il y a 20 procédures ou plus avec le même contenu ? Il est mis en œuvreici .
Je me disais que si une personne a vraiment 600 instruments dans l'aperçu du marché et qu'à chaque tick elle vérifie l'arrivée d'une nouvelle barre pour chaque instrument et chaque timeframe, cela peut être coûteux....
Je ne fais pas moi-même de commerce, donc je ne sais pas exactement combien de fois cette fonction doit être appelée en pratique.
La double boucle sur les symboles et les horizons temporels dans la fonction de nouvelle barre peut augmenter la charge uniquement si le nombre de symboles et d'horizons temporels est très important et que la fonction est appelée à chaque tick de centaines de symboles. Peut-être que Dmitry a raison alors.
J'ai raccourci un cycle dans la fonction.
Jetez un œil au code de Galina et voyez ce que vous pouvez améliorer dans votre code.
Je l'ai mis, je l'ai testé, ça ne marche pas.
C'est toujours faux.Vous ne savez manifestement pas comment lire les codes. )) Où les dévore-t-elle ?
à Karaganda.
en karaganda
Je me demande si quelqu'un en a vraiment autant ?
J'en ai 16 - et je me demande déjà si ce n'est pas une charge trop lourde ?
J'ai une échéance minimale de M15... Mais quand même, je me demande quand la charge sur le terminal commence à être critique ?
Mon client me demande de vérifier et de scanner tous les symboles sur le serveur à chaque tick. Et il n'y a pas beaucoup, pas peu, mais 10 230... C'est là que réside le problème...
J'ai un client qui me demande de vérifier et de scanner à chaque tic tous les personnages sur le serveur. Et il n'y a pas beaucoup, pas peu, mais 10 230... C'est le problème...
Y a-t-il une confusion ? Peut-être que c'est dans l'Ulan-Ude ?
Je me disais que si une personne a vraiment 600 instruments dans l'aperçu du marché et qu'à chaque tick elle vérifie l'arrivée d'une nouvelle barre pour chaque instrument et chaque timeframe, cela pourrait être coûteux....
Je ne fais pas moi-même de commerce, donc je ne sais pas exactement combien de fois cette fonction doit être appelée en pratique.
La double boucle sur les symboles et les horizons temporels dans la fonction de nouvelle barre peut augmenter la charge uniquement si le nombre de symboles et d'horizons temporels est très important et que la fonction est appelée à chaque tick de centaines de symboles. Peut-être que Dmitry a raison alors.
J'ai raccourci une boucle dans la fonction.
Je me souviens qu'il y avait une limite du nombre maximum de symboles dans la fenêtre Market Watch à 1024. N'existe-t-il pas maintenant ? Vous pouvez aussi avoir 10 mille ?
Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading
Mt4 Fin du support.
Artyom Trishkin, 2017.09.11 14:37
J'ai un client qui me demande de vérifier et de scanner à chaque tic tous les symboles sur le serveur. Et il n'y a pas beaucoup, pas peu, mais 10 230... C'est là que réside le problème...
Voici la nouvelle version. Ce n'est pas définitif.
Avez-vous réussi ou pas encore ?
Peter, ça ne marche pas pour moi non plus. Bien que l'algorithme soit assez rapide, c'est une perte de temps. Mais ça ne marche pas encore. Pas le temps d'y penser.
Votre style de programmation est étrange. Vous pouvez mettre tout cela avec toutes les variables et les boucles de OnInit et OnTimer dans une seule procédure. Si quelqu'un veut l'utiliser, tous ces trucs vont le gêner. Que faire s'il y a 20 procédures ou plus avec le même contenu ? Il est mis en œuvreici .
Je me disais que si une personne a vraiment 600 instruments dans l'aperçu du marché et qu'à chaque tick elle vérifie l'arrivée d'une nouvelle barre pour chaque instrument et chaque timeframe, cela peut être coûteux....
Je ne fais pas moi-même de commerce, donc je ne sais pas exactement combien de fois cette fonction doit être appelée en pratique.
La double boucle sur les symboles et les horizons temporels dans la fonction de nouvelle barre peut augmenter la charge uniquement si le nombre de symboles et d'horizons temporels est très important et que la fonction est appelée à chaque tick de centaines de symboles. Peut-être que Dmitry a raison alors.
J'ai raccourci un cycle dans la fonction.
Sincèrement.