Мт4 Конец поддержке. - страница 35

 
Реter Konow:

В этом варианте функции вообще отсутствует функция Новый_бар();

Это самый экономящий ресурсы вариант из тех, что я предоставлял. К тому же у него есть еще преимущество: Событие нового бара сохраняется все время пока исполняется пользовательский код на событии таймера или тика.

Раньше можно было только один раз получить это событие и флаг снимался функцией Новый_бар(). Сейчас специальная функция один раз в минуту очищает массив "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");
         }
       //----------------------------------        
      }
   }
}
 
Vitaly Muzichenko:

Последний код так-же не работает, за 7 минут принт так и не дождался

Эта функция должна вызываться из OnTick или из таймера.

Возможно, есть какая то небольшая проблема, но мне пока ее не удалось локализовать. Посмотрите код сами и поищите ошибку. Он простой как 3 копейки. И с комментариями вдобавок.

Будет непонятно, - спрашивайте. Мне пора другими вещами заниматься.

 
Реter Konow:

В этом варианте функции вообще отсутствует функция Новый_бар();

Это самый экономящий ресурсы вариант из тех, что я предоставлял. К тому же у него есть еще преимущество: Событие нового бара сохраняется все время пока исполняется пользовательский код на событии таймера или тика.

Раньше можно было только один раз получить это событие и флаг снимался функцией Новый_бар(). Сейчас специальная функция один раз в минуту очищает массив "Cобытия_нового_бара[][]" и вызывается только после исполнения пользовательского кода.

Пользовательские функции могут напрямую обращатся к массиву и получать информацию о событии нового бара все время исполнения кода на событии таймера или тика.

Ресурсы экономятся еще больше.


Я что-то юмора не понял. А что - отладчик не понимает русского? Или это только у меня такой глюк? В латинице видит переменные, а в кириллице нет. 

Пётр, а как ты тогда пользуешься отладчиком или ты им не пользуешься? 

 

Все желающие могут поискать ошибку в коде.

Суть работы кода:

1. Объявляем глобальные массивы:

  • одномерный массив для наименований символов "Символы[]"
  • одномерный массив для таймфреймов "Таймфреймы[]"
  • двумерный массив в который записываем текущее количество баров "Количество_баров[][]"
  • двумерный массив "События_нового_бара[][]" в который будем записывать флаги события явления нового бара каждого символа и каждого таймфрейма. Тех, которые находятся в массивах "Символы[]" и "Таймфреймы[]". Этот массив будет заполнятся в цикле по символам и таймфреймам на событии таймера, один раз в минуту. После этого он будет очищатся. В промежутке между заполнением и очищением к этому массиву будет обращатся пользовательский функционал и получать известие о новых барах.

2. На инициализации устанавливаем размеры массива символов и записываем туда названия символов из обзора рынка.

3. Устанавливаем размер первого измерения массива "Количество_баров[][]", которое равно количеству символов, а второе измерение равно количеству таймфреймов. Этот массив как таблица. В нем будут записываться текущее количество баров каждого символа и каждого таймфрейма. Количество возвращается функцией iBars.

4. Устанавливаем размер первого измерения массива "События_нового_бара[][]" которое равно количеству символов, а второе измерение равно количеству таймфреймов. Этот массив как таблица. В нем будут записываться флаги событий новых баров каждого из символов на каждом из таймфреймов.

5. Внутри таймера мы отсчитываем минуту и делаем двойной (вложенный) цикл по символам (которые находятся в массиве Символы[]) и таймфреймам (которые находятся в массиве Таймфреймы[]). Вызываем функцию iBars и получаем текущее количество баров каждого символа и каждого таймфрейма из массивов Символы и Таймфреймы. Сначала мы сравниваем текущее количество баров с тем, что уже записано в массиве. Если эти значения не равны, то мы ставим флаг события нового бара в массив "События_нового_бара[][]". После этого  записываем текущее количество баров на место прежнего.


Глобальный массив "События_нового_бара[][]" доступен в любой точке программы и он автоматически заполняется каждую минуту и также автоматически очищается. В тот период, когда массив заполняется, пользовательский функционал получает свежие данные о новых барах. После этого массив автоматически очищается.


Вот и все.

 
Реter Konow:

Эта функция должна вызываться из OnTick или из таймера.

Возможно, есть какая то небольшая проблема, но мне пока ее не удалось локализовать. Посмотрите код сами и поищите ошибку. Он простой как 3 копейки. И с комментариями вдобавок.

Будет непонятно, - спрашивайте. Мне пора другими вещами заниматься.


профессиональный ответ 

 
Nikolai Semko:

Я что-то юмора не понял. А что - отладчик не понимает русского? Или это только у меня такой глюк? В латинице видит переменные, а в кириллице нет. 

Пётр, а как ты тогда пользуешься отладчиком или ты им не пользуешься? 

Николай, к своему позору я понятия не имею как пользоваться отладчиком. Никогда им не пользовался. ((
 
Galina Bobro:

профессиональный ответ 

А это профессиональный троллинг.
 
Реter Konow:

Эта функция должна вызываться из OnTick или из таймера.

Возможно, есть какая то небольшая проблема, но мне пока ее не удалось локализовать. Посмотрите код сами и поищите ошибку. Он простой как 3 копейки. И с комментариями вдобавок.

Будет непонятно, - спрашивайте. Мне пора другими вещами заниматься.

Он настолько сложен и закручен, что в нём собака ногу сломит.

Уж извините, но к тому-же он ещё совершенно нечитаемый.

 
Vitaly Muzichenko:

Он настолько сложен и закручен, что в нём собака ногу сломит.

Уж извините, но к тому-же он ещё совершенно нечитаемый.

Знаете поговорку про "не можешь ... не мучай..."? По моему в тему.

 
Реter Konow:

Знаете поговорку про "не можешь ... не мучай..."? По моему в тему.

Верно, вы так и справились с задачей окончательно, ну или Я не смог правильно запустить ваше решение.