Бывает ли, что терминал отрисует сразу несколько баров?

 

Допустим, что тайм фрейм M5. Последний отрисованный бар на графике на 35 минуте текущего часа. Когда пройдёт 10 минут без единого тика, то следующий отрисующийся бар будет с началом в 45 минуте, а бар с временем появления 40 минут не попадёт ни на график ни в массивы тайм серий. То есть сколько бы времени не было пропущено, со следующим тиком всегда появится только один новый бар.


Но меня не покидает сомнение, что всё таки есть случаи, когда может появиться сразу несколько баров, а советник это не увидит.


Как оно на самом деле?

 
vipermagi:

Допустим, что тайм фрейм M5. Последний отрисованный бар на графике на 35 минуте текущего часа. Когда пройдёт 10 минут без единого тика, то следующий отрисующийся бар будет с началом в 45 минуте, а бар с временем появления 40 минут не попадёт ни на график ни в массивы тайм серий. То есть сколько бы времени не было пропущено, со следующим тиком всегда появится только один новый бар.


Но меня не покидает сомнение, что всё таки есть случаи, когда может появиться сразу несколько баров, а советник это не увидит.


Как оно на самом деле?

пропуски баров - да есть на истории

баров с одинаковым временем не бывает - в журнале терминала будет ошибка об ошибке в истории по символу...

советник увидит если код написан правильно: при анализе появления нового бара используется сравнение по времени открытия бара №0 (или №1) с запомненным ранее временем

а вот в случае анализа количества баров на графике (в МТ4 ф-ция Bars()) - тут как раз ситуация которую Вы описываете - советник не увидит нового бара

в случае с индикатором еще проще, нужно анализировать: 

 if(prev_calculated==0) limit=rates_total-1; else limit=rates_total-prev_calculated+1;
   for(i=limit;i>=0;i--)
     {

если  prev_calculated==0 то была подгрузка истории, если не было подгрузки истории,  то индикатор посчитает все бары на которых не было расчета на предыдущем вызове

ЗЫ: для советника:

bool NewBar(){
   static datetime New_Time=0;             
   if(New_Time!=Time[0]){New_Time=Time[0];return(true);}
return(false);
}
 
Igor Makanu:

пропуски баров - да есть на истории

баров с одинаковым временем не бывает - в журнале терминала будет ошибка об ошибке в истории по символу...

советник увидит если код написан правильно: при анализе появления нового бара используется сравнение по времени открытия бара №0 (или №1) с запомненным ранее временем

а вот в случае анализа количества баров на графике (в МТ4 ф-ция Bars()) - тут как раз ситуация которую Вы описываете - советник не увидит нового бара

в случае с индикатором еще проще, нужно анализировать: 

если  prev_calculated==0 то была подгрузка истории, если не было подгрузки истории,  то индикатор посчитает все бары на которых не было расчета на предыдущем вызове

ЗЫ: для советника:

Не на истории. Вот свежие бары у меня на графике идут на пятиминутке.


Возьмём тайм фрейм M1, на нём ещё проще повстречать это. Например EURUSD в азиатскую сессию. Если за следующие 2 минуты после открытия текущего бара не было ни одного тика, то следующий бар не нарисуется, во-первых, а во-вторых если на истории так было, то и историю он такую же с пропущенными барами будет подгружать.


Но меня не волнует история. Я вопрос задаю про текущий нулевой бар и отрисовку прямо сейчас.


Есть два варианта, как это могло бы работать. Вариант 1: пропускать не отрисовывая на графике бар, если в его промежуток времени не было тиков; вариант 2: добавлять бары без тиков как плоские с нулевым объёмом.


Я в живую наблюдаю работу варианта 1.


Вопрос о том имеет ли место иная, чем вариант 1, работа терминала или это в принципе не возможно и существует только вариант 1?

 
vipermagi:

Не на истории. Вот свежие бары у меня на графике идут на пятиминутке.


Возьмём тайм фрейм M1, на нём ещё проще повстречать это. Например EURUSD в азиатскую сессию. Если за следующие 2 минуты после открытия текущего бара не было ни одного тика, то следующий бар не нарисуется, во-первых, а во-вторых если на истории так было, то и историю он такую же с пропущенными барами будет подгружать.


Но меня не волнует история. Я вопрос задаю про текущий нулевой бар и отрисовку прямо сейчас.


Есть два варианта, как это могло бы работать. Вариант 1: пропускать не отрисовывая на графике бар, если в его промежуток времени не было тиков; вариант 2: добавлять бары без тиков как плоские с нулевым объёмом.


Я в живую наблюдаю работу варианта 1.


Вопрос о том имеет ли место иная, чем вариант 1, работа терминала или это в принципе не возможно и существует только вариант 1?

я вроде все подробно расписал - писать то больше нечего....

1. да дыры в истории есть и будут, и даже онлайн будут - но не факт, что после подгрузки истории дыры онлайн не будут обновлены

2. проверьте историю своего брокера, на предмет тиковых объемов = 1 или 0, объемы 1 тик видел, 0 не видел никогда. Проверьте бары с Open=Close=High=Low в 1-2 пп разницей, тут кстати тоже должна быть ошибка в терминале если High=Low - хотя я возможно ошибаюсь, можно проверить создав оффлайновый график

Вы не умете программировать на MQL? - это все проверяется  в течении получаса

 
vipermagi:

Не на истории. Вот свежие бары у меня на графике идут на пятиминутке.


Возьмём тайм фрейм M1, на нём ещё проще повстречать это. Например EURUSD в азиатскую сессию. Если за следующие 2 минуты после открытия текущего бара не было ни одного тика, то следующий бар не нарисуется, во-первых, а во-вторых если на истории так было, то и историю он такую же с пропущенными барами будет подгружать.


Но меня не волнует история. Я вопрос задаю про текущий нулевой бар и отрисовку прямо сейчас.


Есть два варианта, как это могло бы работать. Вариант 1: пропускать не отрисовывая на графике бар, если в его промежуток времени не было тиков; вариант 2: добавлять бары без тиков как плоские с нулевым объёмом.


Я в живую наблюдаю работу варианта 1.


Вопрос о том имеет ли место иная, чем вариант 1, работа терминала или это в принципе не возможно и существует только вариант 1?

ага,

заведу речь про М1

получается что цены нет

но ведь это не правда

есть цена, есть бар,

должна быть как минимум горизонтальная полоса в течении одной минуты

 

Что бы бар на рисовался как минимум в течении времени формирования бара должен быть 1 тик. Тогда этот бар будет единичного тикового объема. Если тиков не было то по идее должно быть пусто. Например (минутный график): время последнего бара 15:10, потом две минуты тиков не было, потом пришел тик и время следующего бара будет 15:12. Но визуально на графике "дырки" не будет. Иначе после выходных в понедельник мы бы видели большую "дырку" с пятницы по конец воскресенья. Отсутствие связи с сервером я тут не рассматриваю. Так как после восстановления связи недостающая история будет подгружена терминалом.


 
Vitalii Ananev:

Что бы бар на рисовался как минимум в течении времени формирования бара должен быть 1 тик. Тогда этот бар будет единичного тикового объема. Если тиков не было то по идее должно быть пусто. Например (минутный график): время последнего бара 15:10, потом две минуты тиков не было, потом пришел тик и время следующего бара будет 15:12. Но визуально на графике "дырки" не будет. Иначе после выходных в понедельник мы бы видели большую "дырку" с пятницы по конец воскресенья. Отсутствие связи с сервером я тут не рассматриваю. Так как после восстановления связи недостающая история будет подгружена терминалом.


Вот. То есть это будет случай, когда оборвался интернет, из-за чего тики не приходили, а потом вдруг скопом нарисуется пачка новых баров.


Я просто это, вроде как, уже заранее учёл в алгоритме. Вроде.

Алгоритм делает копию данных с буфера индикатора.

Пока я понял только, что нельзя самому высчитывать время бара просто умножая период таймфрейма на количество баров, а не то на не тот бар попадёшь из-за таких естественных пропусков. Нужно только через iBarShit() и Time() функции.


Я правильно понял, что после востановления связи и подгрузки нескольких баров будет всего один тик? Или сама востановительная подгрузка происходит без тиков?

Т.е. вопрос в том, может быть советнику уже пора бы действовать, учитывая новые подгруженные бары, а он прожигает драгоценное время, потому, что с момента востановления связи тика не было.

 
vipermagi:

Вот. То есть это будет случай, когда оборвался интернет, из-за чего тики не приходили, а потом вдруг скопом нарисуется пачка новых баров.

Да, так оно и есть.

vipermagi:

Я правильно понял, что после востановления связи и подгрузки нескольких баров будет всего один тик? Или сама востановительная подгрузка происходит без тиков?

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

vipermagi:

Пока я понял только, что нельзя самому высчитывать время бара просто умножая период таймфрейма на количество баров, а не то на не тот бар попадёшь из-за таких естественных пропусков. Нужно только через iBarShit() и Time() функции.

iBarShit() в зависимости от значения переданного ему последнего параметра:

false -  если попадет на промежуток времени с пустой историей, вернет индекс ближайшего бара;

true -  если попадет на промежуток времени с пустой историей, вернет -1.

Почитайте справку по этой функции.

Причина обращения: