Перемещение прямоульника

 

Здравствуйте Уважаемые программисты!

Имею задачу перемещать прямоугольник на графике вместе с появлением очередного бара соответственно.

Написал следующий код.

#property indicator_chart_window
int start()
  {
   string obj_name="Rectangle";
   long current_chart_id=ChartID();
//---
//--- 
          datetime time1  = Time[10];
          double   price1 = 1277;
      
      ObjectMove(current_chart_id,obj_name,0,time1,price1);
  
   return(0);
  }


Не могу заставить программу работать так как нужно. Все перепробовал, все перечитал. Без подсказки профессионалов не получается.

Проблема в следующем:

1.  Двигается только одна вертикальная сторона прямоугольника, а другая стоит на месте - в результате прямоугольник просто расширяется.

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

Объектом  пытаюсь манипулировать на графике с золотом, по этому имею такие данные по привязке цены double   price1 = 1277;

Прошу объяснить, направить, дать ссылку, совет, помочь кто чем может.

Всем заранее спасибо.

С уважением,

Александр

 
5211845:

Здравствуйте Уважаемые программисты!

Имею задачу перемещать прямоугольник на графике вместе с появлением очередного бара соответственно.

Написал следующий код.


Не могу заставить программу работать так как нужно. Все перепробовал, все перечитал. Без подсказки профессионалов не получается.

Проблема в следующем:

1.  Двигается только одна вертикальная сторона прямоугольника, а другая стоит на месте - в результате прямоугольник просто расширяется.

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

Объектом  пытаюсь манипулировать на графике с золотом, по этому имею такие данные по привязке цены double   price1 = 1277;

Прошу объяснить, направить, дать ссылку, совет, помочь кто чем может.

Всем заранее спасибо.

С уважением,

Александр


1. Код, пожалуйста, вставляйте правильно.

2. Неизвестная переменная - массив Time[10]. Массив предварительно нужно объявлять и заполнять. Только после этого можно обращаться к массиву.

3. price1 - возможно, что такой и цены - то нет. Слишком космическая цена.

4. Точно на графике есть объект - прямоугольник с именем "Rectangle"?

 
Vladimir Karputov:

1. Код, пожалуйста, вставляйте правильно.

2. Неизвестная переменная - массив Time[10]. Массив предварительно нужно объявлять и заполнять. Только после этого можно обращаться к массиву.

3. price1 - возможно, что такой и цены - то нет. Слишком космическая цена.

4. Точно на графике есть объект - прямоугольник с именем "Rectangle"?

1. Если бы в коде были ошибки, то компилятор об этом заявил бы.

2. Этот код я взял из примеров в документации, просто подставил свой  объект.

3. А, цена космическая так как это золото, это я указал в сообщении.

4. На графике есть объект таким именем. На эти грабли я уже наступал. К тому же я написал что прямоугольник на графике управляется программой,только не так полноценно как хотелось бы.

 
5211845:

1. Если бы в коде были ошибки, то компилятор об этом заявил бы.

2. Этот код я взял из примеров в документации, просто подставил свой  объект.

3. А, цена космическая так как это золото, это я указал в сообщении.

4. На графике есть объект таким именем. На эти грабли я уже наступал. К тому же я написал что прямоугольник на графике управляется программой,только не так полноценно как хотелось бы.

Объект имеет две точки привязок. Почему перемещаете только одну, или думаете что вторую переместят духи?

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
//| Cоздает прямоугольник по заданным координатам                    |               time1=0,                            price1=0,                         time2=0,                            price2=0,                        width=1,            //| Перемещает точку привязки прямоугольника                         |...
 
Vitaly Muzichenko:

Объект имеет две точки привязок. Почему перемещаете только одну, или думаете что вторую переместят духи?

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

Куда мне вписать вторую точку привязки скажите пожалуйста.

Я пытался сделать вот так вот:

ObjectMove(current_chart_id,obj_name,0,time1,price1,time2,price2);

Но, на такую строчку мой компилятор ругается. говорит последние два слова лишние.

Я так понял,  что где то что то недопонимаю.

 
при создании прямоугольника я задал все точки привязки, и соответственно получил желаемый результат. А вот как вписать вторую точку привязки для перемещения не могу понять.
 
5211845:

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

Куда мне вписать вторую точку привязки скажите пожалуйста.

Я пытался сделать вот так вот:

Но, на такую строчку мой компилятор ругается. говорит последние два слова лишние.

Я так понял,  что где то что то недопонимаю.


Читали про ObjectMove? Ведь в ней все есть для перемещения каждой точки объекта. Угадывать ничего не требуется, только прочитать документацию. Подсказка: параметр №3.

 
5211845:

1. Если бы в коде были ошибки, то компилятор об этом заявил бы.

2. Этот код я взял из примеров в документации, просто подставил свой  объект.

3. А, цена космическая так как это золото, это я указал в сообщении.

4. На графике есть объект таким именем. На эти грабли я уже наступал. К тому же я написал что прямоугольник на графике управляется программой,только не так полноценно как хотелось бы.


Вы написали в основном разделе MQL5 форума - поэтому и ответ получен для MQL5. Если у Вас вопросы по старому терминалу, пожалуйста используйте специальную ветку для старого терминала: MQL4 и MetaTrader 4.

Перенес тему.
 
Ihor Herasko:

Читали про ObjectMove? Ведь в ней все есть для перемещения каждой точки объекта. Угадывать ничего не требуется, только прочитать документацию. Подсказка: параметр №3.

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

мне пришлось двигать каждую сторону прямоугольника отдельной функцией ObjectMove

вот такой код:

datetime time1  = Time[0];
          double   price1 = 1277;
          datetime time2  = Time[50];
          double   price2 = 1275;
         
      ObjectMove(current_chart_id,obj_name,0,time1,price1);
      ObjectMove(current_chart_id,obj_name,1,time2,price2);


Может это  можно выполнить как то одной строкой?

Теперь осталось переместить ту сторону прямоугольника которая ориентированна на бар 0  Time[0]; на несколько свечей правее. Пытался написать Time[-10]; но как то не адекватно мой объект отреагировал

Тут подскажите тоже пожалуйста.

 
Vladimir Karputov:

Вы написали в основном разделе MQL5 форума - поэтому и ответ получен для MQL5. Если у Вас вопросы по старому терминалу, пожалуйста используйте специальную ветку для старого терминала: MQL4 и MetaTrader 4.

Перенес тему.

За счет этого согласен. Я не зал что форумы отличаются.

 
5211845:

Может это  можно выполнить как то одной строкой?

Можно, если написать функцию типа MoveRectangle.

Теперь осталось переместить ту сторону прямоугольника которая ориентированна на бар 0  Time[0]; на несколько свечей правее. Пытался написать Time[-10]; но как то не адекватно мой объект отреагировал

Тут подскажите тоже пожалуйста.

Нужно рассчитать время, которое соответствует nBarCount бару, находящемуся правее текущего бара:

Time[0] + PeriodSeconds() * nBarCount