Форум » Синтаксис языка » Графические обьекты » Ответить

Графические обьекты

voldemar227: Интересует кусок кода который ресует квадрат в правой части экрана , по типу квадрата в афтографе 4. С помощью времени и цены. Цель держу создать квадратики при помещении в которые значка галочка включалась какая либо функция .... Помогите пожалуста как это сделать ....

Ответов - 2

Scriptong: voldemar227 пишет: Интересует кусок кода который ресует квадрат в правой части экрана , по типу квадрата в афтографе 4. С помощью времени и цены. Можно сделать так: // ---- Исходные данные int bars_count = 30; double height = 0.25; // ---- Вычисление координат прямоугольника double price_max = WindowPriceMax(); double price_min = WindowPriceMin(); double delta = price_max - price_min; double price1 = price_min + (1 - height)/2*delta; double price2 = price_max - (1 - height)/2*delta; datetime time1 = Time[0] + Period()*60; datetime time2 = time1 + Period()*60*bars_count; // ---- Отображение прямоугольника string name = "rectangle"; if (ObjectFind(name) < 0) { ObjectCreate(name, OBJ_RECTANGLE, 0, time1, price1, time2, price2); ObjectSet(name, OBJPROP_COLOR, Red); ObjectSet(name, OBJPROP_BACK, false); } В переменной bars_count указываете ширину прямоугольника в барах, в height - высоту прямоугольника в высоте текущего графика (max = 1, т.е. на весь экран). Далее получаем максимальную и минимальную цены графика, от которых рассчитываем цены верхней и нижней линий прямоугольника. Время левой и правой линий рассчитываем от времени открытия нулевого бара. Этот код создает статический графический объект, т.е. прямоугольник не будет оставаться на одном и том же месте графика при проведении изменений размера и масштаба графика. voldemar227 пишет: Цель держу создать квадратики при помещении в которые значка галочка включалась какая либо функция .... А здесь не понятно, что вы ходите сделать.

SK: voldemar227 пишет: Интересует кусок кода который ресует квадрат в правой части экрана , по типу квадрата в афтографе 4. С помощью времени и цены. Цель держу создать квадратики при помещении в которые значка галочка включалась какая либо функция .... Помогите пожалуста как это сделать .... Для такой цели лучше всё же не использовать объекты, в том числе, прямоугольник, позиционируемые в координатах цена-время. Иначе при любом изменении графика координаты всех этих объектов придётся пересчитывать и сами объекты перерисовывать. Это не простой и не эффективный путь. Лучше применить другой подход - использовать текстовую метку. Это - единственный объект, позиционируемый в MQL 4 в пикселях от выбранного угла графика. Для установки, анализа и управления объектом используйте обычные функции: http://docs.mql4.com/ru/objects/ObjectCreate http://docs.mql4.com/ru/constants/objects http://docs.mql4.com/ru/objects/ObjectSet http://docs.mql4.com/ru/objects/ObjectGet Управляющее воздействие удобно реализовать так, как это сделано в окне индикатора AG4 - значок внизу - означает одно, вверху - другое. Для отображения нужного текста в этом объекте используйте http://docs.mql4.com/ru/objects/ObjectSetText Есть одна особенность. Обычная прикладная программа запускается по тику. Это значит, что между тиками ничего происходить не будет даже в том случае, если объект сдвинут и в коде анализируются его координаты. В AG4 для снижения этих пауз используется зацикленный эксперт. В зацикленной программе есть свои особенности, например, необходимость правильно прервать цикл, например, в случае, если пользователь переключает таймфрейм. Общий порядок таков: эксперт постоянно опрашивает и обрабатывает координаты объекта OBJ_LABEL с целью выяснить: а не сдвинул ли с места пользователь этот объект (находящийся, например, внизу)? Если координаты не изменялись, то ничего не делать. Если же координаты изменились, то первое, что нужно сделать, это - удалить объект. Его не удастся удалить (практически, при исполнении ф-ии удаления объект удалён не будет), пока его тянет пользователь мышкой. В такой ситуации тоже ничего не делать. Но как только удалось удалить объект, значит пользователь дотащил объект до желаемого места и отпустил кнопку мыши. Теперь нужно: 1) восстановить объект в новых координатах (вверху) 2) запустить на исполнение требуемый алгоритм (интересующую Вас ф-ию) Предоставить Вам готовый кусок кода затруднительно, т.к. описанный здесь общий подход реализован в виде кода, размазанного по всей программе. Отдать Вам Весь исходный код коммерческого продукта, конечно. мы не можем. Но интересующие Вас фрагменты, построенные по указанному принципу используются и в AG1, исходный код которого открыто выложен здесь: http://autograf.dp.ua/Pages/4/411.htm Посмотрите также описание ф-ий граф. объектов в учебнике:http://book.mql4.com/ru/functions/objects PS ПисАть для Вас готовый код вряд ли кто возьмётся, но если Вы будете задавать конкретные вопросы по представленному Вами коду, то гарантированно получите консультацию.



полная версия страницы