Ne ho 16 - e mi sto già chiedendo se è troppo carico?
Ho un orizzonte temporale minimo di M15... Ma ancora, mi chiedo quando il carico sul terminale comincia ad essere critico?
Il mio cliente mi chiede di controllare e scansionare tutti i simboli sul server ad ogni tick. E non sono molti, non pochi, ma 10 230... Ecco dove sta il problema...
Ho un cliente che mi chiede di controllare e scansionare ad ogni spunta tutti i personaggi del server. E non sono molti, non pochi, ma 10.230... Questo è il problema...
Ricordo che c'era un limite del numero massimo di simboli nella finestra di Market Watch a 1024. Non esiste ora? Posso averne 10 mila?
Alexey Viktorov: C'è confusione? Forse è nell'Ulan-Ude?
Stavo pensando che se una persona ha davvero 600 strumenti nella panoramica del mercato e ad ogni tick controlla l'arrivo di una nuova barra per ogni strumento e ogni timeframe, potrebbe essere costoso...
Io stesso non faccio trading, quindi non so esattamente quante volte questa funzione dovrebbe essere chiamata in pratica.
Il doppio ciclo su simboli e timeframes nella funzione nuova barra può aumentare il carico solo se il numero di simboli e timeframes è molto grande e la funzione viene chiamata su ogni tick di centinaia di simboli. Allora forse Dmitry ha ragione.
Vladimir: Ricordo che c'era un limite del numero massimo di simboli nella finestra di Market Watch a 1024. Non esiste ora? Si possono avere anche 10 mila?
Ho un cliente che mi chiede di controllare e scansionare ad ogni spunta tutti i simboli sul server. E non sono molti, non pochi, ma 10.230... Ecco dove sta il problema...
//+------------------------------------------------------------------+//| Новый бар 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, non funziona nemmeno per me. Anche se l'algoritmo è abbastanza veloce, è una perdita di tempo. Ma non funziona ancora. Non c'è tempo per capirlo. Il tuo stile di programmazione è strano. Potete mettere tutta questa roba con tutte le variabili e i cicli di OnInit e OnTimer in una procedura. Se qualcuno vuole usarlo, tutta questa roba sarà d'intralcio. E se ci saranno 20 o più procedure con lo stesso contenuto? È implementatoqui .
Stavo pensando che se una persona ha davvero 600 strumenti nella panoramica del mercato e ad ogni tick controlla l'arrivo di una nuova barra per ogni strumento e ogni timeframe, potrebbe essere costoso...
Io stesso non faccio trading, quindi non so esattamente quante volte questa funzione dovrebbe essere chiamata in pratica.
Il doppio ciclo su simboli e timeframes nella funzione nuova barra può aumentare il carico solo se il numero di simboli e timeframes è molto grande e la funzione viene chiamata su ogni tick di centinaia di simboli. Allora forse Dmitry ha ragione.
Ho accorciato un ciclo nella funzione.
Dai un'occhiata al codice di Galina e vedi cosa puoi migliorare nel tuo codice.
Messo dentro, testato, non funziona
Mostra sempre il falso.Ovviamente non sapete leggere i codici. )) Dove li divora?
a Karaganda.
in karaganda
Mi chiedo se qualcuno ha davvero così tanto?
Ne ho 16 - e mi sto già chiedendo se è troppo carico?
Ho un orizzonte temporale minimo di M15... Ma ancora, mi chiedo quando il carico sul terminale comincia ad essere critico?
Il mio cliente mi chiede di controllare e scansionare tutti i simboli sul server ad ogni tick. E non sono molti, non pochi, ma 10 230... Ecco dove sta il problema...
Ho un cliente che mi chiede di controllare e scansionare ad ogni spunta tutti i personaggi del server. E non sono molti, non pochi, ma 10.230... Questo è il problema...
C'è confusione? Forse è nell'Ulan-Ude?
Stavo pensando che se una persona ha davvero 600 strumenti nella panoramica del mercato e ad ogni tick controlla l'arrivo di una nuova barra per ogni strumento e ogni timeframe, potrebbe essere costoso...
Io stesso non faccio trading, quindi non so esattamente quante volte questa funzione dovrebbe essere chiamata in pratica.
Il doppio ciclo su simboli e timeframes nella funzione nuova barra può aumentare il carico solo se il numero di simboli e timeframes è molto grande e la funzione viene chiamata su ogni tick di centinaia di simboli. Allora forse Dmitry ha ragione.
Ho accorciato un ciclo nella funzione.
Ricordo che c'era un limite del numero massimo di simboli nella finestra di Market Watch a 1024. Non esiste ora? Si possono avere anche 10 mila?
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Mt4 Fine del supporto.
Artyom Trishkin, 2017.09.11 14:37
Ho un cliente che mi chiede di controllare e scansionare ad ogni spunta tutti i simboli sul server. E non sono molti, non pochi, ma 10.230... Ecco dove sta il problema...
Ecco la nuova versione. Non è definitivo.
Ci sei riuscito o no?
Peter, non funziona nemmeno per me. Anche se l'algoritmo è abbastanza veloce, è una perdita di tempo. Ma non funziona ancora. Non c'è tempo per capirlo.
Il tuo stile di programmazione è strano. Potete mettere tutta questa roba con tutte le variabili e i cicli di OnInit e OnTimer in una procedura. Se qualcuno vuole usarlo, tutta questa roba sarà d'intralcio. E se ci saranno 20 o più procedure con lo stesso contenuto? È implementatoqui .
Stavo pensando che se una persona ha davvero 600 strumenti nella panoramica del mercato e ad ogni tick controlla l'arrivo di una nuova barra per ogni strumento e ogni timeframe, potrebbe essere costoso...
Io stesso non faccio trading, quindi non so esattamente quante volte questa funzione dovrebbe essere chiamata in pratica.
Il doppio ciclo su simboli e timeframes nella funzione nuova barra può aumentare il carico solo se il numero di simboli e timeframes è molto grande e la funzione viene chiamata su ogni tick di centinaia di simboli. Allora forse Dmitry ha ragione.
Ho accorciato un ciclo nella funzione.
Sinceramente.