Добрый день!
В учебнике по mql4 предлагается следующая функция по определению нового бара:
В связи с чем, у меня возник вопрос по строке выделенной красным. Здесь New_Time=0, следовательно, данное условие будет выполняться if(New_Time!=Time[0]), что приведет к тому, что при первой же проверке на новый бар с момента запуска программы будет находится новый бар:
Правилен ли ход моих мыслей?
Если да, то в случае когда нам необходимо при запуске программы не считать бар [0] новым, а только последующий сформировавшийся бар, можно ли модифицировать код следующим образом?
Спасибо!
bool Fun_New_Bar() // Ф-ия обнаружения .. { // .. нового бара static datetime Prev_Time=0; // Время текущего бара if (Prev_Time==0) { Prev_Time=Time[0]; return(false); } if(Prev_Time!=Time[0]) // Сравниваем время { Prev_Time=Time[0]; // Теперь время такое return(true); // Поймался новый бар } return(false); }Лучше уж так. Функция возвращает истину (true) если это не первый запуск и пришел новый тик нового бара
Спасибо, Vinin!
У меня один уточняющий вопрос непосвященного в дела программные, если позволите.
bool Fun_New_Bar() // { // static datetime Prev_Time=0; //2. При повторном обращении мы в самом начале присваиваем Prev_Time значение 0, таким образом удаляя // присвоенное нами ранее значение // Time[0] в пункте 1. Или нет? Как это работает? if (Prev_Time==0) { Prev_Time=Time[0]; return(false); } if(Prev_Time!=Time[0]) // { Prev_Time=Time[0]; // return(true); // 1. Здесь мы присваиваем Prev_Time значение Time[0]. } return(false); }Спасибо.
Спасибо Vinin.
Читал. Неспециалисту понять сложновато. Поэтому и спросил здесь.
"при выходе из функции, внутри которой объявлена статическая переменная, значение этой переменной не теряется." -- этот момент кажется понятным, т.е. после
Prev_Time=Time[0]; return(true);
Prev_Time будет равным Time[0].
На вопрос относительно того, что случится когда мы в следующий раз обратимся к функции и нам встретится строка
{ static datetime Prev_Time=0;
я ответа не нашел.
Спасибо.
На вопрос относительно того, что случится когда мы в следующий раз обратимся к функции и нам встретится строка
я ответа не нашел.
Спасибо.
Значение переменной не изменится
Вот модификация функции Виктора от меня:
bool IsNewBar() { static int nBars = 0; if (nBars == 0) { nBars = Bars; return(false); } if (nBars != Bars) { nBars = Bars; return(true); } return(false); }Но по мне это ближе (первый запуск функции аналогичен наличию нового бара):
bool IsNewBar() { static int nBars = 0; if (nBars != Bars) { nBars = Bars; return(true); } return(false); }
Здравствуйте.
Почему бы проще не воспользоваться:
...
if( High[0]==Low[0] )
{ return(true); }
...
Здравствуйте.
Почему бы проще не воспользоваться:
...
if( High[0]==Low[0] )
{ return(true); }
...
Возможны ошибки в таком случае.
Даже это не спасёт от ошибок:
if(High[0] == Low[0] && Open[0] == Close[0] && High[0] == Open[0]) { return(true); }
Здравствуйте.
Почему бы проще не воспользоваться:
...
if( High[0]==Low[0] )
{ return(true); }
...
По ночам точечные бары косяками ходят.
И на каждом High[0]==Low[0].
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
В учебнике по mql4 предлагается следующая функция по определению нового бара:
В связи с чем, у меня возник вопрос по строке выделенной красным. Здесь New_Time=0, следовательно, данное условие будет выполняться if(New_Time!=Time[0]), что приведет к тому, что при первой же проверке на новый бар с момента запуска программы будет находится новый бар:
Правилен ли ход моих мыслей?
Если да, то в случае когда нам необходимо при запуске программы не считать бар [0] новым, а только последующий сформировавшийся бар, можно ли модифицировать код следующим образом?
Спасибо!