244
надёжный способ - анализировать время открытия нулевого бара. Время открытия
нулевого бара - это такая характеристика бара, которая не изменяется в течение времени
его формирования. Новые тики, поступающие в процессе развития нулевого бара, могут
изменить его максимальную цену High[0], минимальную цену Low[0], цену закрытия
Close[0] и объём Volume0]. Но такие характеристики нулевого бара, как цена открытия
Open[0] и время открытия Time[0], не изменяются.
Поэтому достаточно запомнить время открытия нулевого бара и на каждом тике
сравнивать это значение с последним известным временем открытия нулевого бара. Как
только обнаружится несовпадение, это будет означать факт образования нового бара (и
завершение предыдущего). В эксперте newbar.mq4 алгоритм обнаружения нового бара
реализован в виде пользовательской функции:
//--------------------------------------------------------------------
// newbar.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
extern int Quant_Bars=15; // Количество баров
bool New_Bar=false; // Флаг нового бара
//--------------------------------------------------------------------
int start() // Спец. функция start
{
double Minimum, // Минимальная цена
Maximum; // Максимальная цена
//--------------------------------------------------------------------
Fun_New_Bar(); // Обращение к ф-ии
if (New_Bar==false) // Если бар не новый..
return; // ..то уходим
//--------------------------------------------------------------------
int Ind_max =ArrayMaximum(High,Quant_Bars,1);// Индекс бара макс.ц.
int Ind_min =ArrayMinimum(Low, Quant_Bars,1);// Индекс бара мин. ц.
Maximum=High[Ind_max]; // Искомая макс цена
Minimum=Low[Ind_min]; // Искомая мин. цена
Alert("За последние ",Quant_Bars, // Вывод на экран
" баров Min= ",Minimum," Max= ",Maximum);
return; // Выход из start()
}
//--------------------------------------------------------------------
void Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{