ChartXYToTimePrice расчёт времени - страница 2

 
comp:
Ширина каждого бара (в пикселях) является степенью двойки. Разве между ними есть промежутки?

Откуда дровишки?

Посмотрите на картинку графика. Даже если это японские свечи, а не бары в виде полосок, то между свечами есть некий промежуток. А японская свеча так вообще рисуется относительно своих теней вправо и влево

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

 
Slawa:

Откуда дровишки?

int GetBarWidth()
{  
  return(ChartGetInteger(0, CHART_WIDTH_IN_PIXELS) / ChartGetInteger(0, CHART_WIDTH_IN_BARS));
}
Замерьте расстояние между центрами свечей и убедитесь. Но это и очевидно, т.к. увеличение масштаба всегда идет, как степень двойки. Поэтому и расстояний между барами нет. Как только один закончился, следующий пиксель принадлежит уже другому. А то, что нарисовано - не важно. Главное - расстояние между центрами.
 

Отвлекистесь от программирования и просто взгляните на график.

По поводу ширины бара в пикселах. Что показывать, если график - бары? ширину 1 или 2 пиксела? А если график - японские свечи? Ширину нарисованной свечи? А если график по ценам закрытия?

Просто посмотрите на график и попробуйте вручную построить трендовые линии с примагничиванием крайних точек. Обратите при этом внимание на свойство "точная шкала времени" в меню Сервис - Настройки - Графики

 
comp:
Замерьте расстояние между центрами свечей и убедитесь. Но это и очевидно, т.к. увеличение масштаба всегда идет, как степень двойки. Поэтому и расстояний между барами нет. Как только один закончился, следующий пиксель принадлежит уже другому. А то, что нарисовано - не важно. Главное - расстояние между центрами.

Вы мне предлагаете замерить расстояние между центрами свечей и убедиться? Я и без Вас знаю, что это 0, 1, 2, 4, 8, 16, 32.

Вы сказали слово "центр свечи". Значит Вы допускаете, что свеча рисуется влево и вправо от центра. Но если влево, то она попадает в предыдущую свечу?

В общем, спор окончен.

 
Slawa:

Вы сказали слово "центр свечи". Значит Вы допускаете, что свеча рисуется влево и вправо от центра. Но если влево, то она попадает в предыдущую свечу?

Нет! Любой пиксель принадлежит интервалу какого-то бара. Если пиксель принадлежит времени 16:19:37, то он принадлежит бару 16:19, а не 16:20.

Вроде, очевидно. Но Вы уперлись по какой-то причине. 

 
comp:

Нет! Любой пиксель принадлежит интервалу какого-то бара. Если пиксель принадлежит времени 16:19:37, то он принадлежит бару 16:19, а не 16:20.

Вроде, очевидно. Но Вы уперлись по какой-то причине. 

Каждый вновь приходящий восклицает: "это же очевидно!"

Вы сказали слово "центр свечи"? Да или нет? Если Вы допускаете понятие "центр свечи", то допускаете, что свеча простирается от "некое значение левее центра свечи" до "то же самое значение правее центра свечи минус один пиксель"

 
Slawa:

Каждый вновь приходящий восклицает: "это же очевидно!"

Вы сказали слово "центр свечи"? Да или нет?

Да!

Если Вы допускаете понятие "центр свечи", то допускаете, что свеча простирается от "некое значение левее центра свечи" до "то же самое значение правее центра свечи минус один пиксель"

Нет!

Я говорил про расстояние между центрами соседних свечей. И отлично понимаю, что если бар является степенью двойки, то центр в математическом понимании придется между пикселами.

Вот на картинке то, что предложил замерить

 

На данной картинке расстояние 32 пиксела. И на каждый бар выделяется по ширине ровно 32 пиксела, даже если бар нарисован более узко. Раз вся сетка разделена ровно на промежутки по 32 пиксела, то и каждый пиксел принадлежит одному из промежутков, а значит принадлежит одному из баров. И если пиксел принадлежит времени 16:19:37, то и он принадлежит тем 32-м пикселам, которые закреплены за баром 16:19. 

 
Спор окончен
 
Slawa:
Спор окончен

Конструктив

#property strict

// Запускать на M1
void OnStart( void )
{
  const datetime time = Time[0] - 1; // отняли всего одну секунду, по аналогии "16:19:37"
  
  MessageBox("Время " + (string)time + " принадлежит бару " + (string)Time[iBarShift(Symbol(), Period(), time)]);
  
  return;
}

 Результат

 

 

iBarShift говорит одно, CTRL+D - другое. Это различие и бросилось в глаза.

 
comp:


Изучите, пожалуйста и используйте как "Отче наш":

Зоны влияния баров 

Дальнейшая дискуссия будет пресекаться.