Ошибки, баги, вопросы - страница 310

 

Чем отличается ?

CHART_WIDTH_IN_BARS Ширина графика в барах
от
CHART_VISIBLE_BARS Количество баров на графике, доступных для отображения
 
Urain:

Чем отличается ?

Справа может быть пустое поле, если задан отступ. В этом случае CHART_VISIBLE_BARS покажет меньшее значение, чем CHART_WIDTH_IN_BARS
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков - Документация по MQL5
 
Urain:

Чем отличается ?

буквально отличается


 
Rosh:
В чем состоит вопрос?

1. Берем скрипт, перекрученный к посту и выполняем на графике. Скрипт должен скопировать определенное количество баров и выполнить распринтовку по 20ь самым древним.

Используется  этот вариант (я понимаю что там нет проверок и всяких ловушек для ошибок, но все же)

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   int              start_pos,         // откуда начнем 
   int              count,             // сколько копируем
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

Так вот при тех параметрах что я указал (количество баров и M1) скрипт выполняется, но иногда НОРМАЛЬНО работать отказывается. Это происходит при определенном количестве баров (у меня получалось больше 368700).

При 368800 он возвращает гораздо меньше баров (но постоянно разное число - 368732 / 368735 / 368736 или что-то в этой окрестности).

Но и при 360000 он работает не всегда корректно, бывали случая когда тупо копировалось только 10000 баров.

2. Вариант где две даты указываются и вовсе меня потряс. мало что он не захотел принимать 0 как первую дату (что на мой взгляд логично) он еще и максимум 10000 копирует.

Хотя с 0 как int в качаестве start_time это пронятно (опыт есть), все дело в перегрузки функций и "непонимание" компилятором определенных вещей. Но вот почему 10000 баров это вопрос отдельный, что называется "на миллион".

10000 минутных баров как мы понимаем не выйдут за пределы 2011 года, если я все правильно понял они за пределы февраля не выйдут (а как становится ясно из всего вышесказанного как минимум 360000 загружено точно).

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   datetime         stop_time,         // по какую дату
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

PS

При этом скорость работы нормального прохода и "глючного" (когда скрипт копирует только 10000 баров) различается в разы.

PPS

Довидите плиз определенные разделы справки (верней примеры к ним) до логического конца, чтобы не было двусмысленности и прочих "глупых" ситуаций.

Проверки желательно поставить дополнительно и т.д. Еще в данном случае отсутствуют перекрестные ссылки в описании параметров (как минимум в timeframe) и не понятно какой же тип у start_time и start_pos. Я так понимаю что datetime (иначе зачем компилятору материться на 0 в качестве start_time)

//Код по третьему варианту, может я что-то упустил?
//Так ругается - 'CopyRates' - ambiguous call to overloaded function
Copied = CopyRates(Symbol(),PERIOD_M1,0,TimeCurrent(),Rates);
//Так нет, но копирует только 10000 баров
Copied = CopyRates(Symbol(),PERIOD_M1,(datetime)0,TimeCurrent(),Rates);
 

Взгляните это баг или моя косорукость?

void OnStart()
  {
//---
   long chart_id=ChartID();
   ChartSetInteger(chart_id,CHART_AUTOSCROLL,false);   // отключаем автоскролл
   while(!IsStopped())
     {
      //------------------      
      ChartNavigate(chart_id,CHART_END,-2410); // делаем навигацию, поставим константу
      //------------------
      Sleep(500);
      ChartSetString(chart_id,CHART_COMMENT,ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR));
      ChartRedraw(chart_id);// отображаем первый бар чарта после навигации
      Sleep(500);
     }        
  }


При навигации чарта от нуль бара происходит подёргивание чарта. Я специально между навигацией и обновлением вставил слипы чтоб ярче выделить проблему. Но баг существует и без слипов. Получается что ChartNavigate() сначало перемещает график на ноль а потом его двигает назад. Плюс к этому она это делает не каждый раз.

ЗЫ по краней мере, то что баг существует не каждый раз при вызове ChartNavigate(), создаётся впечатление при запуске без слипов.

Документация по MQL5: Операции с графиками / ChartNavigate
Документация по MQL5: Операции с графиками / ChartNavigate
  • www.mql5.com
Операции с графиками / ChartNavigate - Документация по MQL5
 
Urain:

Взгляните это баг или моя косорукость?


При навигации чарта от нуль бара происходит подёргивание чарта. Я специально между навигацией и обновлением вставил слипы чтоб ярче выделить проблему. Но баг существует и без слипов. Получается что ChartNavigate() сначало перемещает график на ноль а потом его двигает назад. Плюс к этому она это делает не каждый раз.

ЗЫ по краней мере, то что баг существует не каждый раз при вызове ChartNavigate(), создаётся впечатление при запуске без слипов.


Попробуйте пример из ветки ChartNavigate function doesn’t work, Please help
 
Rosh:
Попробуйте пример из ветки ChartNavigate function doesn’t work, Please help

Посмотрел, и что? что есть такое в этом примере что так принципиально отличается от моего кода?

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

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

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

 
Если сразу непонятно, то поясню : выше приведённый код есть попытка эмулировать автоскрол на заданном баре.
 
Interesting:
А история все подгужена?
конечно история есть, но не у всех черваков есть история спрэда!
 
Urain:

Посмотрел, и что? что есть такое в этом примере что так принципиально отличается от моего кода?

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

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

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

У мя таж ерунда с моим индюком, только он перерисовывается как только тик приходит и не понятно как исправить?
Причина обращения: