В этом варианте функции вообще отсутствует функция Новый_бар();
Это самый экономящий ресурсы вариант из тех, что я предоставлял. К тому же у него есть еще преимущество: Событие нового бара сохраняется все время пока исполняется пользовательский код на событии таймера или тика.
Раньше можно было только один раз получить это событие и флаг снимался функцией Новый_бар(). Сейчас специальная функция один раз в минуту очищает массив "Cобытия_нового_бара[][]" и вызывается только после исполнения пользовательского кода.
Пользовательские функции могут напрямую обращатся к массиву и получать информацию о событии нового бара все время исполнения кода на событии таймера или тика.
Ресурсы экономятся еще больше.
Последний код так-же не работает, за 7 минут принт так и не дождался
//+------------------------------------------------------------------+//Пример использования событий нового бара в пользовательском функционал.//Просто обращаемся к глобальному массиву "События_нового_бара[a1][a2]" напрямую//и используем событие в наших торговых алгоритмах.//+------------------------------------------------------------------+void Моя_стратегия_торговли_на_новых_барах()
{
for(int a1 = 0; a1 < Всех_символов; a1++)
{
string Этот_символ = Символы[a1];
//----------------------------------for(int a2 = 0; a2 < Всех_таймфреймов; a2++)
{
bool Новый_бар = События_нового_бара[a1][a2];
int Этот_таймфрейм = Таймфреймы[a2];
//----------------------------------if(Новый_бар && Этот_символ == "EURUSD" && Этот_таймфрейм == PERIOD_M5)
{
Print("M5");
}
//---------------------------------- if(Новый_бар && Этот_символ == "EURUSD" && Этот_таймфрейм == PERIOD_M1)
{
Print("M1");
}
//----------------------------------
}
}
}
Последний код так-же не работает, за 7 минут принт так и не дождался
Эта функция должна вызываться из OnTick или из таймера.
Возможно, есть какая то небольшая проблема, но мне пока ее не удалось локализовать. Посмотрите код сами и поищите ошибку. Он простой как 3 копейки. И с комментариями вдобавок.
Будет непонятно, - спрашивайте. Мне пора другими вещами заниматься.
В этом варианте функции вообще отсутствует функция Новый_бар();
Это самый экономящий ресурсы вариант из тех, что я предоставлял. К тому же у него есть еще преимущество: Событие нового бара сохраняется все время пока исполняется пользовательский код на событии таймера или тика.
Раньше можно было только один раз получить это событие и флаг снимался функцией Новый_бар(). Сейчас специальная функция один раз в минуту очищает массив "Cобытия_нового_бара[][]" и вызывается только после исполнения пользовательского кода.
Пользовательские функции могут напрямую обращатся к массиву и получать информацию о событии нового бара все время исполнения кода на событии таймера или тика.
Ресурсы экономятся еще больше.
Я что-то юмора не понял. А что - отладчик не понимает русского? Или это только у меня такой глюк? В латинице видит переменные, а в кириллице нет.
Пётр, а как ты тогда пользуешься отладчиком или ты им не пользуешься?
одномерный массив для наименований символов "Символы[]"
одномерный массив для таймфреймов "Таймфреймы[]"
двумерный массив в который записываем текущее количество баров "Количество_баров[][]"
двумерный массив "События_нового_бара[][]" в который будем записывать флаги события явления нового бара каждого символа и каждого таймфрейма. Тех, которые находятся в массивах "Символы[]" и "Таймфреймы[]". Этот массив будет заполнятся в цикле по символам и таймфреймам на событии таймера, один раз в минуту. После этого он будет очищатся. В промежутке между заполнением и очищением к этому массиву будет обращатся пользовательский функционал и получать известие о новых барах.
2. На инициализации устанавливаем размеры массива символов и записываем туда названия символов из обзора рынка.
3. Устанавливаем размер первого измерения массива "Количество_баров[][]", которое равно количеству символов, а второе измерение равно количеству таймфреймов. Этот массив как таблица. В нем будут записываться текущее количество баров каждого символа и каждого таймфрейма. Количество возвращается функцией iBars.
4. Устанавливаем размер первого измерения массива "События_нового_бара[][]" которое равно количеству символов, а второе измерение равно количеству таймфреймов. Этот массив как таблица. В нем будут записываться флаги событий новых баров каждого из символов на каждом из таймфреймов.
5. Внутри таймера мы отсчитываем минуту и делаем двойной (вложенный) цикл по символам (которые находятся в массиве Символы[]) и таймфреймам (которые находятся в массиве Таймфреймы[]). Вызываем функцию iBars и получаем текущее количество баров каждого символа и каждого таймфрейма из массивов Символы и Таймфреймы. Сначала мы сравниваем текущее количество баров с тем, что уже записано в массиве. Если эти значения не равны, то мы ставим флаг события нового бара в массив "События_нового_бара[][]". После этого записываем текущее количество баров на место прежнего.
Глобальный массив "События_нового_бара[][]" доступен в любой точке программы и он автоматически заполняется каждую минуту и также автоматически очищается. В тот период, когда массив заполняется, пользовательский функционал получает свежие данные о новых барах. После этого массив автоматически очищается.
Эта функция должна вызываться из OnTick или из таймера.
Возможно, есть какая то небольшая проблема, но мне пока ее не удалось локализовать. Посмотрите код сами и поищите ошибку. Он простой как 3 копейки. И с комментариями вдобавок.
Будет непонятно, - спрашивайте. Мне пора другими вещами заниматься.
Эта функция должна вызываться из OnTick или из таймера.
Возможно, есть какая то небольшая проблема, но мне пока ее не удалось локализовать. Посмотрите код сами и поищите ошибку. Он простой как 3 копейки. И с комментариями вдобавок.
Будет непонятно, - спрашивайте. Мне пора другими вещами заниматься.
Он настолько сложен и закручен, что в нём собака ногу сломит.
Уж извините, но к тому-же он ещё совершенно нечитаемый.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
В этом варианте функции вообще отсутствует функция Новый_бар();
Это самый экономящий ресурсы вариант из тех, что я предоставлял. К тому же у него есть еще преимущество: Событие нового бара сохраняется все время пока исполняется пользовательский код на событии таймера или тика.
Раньше можно было только один раз получить это событие и флаг снимался функцией Новый_бар(). Сейчас специальная функция один раз в минуту очищает массив "Cобытия_нового_бара[][]" и вызывается только после исполнения пользовательского кода.
Пользовательские функции могут напрямую обращатся к массиву и получать информацию о событии нового бара все время исполнения кода на событии таймера или тика.
Ресурсы экономятся еще больше.
Последний код так-же не работает, за 7 минут принт так и не дождался
Последний код так-же не работает, за 7 минут принт так и не дождался
Эта функция должна вызываться из OnTick или из таймера.
Возможно, есть какая то небольшая проблема, но мне пока ее не удалось локализовать. Посмотрите код сами и поищите ошибку. Он простой как 3 копейки. И с комментариями вдобавок.
Будет непонятно, - спрашивайте. Мне пора другими вещами заниматься.
В этом варианте функции вообще отсутствует функция Новый_бар();
Это самый экономящий ресурсы вариант из тех, что я предоставлял. К тому же у него есть еще преимущество: Событие нового бара сохраняется все время пока исполняется пользовательский код на событии таймера или тика.
Раньше можно было только один раз получить это событие и флаг снимался функцией Новый_бар(). Сейчас специальная функция один раз в минуту очищает массив "Cобытия_нового_бара[][]" и вызывается только после исполнения пользовательского кода.
Пользовательские функции могут напрямую обращатся к массиву и получать информацию о событии нового бара все время исполнения кода на событии таймера или тика.
Ресурсы экономятся еще больше.
Я что-то юмора не понял. А что - отладчик не понимает русского? Или это только у меня такой глюк? В латинице видит переменные, а в кириллице нет.
Пётр, а как ты тогда пользуешься отладчиком или ты им не пользуешься?

Все желающие могут поискать ошибку в коде.
Суть работы кода:
1. Объявляем глобальные массивы:
2. На инициализации устанавливаем размеры массива символов и записываем туда названия символов из обзора рынка.
3. Устанавливаем размер первого измерения массива "Количество_баров[][]", которое равно количеству символов, а второе измерение равно количеству таймфреймов. Этот массив как таблица. В нем будут записываться текущее количество баров каждого символа и каждого таймфрейма. Количество возвращается функцией iBars.
4. Устанавливаем размер первого измерения массива "События_нового_бара[][]" которое равно количеству символов, а второе измерение равно количеству таймфреймов. Этот массив как таблица. В нем будут записываться флаги событий новых баров каждого из символов на каждом из таймфреймов.
5. Внутри таймера мы отсчитываем минуту и делаем двойной (вложенный) цикл по символам (которые находятся в массиве Символы[]) и таймфреймам (которые находятся в массиве Таймфреймы[]). Вызываем функцию iBars и получаем текущее количество баров каждого символа и каждого таймфрейма из массивов Символы и Таймфреймы. Сначала мы сравниваем текущее количество баров с тем, что уже записано в массиве. Если эти значения не равны, то мы ставим флаг события нового бара в массив "События_нового_бара[][]". После этого записываем текущее количество баров на место прежнего.
Глобальный массив "События_нового_бара[][]" доступен в любой точке программы и он автоматически заполняется каждую минуту и также автоматически очищается. В тот период, когда массив заполняется, пользовательский функционал получает свежие данные о новых барах. После этого массив автоматически очищается.
Вот и все.
Эта функция должна вызываться из OnTick или из таймера.
Возможно, есть какая то небольшая проблема, но мне пока ее не удалось локализовать. Посмотрите код сами и поищите ошибку. Он простой как 3 копейки. И с комментариями вдобавок.
Будет непонятно, - спрашивайте. Мне пора другими вещами заниматься.
профессиональный ответ
Я что-то юмора не понял. А что - отладчик не понимает русского? Или это только у меня такой глюк? В латинице видит переменные, а в кириллице нет.
Пётр, а как ты тогда пользуешься отладчиком или ты им не пользуешься?
профессиональный ответ
Эта функция должна вызываться из OnTick или из таймера.
Возможно, есть какая то небольшая проблема, но мне пока ее не удалось локализовать. Посмотрите код сами и поищите ошибку. Он простой как 3 копейки. И с комментариями вдобавок.
Будет непонятно, - спрашивайте. Мне пора другими вещами заниматься.
Он настолько сложен и закручен, что в нём собака ногу сломит.
Уж извините, но к тому-же он ещё совершенно нечитаемый.
Он настолько сложен и закручен, что в нём собака ногу сломит.
Уж извините, но к тому-же он ещё совершенно нечитаемый.
Знаете поговорку про "не можешь ... не мучай..."? По моему в тему.
Знаете поговорку про "не можешь ... не мучай..."? По моему в тему.
Верно, вы так и справились с задачей окончательно, ну или Я не смог правильно запустить ваше решение.