Time: 2014-02-09 | Download file:b-Graphics.mqh
//+----------------------------------------------------------------------------+ //| b-Graphics.mqh | //| | //| Ким Игорь В. aka KimIV | //| http://www.kimiv.ru | //| | //| 12.10.2007 Библиотека функций для работы с графическими объектами. | //+----------------------------------------------------------------------------+ #property library // CrossPointOfLines Вычисляет координаты точки пересечения двух прямых // EquationDirect Уравнение прямой // GetArrowInterval Возвращает интервал установки сигнальных указателей // SetArrow Установка значка на графике, объект OBJ_ARROW // SetHLine Установка объекта OBJ_HLINE горизонтальная линия // SetLabel Установка текстовой метки // SetRegression Установка объекта OBJ_REGRESSION канал линейной регрессии // SetTLine Установка объекта OBJ_TREND трендовая линия // SetTLineByAngle Установка объекта OBJ_TRENDBYANGLE трендовая линия по углу // SetVLine Установка объекта OBJ_VLINE вертикальная линия //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Вычисляет координаты точки пересечения двух прямых. | //| Каждая прямая задаётся парой координат своих точек. | //+----------------------------------------------------------------------------+ //| Параметры: | //| x - массив абсцисс x[0], x[1] - первая прямая | //| x[2], x[3] - вторая прямая | //| y - массив ординат y[0], y[1] - первая прямая | //| y[0], y[1] - вторая прямая | //| t - массив искомых координат t[0] - абсцисса | //| t[1] - ордината | //+----------------------------------------------------------------------------+ void CrossPointOfLines(double& x[], double& y[], double& t[]) { double z=(y[3]-y[2])*(x[1]-x[0])-(y[1]-y[0])*(x[3]-x[2]); ArrayResize(t, 2); ArrayInitialize(t, 0.0); if (z==0) Print("CrossPointOfLines(): Не удалось найти точку пересечения!"); else { double xy1=x[1]*y[0]-x[0]*y[1]; double xy2=x[3]*y[2]-x[2]*y[3]; t[0]=NormalizeDouble((xy1*(x[3]-x[2])-xy2*(x[1]-x[0]))/z, 0); t[1]=(xy1*(y[3]-y[2])-xy2*(y[1]-y[0]))/z; } } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Уравнение прямой. | //| Вычисляет значение Y для X в точке пересечения с прямой. | //+----------------------------------------------------------------------------+ //| Параметры: | //| x1,y1 - координаты первой точки, | //| x2,y2 - координаты второй точки, | //| x - значение, для которого вычислить Y | //+----------------------------------------------------------------------------+ double EquationDirect(double x1, double y1, double x2, double y2, double x) { if (x2==x1) return(y1); return((y2-y1)/(x2-x1)*(x-x1)+y1); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 23.10.2007 | //| Описание : Возвращает интервал установки сигнальных указателей | //+----------------------------------------------------------------------------+ //| Параметры: | //| pr - процент относительно ценового размера окна | //+----------------------------------------------------------------------------+ int GetArrowInterval(int pr=5) { if (pr<=0) pr=5; return((WindowPriceMax()-WindowPriceMin())/100*pr/Point); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Установка значка на графике, объект OBJ_ARROW. | //+----------------------------------------------------------------------------+ //| Параметры: | //| cd - код значка | //| cl - цвет значка | //| nm - наименование ("" - время открытия текущего бара) | //| t1 - время открытия бара (0 - текущий бар) | //| p1 - ценовой уровень (0 - Bid) | //| sz - размер значка (0 - по умолчанию) | //+----------------------------------------------------------------------------+ void SetArrow(int cd, color cl, string nm="", datetime t1=0, double p1=0, int sz=0) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (t1<=0) t1=Time[0]; if (p1<=0) p1=Bid; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_ARROW, 0, 0,0); ObjectSet(nm, OBJPROP_TIME1 , t1); ObjectSet(nm, OBJPROP_PRICE1 , p1); ObjectSet(nm, OBJPROP_ARROWCODE, cd); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_WIDTH , sz); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 30.03.2008 | //| Описание : Установка объекта OBJ_HLINE горизонтальная линия | //+----------------------------------------------------------------------------+ //| Параметры: | //| cl - цвет линии | //| nm - наименование ("" - время открытия текущего бара) | //| p1 - ценовой уровень (0 - Bid) | //| st - стиль линии (0 - простая линия) | //| wd - ширина линии (1 - по умолчанию) | //+----------------------------------------------------------------------------+ void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (p1<=0) p1=Bid; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0); ObjectSet(nm, OBJPROP_PRICE1, p1); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_STYLE , st); ObjectSet(nm, OBJPROP_WIDTH , wd); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Установка текстовой метки, объект OBJ_LABEL. | //+----------------------------------------------------------------------------+ //| Параметры: | //| nm - наименование объекта | //| tx - текст | //| cl - цвет метки | //| xd - координата X в пикселах | //| yd - координата Y в пикселах | //| cr - номер угла привязки (0 - левый верхний ) | //| 1 - правый верхний | //| 2 - левый нижний | //| 3 - правый нижний ) | //| fs - размер шрифта (9 - по умолчанию ) | //+----------------------------------------------------------------------------+ void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) { if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0); ObjectSetText(nm, tx, fs); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_XDISTANCE, xd); ObjectSet(nm, OBJPROP_YDISTANCE, yd); ObjectSet(nm, OBJPROP_CORNER , cr); ObjectSet(nm, OBJPROP_FONTSIZE , fs); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Установка объекта OBJ_REGRESSION канал линейной регрессии. | //+----------------------------------------------------------------------------+ //| Параметры: | //| cl - цвет линии | //| nm - наименование ( "" - время открытия текущего бара) | //| t1 - время открытия бара ( 0 - Time[10]) | //| t2 - время открытия бара ( 0 - Time[0]) | //| ry - луч (False - по умолчанию) | //| st - стиль линии ( 0 - простая линия) | //| wd - ширина линии ( 1 - по умолчанию) | //+----------------------------------------------------------------------------+ void SetRegression(color cl, string nm="", datetime t1=0, datetime t2=0, bool ry=False, int st=0, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (t1<=0) t1=Time[10]; if (t2<=0) t2=Time[0]; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_REGRESSION, 0, 0,0, 0,0); ObjectSet(nm, OBJPROP_TIME1, t1); ObjectSet(nm, OBJPROP_TIME2, t2); ObjectSet(nm, OBJPROP_COLOR, cl); ObjectSet(nm, OBJPROP_RAY , ry); ObjectSet(nm, OBJPROP_STYLE, st); ObjectSet(nm, OBJPROP_WIDTH, wd); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Установка объекта OBJ_TREND трендовая линия | //+----------------------------------------------------------------------------+ //| Параметры: | //| cl - цвет линии | //| nm - наименование ( "" - время открытия текущего бара) | //| t1 - время открытия бара ( 0 - Time[10] | //| p1 - ценовой уровень ( 0 - Low[10]) | //| t2 - время открытия бара ( 0 - текущий бар) | //| p2 - ценовой уровень ( 0 - Bid) | //| ry - луч (False - не луч) | //| st - стиль линии ( 0 - простая линия) | //| wd - ширина линии ( 1 - по умолчанию) | //+----------------------------------------------------------------------------+ void SetTLine(color cl, string nm="", datetime t1=0, double p1=0, datetime t2=0, double p2=0, bool ry=False, int st=0, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (t1<=0) t1=Time[10]; if (p1<=0) p1=Low[10]; if (t2<=0) t2=Time[0]; if (p2<=0) p2=Bid; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0); ObjectSet(nm, OBJPROP_TIME1 , t1); ObjectSet(nm, OBJPROP_PRICE1, p1); ObjectSet(nm, OBJPROP_TIME2 , t2); ObjectSet(nm, OBJPROP_PRICE2, p2); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_RAY , ry); ObjectSet(nm, OBJPROP_STYLE , st); ObjectSet(nm, OBJPROP_WIDTH , wd); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //| Описание : Установка объекта OBJ_TRENDBYANGLE трендовая линия по углу | //+----------------------------------------------------------------------------+ //| Параметры: | //| cl - цвет линии | //| nm - наименование ( "" - время открытия текущего бара) | //| t1 - время открытия бара ( 0 - Time[10] | //| p1 - ценовой уровень ( 0 - Low[10]) | //| t2 - время открытия бара ( 0 - текущий бар) | //| p2 - ценовой уровень ( 0 - по углу) | //| an - угол ( 0 - по умолчанию) | //| ry - луч (False - не луч) | //| st - стиль линии ( 0 - простая линия) | //| wd - ширина линии ( 1 - по умолчанию) | //+----------------------------------------------------------------------------+ void SetTLineByAngle(color cl, string nm="", datetime t1=0, double p1=0, datetime t2=0, double p2=0, double an=0, bool ry=False, int st=0, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (t1<=0) t1=Time[0]; if (p1<=0) p1=Bid; if (t2<=0) t2=Time[0]; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TRENDBYANGLE, 0, 0,0); ObjectSet(nm, OBJPROP_TIME1 , t1); ObjectSet(nm, OBJPROP_PRICE1, p1); ObjectSet(nm, OBJPROP_TIME2 , t2); if (p2>0) ObjectSet(nm, OBJPROP_PRICE2, p2); else ObjectSet(nm, OBJPROP_ANGLE, an); ObjectSet(nm, OBJPROP_COLOR, cl); ObjectSet(nm, OBJPROP_RAY , ry); ObjectSet(nm, OBJPROP_STYLE, st); ObjectSet(nm, OBJPROP_WIDTH, wd); } //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 02.07.2008 | //| Описание : Установка объекта OBJ_VLINE вертикальная линия | //+----------------------------------------------------------------------------+ //| Параметры: | //| cl - цвет линии | //| nm - наименование ("" - время открытия текущего бара) | //| t1 - время (0 - время открытия текущего бара) | //| st - стиль линии (0 - простая линия) | //| wd - ширина линии (1 - по умолчанию) | //+----------------------------------------------------------------------------+ void SetVLine(color cl, string nm="", datetime t1=0, int st=0, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (t1<=0) t1=Time[0]; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_VLINE, 0, 0,0); ObjectSet(nm, OBJPROP_TIME1, t1); ObjectSet(nm, OBJPROP_COLOR, cl); ObjectSet(nm, OBJPROP_STYLE, st); ObjectSet(nm, OBJPROP_WIDTH, wd); } //+----------------------------------------------------------------------------+