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

 
kPVT
Спасибо за совет.
Поделитесь, пожалуйста, опытом. А именно:
1. Механизм генерации уникальных имён. Прямой перебор существующих имён автомнкрементом?
2. Механизм проверки аутентичности объекта. Т.е. не просто проверить, есть ли объект с таким именем, а всех его параметров, например, размеров, типов, текста и прочее. При учёте экономии ресурсов. Выполнять колоссальное количество проверок каждого свойства каждого объекта на каждом тике - весьма трудозатратно. Конечно, если бы было либо блокировка объекта от любых изменений извне (кроме советника-создателя), или расчёт хэша объекта, чтобы БЫСТРО (за один "if") проверить объект на аутентичность.
 

Прошу подтвердить воспроизведение ситуации с отсутствием перерисовки чарта.

Приложил простенький эксперт. Условия:

1. С 2013.01.07 по 2013.02.11. Скорее всего, не влияет.

2. Тестирование в визуальном режиме.

3. При первом прогоне замедляем скорость до минимуму:

 

 

4. На последующем прогоне после инициализации нажимаем Ф12 (сгенерировать один тик).

Ещё одно очень важное условие - терминал должен работать в режиме офф-лайн. Для чистоты эксперимента попробуйте отключить комп от сети (отключить все сетевые адаптеры).

 

Наблюдаем.

1. Запаздывание отоброажение значения спреда на графике.

 

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

Файлы:
1.mq5  4 kb
 
voix_kas:
kPVT
Спасибо за совет.
Поделитесь, пожалуйста, опытом. А именно:
1. Механизм генерации уникальных имён. Прямой перебор существующих имён автомнкрементом?
2. Механизм проверки аутентичности объекта. Т.е. не просто проверить, есть ли объект с таким именем, а всех его параметров, например, размеров, типов, текста и прочее. При учёте экономии ресурсов. Выполнять колоссальное количество проверок каждого свойства каждого объекта на каждом тике - весьма трудозатратно. Конечно, если бы было либо блокировка объекта от любых изменений извне (кроме советника-создателя), или расчёт хэша объекта, чтобы БЫСТРО (за один "if") проверить объект на аутентичность.

Не претендуя на истинность и оптимальность. 

1. Можно пользоваться стандартной библиотекой в ней для имени объекта используется рандомное число + имя, например:  18467RadioGroupItem0Button, 06334ClientBack. И самому не нужно удалять объекты. 

Я пока не особо подружился со стандартной библой и делаю так, проблем не было.

int nOBJ=0;//счетчик однотипных объектов
int OnInit()
  {
   //уникальное имя на основе текущего времени в момент инициализации (в 36 системе для краткости, пример: MI7E9G)
   basedName=ULongTo36Base(TimeLocal());
   leftName="LeftBorder "+basedName;//имя для единичного объекта
   ObjectCreate(0,leftName,OBJ_VLINE,0,time,0);
   for(nOBJ=1;nOBJ<=100;nOBJ++)//создание 100 однотипных объектов
    ObjectCreate(0,(string)nOBJ+basedName,OBJ_TREND,0,time,price);
   return(0);
  }
void OnDeinit(const int reason)
  {
   for(int del=1; del<=nOBJ; del++)
      ObjectDelete(0,(string)del+basedName);
   ObjectDelete(0,leftName);
   return;
  }

 Тут дискретность basedName будет 1 секунда. Если добавлять несколько одинаковых индикаторов из шаблона то будут коллизии, в этом случае можно к basedName прибавить параметры индикатора, или возможно милисекунды к TimeLocal(), рандомное число, что-то еще. В общем варианты есть.

 2. Аутентичность объекта - его уникальное имя. Два объекта даже разного типа с одинаковыми именами не могут быть в одном окне графика. Зачем проверять все свойства объекта? Поясните.

Хотите сделать проверку на ручное изменение свойств объекта? Есть событие CHARTEVENT_OBJECT_CHANGE. 

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


Если все таки охота использовать Comment для вывода форматированной информации, можно например задаться необходимой длиной строки и зная эту длину вставлять описание и значение параметра (определяя их длины) в нужные места.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
voix_kas:
kPVT
Спасибо за совет.
Поделитесь, пожалуйста, опытом. А именно:
1. Механизм генерации уникальных имён. Прямой перебор существующих имён автомнкрементом?
2. Механизм проверки аутентичности объекта. Т.е. не просто проверить, есть ли объект с таким именем, а всех его параметров, например, размеров, типов, текста и прочее. При учёте экономии ресурсов. Выполнять колоссальное количество проверок каждого свойства каждого объекта на каждом тике - весьма трудозатратно. Конечно, если бы было либо блокировка объекта от любых изменений извне (кроме советника-создателя), или расчёт хэша объекта, чтобы БЫСТРО (за один "if") проверить объект на аутентичность.
Может вот это поможет: Взгляни на рынок через готовые классы
 

kPVT

Спасибо за совет. Попробую через CHARTEVENT_OBJECT_CHANGE контролить.

Dima_S

Спасибо. Но в применении стандартных классов не вижу необходимости. 

 

Очень прошу, протестируйте, пожалуйста, функцию ChartRedraw с помощью готового простенького советника в моём предыдущем сообщении. К сожалению, почему-то он эта функция даёт опоздание на один тик. Т.е. в пример показывает, что значение спреда показывается за предыдущий тик, хотя обработка и вывод происходит на текущем.

 
voix_kas:

kPVT

Спасибо за совет. Попробую через CHARTEVENT_OBJECT_CHANGE контролить.

Dima_S

Спасибо. Но в применении стандартных классов не вижу необходимости. 

 

Очень прошу, протестируйте, пожалуйста, функцию ChartRedraw с помощью готового простенького советника в моём предыдущем сообщении. К сожалению, почему-то он эта функция даёт опоздание на один тик. Т.е. в пример показывает, что значение спреда показывается за предыдущий тик, хотя обработка и вывод происходит на текущем.

Да не за что. Если бы Вы прочитали статью, то нашли бы ответы на поставленные два вопроса))
 

Из Маркета невозможно скачивать и устанавливать программы больших размеров. Будьте внимательны. Причина неизвестна.

Возможно, установлены какие-либо ограничения. Официально информации о них нет.

 

Подскажите, пожалуйста: 

1. Индикатор, вызываемый из ресурсов, не может получать input параметры?
2. Если нет, то есть возможность и как это обойти (с костылями)?
 

Может.Все тоже самое,как и iCustom().

handle=iCustom(_Symbol,_Period,"::Indicators\\Examples\\ZigZag.EX5",12,5,3);
 
Karlson:

Может.Все тоже самое,как и iCustom().

Точно, может. Допустил ошибку в коде.

Спасибо.