Обсуждение статьи "Обработчик события "новый бар"" - страница 3

 
laplacianlab:

Хорошая статья, спасибо, что поделились! Все это было очень полезно!

В общем, я взял вашу функцию isNewBar, и при компиляции она выдает следующее сообщение:"возможна потеря данных из-за преобразования типов".

Поэтому я изменил типы var с datetime на long таким образом:

Теперь она компилируется без каких-либо замечаний и, кажется, работает нормально. Спасибо!


Вероятно, правильнее будет изменить его таким образом:

   datetime lastbar_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
 

В первом способе запроса новой строки столбцов я не понимаю, как количество новых столбцов может быть напрямую присвоено 1. Пожалуйста, подскажите;

 //--- Проверьте наличие новых строк в колонках.
   if(m_lastbar_time<newbar_time)       
     { 
      m_new_bars=1;               // Количество строк нового столбца
      m_lastbar_time=newbar_time; // Запомните время последнего бара
      return(true);
     }
   //--- //--- Проверьте наличие новых строк в колонках.
   if(m_lastbar_time<newbar_time)       
     { 
      m_new_bars=1;               // Количество строк нового столбца
      m_lastbar_time=newbar_time; // Запомните время последнего бара
      return(true);
     }
   //---
 

Согласно правилам объектного моделирования, называть это CIsNewBar - неправильно.

Давайте посмотрим, если автомобиль - это класс, я могу создать/иметь объект "автомобиль". Однако если мой класс - "ÉUmCarroNovo", мы можем иметь или владеть объектом "ÉUmCarroNovo".

Автору следовало бы назвать его CNewBarChecker. Кто-то может придумать New Car Checker и создать его (наш класс будет NewCarChecker.

 
Не Time надо использовать, а Bars
 
В статье столько вариаций кода, но в итоге все равно не понятно, какую функцию корректнее использовать на МТ4 чтобы хоть чуть-чуть, что бы повысить соответствие того что рисует тестер с торговлей. Подскажите!
 
Pavel Komarovsky:
В статье столько вариаций кода, но в итоге все равно не понятно, какую функцию корректнее использовать на МТ4 чтобы хоть чуть-чуть, что бы повысить соответствие того что рисует тестер с торговлей. Подскажите!
datetime counted_bar = 0;

int OnInit()
{
   counted_bar = 0; // если нужно, чтоб при перезапуске последний бар был проанализирован
   ...

void OnTick()
{
   // Если появился новый бар
   if ( iTime( _Symbol, _Period, 0 ) > counted_bar )
   {
      counted_bar = iTime( _Symbol, _Period, 0 );

      // Анализируем индикаторы
      ...
   }
 
Andrey Khatimlianskii:

Андрей, спасибо. Скажите почему сейчас используют iTime, раньше помню во всех функциях и примерах, большинство строилось на iBars.

iTime более точнее работает?

 
Pavel Komarovsky:

Андрей, спасибо. Скажите почему сейчас используют iTime, раньше помню во всех функциях и примерах, большинство строилось на iBars.

iTime более точнее работает?

Я iBars не использовал никогда для этих целей, не знаю.
 
Интересно, почему данный пример не может получить данных таймсерий? Copy... всегда -1 и Bars() всегда 0. Т.е Доступа к данным из класса нет
 

Эта статья настолько хороша, что ее даже используют на занятиях по программированию на MQL5, включая комментарии, совместную работу и исправление ошибок. Поздравляем всех вас.