x - Массив элементов типа double, в котором выполняется поиск минимального по значению элемента.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 17.05.2008 |//| Описание : Возвращает значение минимального элемента массива. |//+----------------------------------------------------------------------------+//| Параметры: |//| x - массив значений числового ряда |//+----------------------------------------------------------------------------+double ArrayMin(double& x[]) {
if (ArraySize(x)>0) return(x[ArrayMinimum(x)]);
else {
Print("ArrayMin(): Массив пуст!");
return(0);
}
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.10.2006 |//| Описание : Возвращает номер бара экстремума ЗигЗага по его номеру. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//| ne - номер экстремума ( 0 - последний) |//| dp - ExtDepth |//| dv - ExtDeviation |//| bs - ExtBackstep |//+----------------------------------------------------------------------------+int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
if (sy=="" || sy=="0") sy=Symbol();
double zz;
int i, k=iBars(sy, tf), ke=0;
for (i=0; i<k; i++) {
zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
if (zz!=0) {
ke++;
if (ke>ne) return(i);
}
}
Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
return(-1);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 16.05.2008 |//| Описание : Возвращает среднее аримфетическое элементов массива. |//+----------------------------------------------------------------------------+//| Параметры: |//| x - массив значений числового ряда |//+----------------------------------------------------------------------------+double ArrayAvg(double& x[]) {
double s=0;
int i, k=ArraySize(x);
for (i=0; i<k; i++) s+=x[i];
if (k>0) s/=k; elsePrint("ArrayAvg(): Массив пуст!");
return(s);
}
Функция ArrayAvGeom().
Эта функция возвращает среднее геометрическое элементов массива.
x - Массив элементов типа double.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 16.06.2008 |//| Описание : Возвращает среднее геометрическое элементов массива. |//+----------------------------------------------------------------------------+//| Параметры: |//| x - массив значений числового ряда |//+----------------------------------------------------------------------------+double ArrayAvGeom(double& x[]) {
double s=1, k=ArraySize(x);
int i;
for (i=0; i<k; i++) s*=x[i];
if (k>0) s=MathPow(s, 1/k); elsePrint("ArrayAvGeom(): Массив пуст!");
return(s);
}
Эта функция выполняет установку объекта OBJ_HLINE горизонтальная линия на текущем графике.
cl - Цвет объекта OBJ_HLINE горизонтальная линия. Обязательный параметр.
nm - Наименование объекта. При передаче умолчательного значения "" в качестве имени используется время открытия текущего бара.
p1 - Ценовой уровень установки объекта. Значение по умолчанию - 0 - текущая цена Bid.
st - Стиль линии. Допустимые значения STYLE_SOLID (по умолчанию) - сплошная линия, STYLE_DASH - штриховая линия, STYLE_DOT - пунктирная линия, STYLE_DASHDOT - штрих-пунктирная линия, STYLE_DASHDOTDOT - штрих-пунктирная линия с двойными точками.
wd - Толщина линии. Значение по умолчанию - 0.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 30.03.2008 |//| Описание : Установка объекта OBJ_HLINE горизонтальная линия |//+----------------------------------------------------------------------------+//| Параметры: |//| cl - цвет линии |//| nm - наименование ("" - время открытия текущего бара) |//| p1 - ценовой уровень (0 - Bid) |//| st - стиль линии (0 - простая линия) |//| wd - ширина линии (0 - по умолчанию) |//+----------------------------------------------------------------------------+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);
}
Функция SetVLine().
Эта функция выполняет установку объекта OBJ_VLINE вертикальная линия на текущем графике.
cl - Цвет объекта ВЕРТИКАЛЬНАЯ ЛИНИЯ. Обязательный параметр.
nm - Наименование объекта. При передаче умолчательного значения - "" в качестве имени используется время открытия текущего бара.
t1 - Время установки объекта. Значение по умолчанию - 0 - время открытия текущего бара.
st - Стиль линии. Допустимые значения STYLE_SOLID (по умолчанию), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT, STYLE_DASHDOTDOT.
wd - Толщина линии. Значение по умолчанию - 1.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
Эта функция выполняет установку объекта OBJ_TREND трендовая линия на текущем графике.
cl - Цвет объекта ТРЕНДОВАЯ ЛИНИЯ. Обязательный параметр.
nm - Наименование объекта. При передаче умолчательного значения - "" в качестве имени используется время открытия текущего бара.
t1 - Первая координата времени установки объекта. Значение по умолчанию - 0 - время открытия десятого бара.
p1 - Первая координата цены установки объекта. Значение по умолчанию - 0 - минимум десятого бара.
t2 - Вторая координата времени установки объекта. Значение по умолчанию - 0 - время открытия текущего бара.
p2 - Вторая координата цены установки объекта. Значение по умолчанию - 0 - минимум текущего бара.
ry - Флаг свойства ЛУЧ. Значение по умолчанию False.
st - Стиль линии. Допустимые значения STYLE_SOLID (по умолчанию), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT, STYLE_DASHDOTDOT.
wd - Толщина линии. Значение по умолчанию - 1.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
Функция SetTLineByAngle().
Эта функция выполняет установку объекта OBJ_TRENDBYANGLE трендовая линия по углу наклона на текущем графике.
cl - Цвет объекта ТРЕНДОВАЯ ЛИНИЯ. Обязательный параметр.
nm - Наименование объекта. При передаче умолчательного значения - "" в качестве имени используется время открытия текущего бара.
t1 - Первая координата времени установки объекта. Значение по умолчанию - 0 - время открытия десятого бара.
p1 - Первая координата цены установки объекта. Значение по умолчанию - 0 - минимум десятого бара.
t2 - Вторая координата времени установки объекта. Значение по умолчанию - 0 - время открытия текущего бара.
p2 - Вторая координата цены установки объекта. Этот параметр является своего рода переключателем. Его ненулевое значение приравняет данную функции к функции SetTLine(), то есть трендовая линия будет построена по паре координат время/цена, а значение угла наклона трендовой будет проигнорировано. Значение по умолчанию - 0 - построение трендовой линии по углу наклона.
an - Угол наклона в градусах. Значение по умолчанию - 0 - горизонтальная линия.
ry - Флаг свойства ЛУЧ. Значение по умолчанию False.
st - Стиль линии. Допустимые значения STYLE_SOLID (по умолчанию), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT, STYLE_DASHDOTDOT.
wd - Толщина линии. Значение по умолчанию - 1.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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[10];
if (p1<=0) p1=Low[10];
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);
}
Эта функция выполняет установку объекта OBJ_ARROW значок текущем графике.
cd - Код значка. Обязательный параметр.
cl - Цвет значка. Обязательный параметр.
nm - Наименование объекта. При передаче умолчательного значения - "" в качестве имени используется время открытия текущего бара.
t1 - Первая координата времени установки объекта. Значение по умолчанию - 0 - время открытия текущего бара.
p1 - Первая координата цены установки объекта. Значение по умолчанию - 0 - текущая цена Bid.
sz - Размер значка. Значение по умолчанию - 0.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
Функция SetLabel().
Эта функция выполняет установку объекта OBJ_LABEL текстовая метка на текущем графике.
nm - Наименование объекта. Обязательный параметр.
tx - Текст. Обязательный параметр.
cl - Цвет метки. Обязательный параметр.
xd - Координата X в пикселах относительно угла привязки. Обязательный параметр.
yd - Координата Y в пикселах относительно угла привязки. Обязательный параметр.
cr - Номер угла привязки. Допустимые значения: 0-левый верхний угол, 1-правый верхний, 2-левый нижний, 3-правый нижний. Значение по умолчанию - 0.
fs - Размер шрифта. Значение по умолчанию - 9.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
Эта функция вычисляет координаты точки пересечения двух прямых. Каждая прямая задаётся парой координат своих точек. В функцию в качестве параметров передаются три массива:
x - Массив абсцисс. Должен содержать четыре элемента: x[0], x[1] - абсциссы первой прямой, x[2], x[3] - абсциссы второй прямой.
y - Массив ординат. Должен содержать четыре элемента: y[0], y[1] - ординаты первой прямой, y[0], y[1] - ординаты второй прямой.
t - Массив координат искомой точки пересечения двух прямых. После нормального исполнения функции данный массив будет содержать два элемента: t[0] - абсцисса искомой точки пересечения двух прямых и t[1] - ордината этой же точки.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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;
}
}
Функция SetRegression().
Эта функция выполняет установку объекта OBJ_REGRESSION канал линейной регрессии на текущем графике.
cl - Цвет объекта. Обязательный параметр.
nm - Наименование объекта. При передаче умолчательного значения - "" в качестве имени используется время открытия текущего бара.
t1 - Первая координата времени установки объекта. Значение по умолчанию - 0 - время открытия десятого бара.
t2 - Вторая координата времени установки объекта. Значение по умолчанию - 0 - время открытия текущего бара.
ry - Флаг свойства ЛУЧ. Значение по умолчанию False.
st - Стиль линии. Допустимые значения STYLE_SOLID (по умолчанию), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT, STYLE_DASHDOTDOT.
wd - Толщина линии. Значение по умолчанию - 1.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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=STYLE_SOLID, 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);
}
Уравнение прямой. Эта функция вычисляет значение ординаты Y для абсциссы X в точке пересечения с прямой, проведённой через две произвольные точки на графике. Функция принимает следующие обязательные параметры:
x1, y1 - Координаты первой точки.
x2, y2 - Координаты второй точки.
x - Значение, абсцисса для которой нужно вычислить ординату Y.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
Функция GetArrowInterval().
Эту функцию я написал для повышения удобства разработки сигнальных индикаторов, то есть тех индикаторов, которые дают на выходе чёткий сигнал купить или продать. Сигнал такого индикатора я обычно делаю в виде стрелки вниз над хаем соответствующего бара или в виде стрелки вверхпод лоу соответствующего бара. В качестве величины "под" и "над" обычно бралось несколько пунктов, чтобы стрелка не "наезжала" на бар. Проблем особых не было в случае однотаймфреймового индикатора, предназначенного, например, только для часовок. Для каждого таймфрейма у меня были свои значения "под" и "над". А вот для мультифреймовых индикаторов приходилось пользоваться услугами функции GetArrowInterval():
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.10.2007 |//+----------------------------------------------------------------------------+//| Описание : Возвращает интервал установки сигнальных указателей |//| Параметры: |//| pr - процент относительно ценового размера окна |//+----------------------------------------------------------------------------+int GetArrowInterval(int pr=7) {
if (pr<=0) pr=7;
return((WindowPriceMax()-WindowPriceMin())/100*pr/Point);
}
Эта функция выполняет поиск ближайшего фрактала и возвращает его ценовой уровень. Функция принимает следующие необязательные параметры:
sy - Наименование инструмента. "" или NULL - текущий символ. Значение по умолчанию NULL.
tf - Таймфрейм. Значение по умолчанию 0 - текущий символ.
mode - Тип фрактала. Допустимые значения MODE_LOWER и MODE_UPPER. Значение по умолчанию MODE_LOWER.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.10.2006 |//| Описание : Поиск ближайшего фрактала. Возвращает ценовой уровень. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//| mode - тип фрактала (MODE_LOWER|MODE_UPPER) |//+----------------------------------------------------------------------------+double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
if (sy=="" || sy=="0") sy=Symbol();
double f=0;
int d=MarketInfo(sy, MODE_DIGITS), s;
if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
for (s=2; s<100; s++) {
f=iFractals(sy, tf, mode, s);
if (f!=0) return(NormalizeDouble(f, d));
}
Print("FindNearFractal(): Фрактал не найден");
return(0);
}
Функция GetExtremumZZBar().
Эта функция выполняет поиск экстремума стандартного пользовательского индикатораZigZag и возвращает номер бара. Функция принимает следующие необязательные параметры:
sy - Наименование инструмента. "" или NULL - текущий символ. Значение по умолчанию NULL.
tf - Таймфрейм. Значение по умолчанию 0 - текущий таймфрейм.
ne - Номер экстремума. 0 - последний, 1 - предыдущий, 2 - предпредыдущий и т.д.
dp, dv, bs - Параметры ZigZaga: ExtDepth, ExtDeviation, ExtBackstep соответственно.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.10.2006 |//| Описание : Возвращает номер бара экстремума ЗигЗага по его номеру. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//| ne - номер экстремума ( 0 - последний) |//| dp - ExtDepth |//| dv - ExtDeviation |//| bs - ExtBackstep |//+----------------------------------------------------------------------------+int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
if (sy=="" || sy=="0") sy=Symbol();
double zz;
int i, k=iBars(sy, tf), ke=0;
for (i=0; i<k; i++) {
zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
if (zz!=0) {
ke++;
if (ke>ne) return(i);
}
}
Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
return(-1);
}
Эта функция выполняет поиск экстремума стандартного пользовательского индикатораZigZag и возвращает его ценовой уровень. Функция принимает следующие необязательные параметры:
sy - Наименование инструмента. "" или NULL - текущий символ. Значение по умолчанию NULL.
tf - Таймфрейм. Значение по умолчанию 0 - текущий символ.
ne - Номер экстремума. 0 - последний, 1 - предыдущий, 2 - предпредыдущий и т.д.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.10.2006 |//| Описание : Возвращает экстремум ЗигЗага по его номеру. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//| ne - номер экстремума ( 0 - последний) |//| dp - ExtDepth |//| dv - ExtDeviation |//| bs - ExtBackstep |//+----------------------------------------------------------------------------+double GetExtremumZZPrice(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bs=3) {
if (sy=="" || sy=="0") sy=Symbol();
double zz;
int i, k=iBars(sy, tf), ke=0;
for (i=1; i<k; i++) {
zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, i);
if (zz!=0) {
ke++;
if (ke>ne) return(zz);
}
}
Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
return(0);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.08.2008 |//| Описание : Возвращает номер бара фрактала по его номеру. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий ТФ) |//| nf - номер фрактала ( 0 - последний) |//+----------------------------------------------------------------------------+int GetFractalBar(string sy="0", int tf=0, int nf=0) {
if (sy=="" || sy=="0") sy=Symbol();
double f=0;
int i, k=iBars(sy, tf), kf;
for (i=2; i<k; i++) {
f=iFractals(sy, tf, MODE_LOWER, i);
if (f!=0) {
kf++;
if (kf>nf) return(i);
}
f=iFractals(sy, tf, MODE_UPPER, i);
if (f!=0) {
kf++;
if (kf>nf) return(i);
}
}
Print("GetFractalBar(): Фрактал не найден");
return(-1);
}
Эта функция выполняет поиск ближайшего нижнего фрактала и возвращает его ценовой уровень. Особенностью данной функции является возможность установки произвольной формулы фрактала. Стандартная, общепринятая формула фрактала выглядит таким образом 2-2. Что означает 2 бара слева и 2 бара справа. А с помощью данной функции можно задавать даже очень экзотические фракталы, типа 8-2 (8 баров слева и 2 бара справа), 5-3 (5 баров слева и 3 бара справа) и т.д. Функция принимает следующие необязательные параметры:
sy - Наименование инструмента. "" или NULL - текущий символ. Значение по умолчанию NULL.
tf - Таймфрейм. Значение по умолчанию 0 - текущий символ.
nr - Количество баров справа. Значение по умолчанию - 2.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.10.2006 |//| Описание : Возвращает ценовой уровень ближайшего нижнего фрактала |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| nl - количество баров слева |//| nr - количество баров справа |//+----------------------------------------------------------------------------+double GetNearestDownFractal(string sy="0", int tf=0, int nl=2, int nr=2) {
bool f;
int fb, i, nb=-1;
if (sy=="" || sy=="0") sy=Symbol();
if (nl<1) nl=1;
if (nr<1) nr=1;
fb=nr;
while (nb<0) {
fb++;
f=True;
for (i=fb; i>fb-nr; i--) {
if (iLow(sy, tf, i)>iLow(sy, tf, i-1)) { f=False; break; }
}
if (f) {
for (i=fb; i<fb+nl; i++) {
if (iLow(sy, tf, i)>iLow(sy, tf, i+1)) { f=False; break; }
}
if (f) { nb=fb; break; }
}
}
return(iLow(sy, tf, nb));
}
Функция GetNearestUpFractal().
Эта функция выполняет поиск ближайшего верхнего фрактала и возвращает его ценовой уровень. Особенностью данной функции является возможность установки произвольной формулы фрактала. Стандартная, общепринятая формула фрактала выглядит таким образом 2-2. Что означает 2 бара слева и 2 бара справа. А с помощью данной функции можно задавать даже очень экзотические фракталы, типа 8-2 (8 баров слева и 2 бара справа), 5-3 (5 баров слева и 3 бара справа) и т.д. Функция принимает следующие необязательные параметры:
sy - Наименование инструмента. "" или NULL - текущий символ. Значение по умолчанию NULL.
tf - Таймфрейм. Значение по умолчанию 0 - текущий символ.
nl - Количество баров слева. Значение по умолчанию - 2.
nr - Количество баров справа. Значение по умолчанию - 2.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.10.2006 |//| Описание : Возвращает ближайший верхний фрактал |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| nl - количество баров слева |//| nr - количество баров справа |//+----------------------------------------------------------------------------+double GetNearestUpFractal(string sy="0", int tf=0, int nl=2, int nr=2) {
bool f;
int fb, i, nb=-1;
if (sy=="" || sy=="0") sy=Symbol();
if (nl<1) nl=1;
if (nr<1) nr=1;
fb=nr;
while (nb<0) {
fb++;
f=True;
for (i=fb; i>fb-nr; i--) {
if (iHigh(sy, tf, i)<iHigh(sy, tf, i-1)) { f=False; break; }
}
if (f) {
for (i=fb; i<fb+nl; i++) {
if (iHigh(sy, tf, i)<iHigh(sy, tf, i+1)) { f=False; break; }
}
if (f) { nb=fb; break; }
}
}
return(iHigh(sy, tf, nb));
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Функция ArrayMin().
Эта функция возвращает значение минимального элемента массива.
Функция ArrayAvg().
Эта функция возвращает среднее аримфетическое элементов массива.
Функция ArrayAvGeom().
Эта функция возвращает среднее геометрическое элементов массива.
Функция SetHLine().
Эта функция выполняет установку объекта OBJ_HLINE горизонтальная линия на текущем графике.
Функция SetVLine().
Эта функция выполняет установку объекта OBJ_VLINE вертикальная линия на текущем графике.
Функция SetTLine().
Эта функция выполняет установку объекта OBJ_TREND трендовая линия на текущем графике.
Функция SetTLineByAngle().
Эта функция выполняет установку объекта OBJ_TRENDBYANGLE трендовая линия по углу наклона на текущем графике.
Функция SetArrow().
Эта функция выполняет установку объекта OBJ_ARROW значок текущем графике.
Функция SetLabel().
Эта функция выполняет установку объекта OBJ_LABEL текстовая метка на текущем графике.
Функция CrossPointOfLines().
Эта функция вычисляет координаты точки пересечения двух прямых. Каждая прямая задаётся парой координат своих точек. В функцию в качестве параметров передаются три массива:
Функция SetRegression().
Эта функция выполняет установку объекта OBJ_REGRESSION канал линейной регрессии на текущем графике.
Функция EquationDirect().
Уравнение прямой. Эта функция вычисляет значение ординаты Y для абсциссы X в точке пересечения с прямой, проведённой через две произвольные точки на графике. Функция принимает следующие обязательные параметры:
Функция GetArrowInterval().
Эту функцию я написал для повышения удобства разработки сигнальных индикаторов, то есть тех индикаторов, которые дают на выходе чёткий сигнал купить или продать. Сигнал такого индикатора я обычно делаю в виде стрелки вниз над хаем соответствующего бара или в виде стрелки вверх под лоу соответствующего бара. В качестве величины "под" и "над" обычно бралось несколько пунктов, чтобы стрелка не "наезжала" на бар. Проблем особых не было в случае однотаймфреймового индикатора, предназначенного, например, только для часовок. Для каждого таймфрейма у меня были свои значения "под" и "над". А вот для мультифреймовых индикаторов приходилось пользоваться услугами функции GetArrowInterval():
Функция FindNearFractal().
Эта функция выполняет поиск ближайшего фрактала и возвращает его ценовой уровень. Функция принимает следующие необязательные параметры:
Функция GetExtremumZZBar().
Эта функция выполняет поиск экстремума стандартного пользовательского индикатора ZigZag и возвращает номер бара. Функция принимает следующие необязательные параметры:
Функция GetExtremumZZPrice().
Эта функция выполняет поиск экстремума стандартного пользовательского индикатора ZigZag и возвращает его ценовой уровень. Функция принимает следующие необязательные параметры:
Функция GetNearestDownFractal().
Эта функция выполняет поиск ближайшего нижнего фрактала и возвращает его ценовой уровень. Особенностью данной функции является возможность установки произвольной формулы фрактала. Стандартная, общепринятая формула фрактала выглядит таким образом 2-2. Что означает 2 бара слева и 2 бара справа. А с помощью данной функции можно задавать даже очень экзотические фракталы, типа 8-2 (8 баров слева и 2 бара справа), 5-3 (5 баров слева и 3 бара справа) и т.д. Функция принимает следующие необязательные параметры:
Функция GetNearestUpFractal().
Эта функция выполняет поиск ближайшего верхнего фрактала и возвращает его ценовой уровень. Особенностью данной функции является возможность установки произвольной формулы фрактала. Стандартная, общепринятая формула фрактала выглядит таким образом 2-2. Что означает 2 бара слева и 2 бара справа. А с помощью данной функции можно задавать даже очень экзотические фракталы, типа 8-2 (8 баров слева и 2 бара справа), 5-3 (5 баров слева и 3 бара справа) и т.д. Функция принимает следующие необязательные параметры: