Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1139

 
ascerdfg:
В каком месте надо нажать правую кнопку мыши?

Ctrl T что бы появилось меню внизу, Торговля, Активы, ..... , последнее Журнал. Щелкаем журнал и на одной из записей щелкаем правую кнопку мыши и там просмотр

 
Alexey Viktorov:

Возможно что цена и время для координат объекта оказались равны нулю. Проверить так: Нажать Ctrl+B, в появившемся диалоге нажать кнопку «Все» и посмотреть список существующих объектов. Если нужный есть, открыть свойства и посмотреть координаты.

в дебаге прогнал, все ок при создании всех объектов

 
ascerdfg:
В каком месте надо нажать правую кнопку мыши?

специально, ржевскому : мышь для тыкания в нужном месте

 
Maxim Kuznetsov:

специально, ржевскому : мышь для тыкания в нужном месте

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

 

Добрый день.

Есть ли возможность задать объекту свойство быть всегда выше остальных, в том числе вновь размещённых. Так, чтобы при наложении объектов друг на друга нужный объект никогда не перекрывался сверху?

Я поначалу подумал, что свойство OBJPROP_ZORDER может помочь, если для нужного объекта всегда задавать наибольшее значение. Но как выяснилось на практике, это только приоритет на отлов клика. Визуально объект не поднимается выше всех.

Так же на практике выяснил, что если объект нарисовать последним, то он точно будет визуально выше остальных. Так что либо какое-нибудь свойство, про которое я не знаю, либо перерисовывать объект, который не должен перекрываться сверху каждый раз, когда на графике меняется число объектов. Но при перерисовке столкнулся с проблемой - мерцание объекта который был удалён и нарисован снова. Есть ли способ перерисовать объект красиво, без мерцания, либо сделать его неперекрываемым сверху?


 
Oleg Remizov:

Добрый день.

Есть ли возможность задать объекту свойство быть всегда выше остальных, в том числе вновь размещённых. Так, чтобы при наложении объектов друг на друга нужный объект никогда не перекрывался сверху?

Я поначалу подумал, что свойство OBJPROP_ZORDER может помочь, если для нужного объекта всегда задавать наибольшее значение. Но как выяснилось на практике, это только приоритет на отлов клика. Визуально объект не поднимается выше всех.

Так же на практике выяснил, что если объект нарисовать последним, то он точно будет визуально выше остальных. Так что либо какое-нибудь свойство, про которое я не знаю, либо перерисовывать объект, который не должен перекрываться сверху каждый раз, когда на графике меняется число объектов. Но при перерисовке столкнулся с проблемой - мерцание объекта который был удалён и нарисован снова. Есть ли способ перерисовать объект красиво, без мерцания, либо сделать его неперекрываемым сверху?


Свойство OBJPROP_TIMEFRAMES:

OBJ_NO_PERIODS - невидимый на всех периодах,

OBJ_ALL_PERIODS - видимый на всех периодах

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
Oleg Remizov:

Добрый день.

Есть ли возможность задать объекту свойство быть всегда выше остальных, в том числе вновь размещённых. Так, чтобы при наложении объектов друг на друга нужный объект никогда не перекрывался сверху?

Я поначалу подумал, что свойство OBJPROP_ZORDER может помочь, если для нужного объекта всегда задавать наибольшее значение. Но как выяснилось на практике, это только приоритет на отлов клика. Визуально объект не поднимается выше всех.

Так же на практике выяснил, что если объект нарисовать последним, то он точно будет визуально выше остальных. Так что либо какое-нибудь свойство, про которое я не знаю, либо перерисовывать объект, который не должен перекрываться сверху каждый раз, когда на графике меняется число объектов. Но при перерисовке столкнулся с проблемой - мерцание объекта который был удалён и нарисован снова. Есть ли способ перерисовать объект красиво, без мерцания, либо сделать его неперекрываемым сверху?


Объекты отображаются согласно индексу:

string  ObjectName( 
   int    object_index   // номер в списке объектов
   );

из этого следует, что визуально на переднем плане будет объект с наибольшим индексом.

Я из этой ситуации выхожу следующим образом:

string pref="own"; //префикс в именах своих объектов
bool CheckOtherObj(string &arrObjOther[]){
   CheckOtherObjDelete(&arrObjOther);
   for(int i=ObjectsTotal(0,-1,-1)-1; i>=0; i--){
      string name=ObjectName(0,i,-1,-1);
      if(StringFind(name,pref)>=0)continue;
      bool add=true;
      for(int k=ArraySize(arrObjOther)-1; k>=0; k--){
         if(arrObjOther[k]==name){
            add=false;
            break;
         }
      }
      if(add){
         AddToArr(name,arrObjOther);
         return(true);
      }
   }
   return(false);
}
void CheckOtherObjDelete(string &arrObjOther[]){
   string arrdel[];
   ArrayFree(arrdel);
   for(int k=0; k<ArraySize(arrObjOther); k++){
      bool add=true;
      for(int i=0; i<ObjectsTotal(0,-1,-1); i++){
         string n=ObjectName(0,i,-1,-1);
         if(StringFind(n,pref)>=0)continue;
         if(n==arrObjOther[k]){
            add=false;
            break;  
         }
      }
      if(add) AddToArr(arrObjOther[k],arrdel);
   }
   if(ArraySize(arrdel)>0){
      string temp[];
      ArrayCopy(temp,arrObjOther);
      ArrayFree(arrObjOther);
      for(int i=0; i<ArraySize(temp); i++){
         bool add=true;
         for(int k=0; k<ArraySize(arrdel); k++){
            if(arrdel[k]==temp[i]){
               add=false;
               break;
            }
         }
         if(add)AddToArr(temp[i],arrObjOther);
      }
   }
}
void AddToArr(string value, string &arr[]){
   int s=ArraySize(arr);
   ArrayResize(arr,s+1);
   arr[s]=value;
}


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

Если нужно контролировать свои объекты, то тут проще. Просто нужно котролировать индексы объектов.

 
Maksym Mudrakov:
Объекты отображаются согласно индексу:

из этого следует, что визуально на переднем плане будет объект с наибольшим индексом.

Я из этой ситуации выхожу следующим образом:


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

Если нужно контролировать свои объекты, то тут проще. Просто нужно котролировать индексы объектов.

Я выше показал чем нужно делать. Зачем столько городить, если есть рекомендуемый разработчиками метод?

 
Здравствуйте. 

Хочу индикатор АТР перенести на график цен. Но никак не соображу как именно. Так что бы показывал максимальное движение в волатильности от средней линии того же периода. Если есть у кого код, спасибо Вам, если поделитесь .
 
Здравствуйте! Не знаю с чего начать, так как после месяца безрезультатных поисков в голове образавалась ужасная каша. Решил написать сообщение в этой ветке. Если я здесь не по адресу обращаюсь то прошу прощения. Может кто подскажет в какой ветке эту тему лучше поднимать? Ну а суть моего вопроса такова: каким образом лучше и проще всего организовать получение данных в МТ4 со стороннего сайта для дальнейшего отображения полученной информации на графике инструмента экспертом или индикатором или при помощи скрипта? На данный момент я пользуюсь собственным скриптом, который открывает файл Книга1.csv по адресу "каталог данных МТ4"\MQL4\Files. До того как запустить скрипт мне приходится запустить браузер Chrome, зайти на станицу ресурса, выбрать на этой странице инструмент, после выбрать тип отбражаемых данных для этого инструмента (при этом адрес страницы не изменяется), после отображения данных для этого инструмента в виде таблицы со значениями параметра на ограниченном диапазоне ценовых уровней я пользуясь расширением Table Capture для браузера Chrome копирую данные из таблицы находящейся на странице ресурса в буфер обмена, затем открываю Exel и вставляю в лист Exel данные из буфера обмена. Затем в Exel я преобразую числовые данные (заменяю запятые в числах на точки) и сохраняю файл в формате csv в каталог данных терминала. И уже после выполнения этого набора действий запускаю скрипт. Очевидно, что функция WebRequest для этой задачи не подходит т.к. по указанному адресу страницы данных вначале нет (они появляются после выбора инструмента и типа данных). Буду благодарен всем, кто подскажет правильное направление (очевидно этих направлений может быть несколько).
Причина обращения: