АвторСообщение





Пост N: 4
Зарегистрирован: 19.11.10
ссылка на сообщение  Отправлено: 27.10.11 18:37. Заголовок: Графические обьекты


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

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]


постоянный участник


Пост N: 214
Зарегистрирован: 03.09.09
ссылка на сообщение  Отправлено: 27.10.11 22:44. Заголовок: voldemar227 пишет: ..


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 пишет:

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


А здесь не понятно, что вы ходите сделать.

Спасибо: 0 
ПрофильЦитата Ответить
Автор




Пост N: 911
Зарегистрирован: 21.05.06
Откуда: Украина, Днепропетровск
ссылка на сообщение  Отправлено: 27.10.11 22:45. Заголовок: Для такой цели лучше..


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 ПисАть для Вас готовый код вряд ли кто возьмётся, но если Вы будете задавать конкретные вопросы по представленному Вами коду, то гарантированно получите консультацию.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 11
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет