Организация пакетной обработки задачи по снятию изображений с экрана графика - страница 3

 
Aleksey Vyazmikin:

pp - ширина для скрина

Shift_Start - номер бара начала скриншота  по функции iBarShift умноженная на -1

Shift_Stop - номер бара окончания скриншота по функции iBarShift умноженная на -1


Принтанул вот эти переменные:

получил такую строчку

Смущает столь огромный номер первого бара - это от правой части (нулевого индекса) графика или как? Просто Вы пишите, что это номер видимого бара, и это не понятно...

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

int VisibleBars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);     // количество видимых баров на экране
 
Aleksey Vyazmikin:

Не торопитесь катапультироваться - куда лучше получить удовольствие от помощи другому, чем считать всех идиотами.

Вы такую конструкцию предлагаете, я правильно понял?

Я не понимаю эту сточку. 

pp=LeftPixelOfBar+RightPixelOfBar+GetBarSize(0)*((Shift_Start-Shift_Stop)*(-1)+2);

тогда уж

pp=(Shift_Start-Shift_Stop)*WidthBar;
 
Aleksey Vyazmikin:


Смущает столь огромный номер первого бара - это от правой части (нулевого индекса) графика или как? Просто Вы пишите, что это номер видимого бара, и это не понятно...

Печать FirstBar

int FirstBar=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);   // номер первого (левого) бара на экране

должно отрабатывать корректно. Это штатная функция не мной придуманная. Значит у вас столько много баров на графике, если конечно Вы то распечатали

 
Nikolai Semko:

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

Смущает больше первый показатель - как получается столь большое значение?

int FirstBar=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);   // номер первого (левого) бара на экране
Nikolai Semko:

Я не понимаю эту сточку. 

Мы знаем, что на экране умещается не полный левый бар и может быть не полный правый бар, поэтому нам надо сложить их ширину в пикселях отдельно и прибавить к размеру в пикселях целых баров, занимающих ширину экрана, в том числе два бара (а может и не два - тут я сам подтупляю) - для захвата баров включительно (левого и правого по датам).

Nikolai Semko:

тогда уж

Дык, я уже ранее неоднократно писал, что такой вариант не получается, если добавить ещё два бара, то примерно попадаем куда надо, но не на всех зумах!

 
Nikolai Semko:

Печать FirstBar

должно отрабатывать корректно. Это штатная функция не мной придуманная. Значит у вас столько много баров на графике, если конечно Вы то распечатали

Что распечатал - показал выше. У Вас какие примерно значения возвращает? Просто не пойму... ну не такой же огромный у меня монитор, может она возвращает число всех баров графика, в том числе невидимых в настоящий момент?

 
FirstBar - понял, это смещение относительно нулевого бара - все правильно...
 
Aleksey Vyazmikin:

Вот по предложенной Вами методе что выходит


Да я не давал Вам никакого метода. Где вы это видели?

Я только выбрал для вашей задачи идентификаторы из документации.

Все что было из моей головы это была эта формула:

int WidthBar=int(1<<ChartGetInteger(0,CHART_SCALE));

И то, как я потом уже увидел, тот же самый вариант давал Вам @fxsaber до меня вот здесь

 
Nikolai Semko:

Да я не давал Вам никакого метода. Где вы это видели?

Я только выбрал для вашей задачи идентификаторы из документации.

Все что было из моей головы это была эта формула:

И то, как я потом уже увидел, тот же самый вариант давал Вам @fxsaber до меня вот здесь

Увидел тут :

Возможно, что ошибся.

Да какая разница - это сути дела не меняет. Факт в том, что на разных зуммах разный результат - вот и хочется понять, как это универсально побороть!?

 

А какая последняя версия скрипта над которым работаете?

(возможно вносили правки с учетом замечаний)

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