x - Un array di elementi di tipo doppio, in cui si cerca il valore minimo dell'elemento.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
La funzione ArrayAvGeom().
Questa funzione restituisce la media geometrica degli elementi della matrice.
x - Un array di elementi di tipo doppio.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
Questa funzione imposta l'oggetto linea orizzontale OBJ_HLINE sul grafico corrente.
cl - Colore dell'oggetto linea orizzontale OBJ_HLINE. Parametro richiesto.
nm - nome dell'oggetto. Se viene passato il valore predefinito "", il tempo aperto della barra corrente viene usato come nome dell'oggetto.
p1 - livello di prezzo dell'oggetto. Valore predefinito - 0 - prezzo di offerta corrente.
st - Stile di linea. I valori ammessi sono STYLE_SOLID (di default) - linea continua, STYLE_DASH - linea tratteggiata, STYLE_DOT - linea tratteggiata, STYLE_DASHDOT - linea tratteggiata, STYLE_DASHDOT - linea tratteggiata con doppi punti.
wd - Spessore della linea. Il valore predefinito è 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);
}
La funzione SetVLine().
Questa funzione imposta la linea verticale dell'oggetto OBJ_VLINE sul grafico corrente.
cl - Colore dell'oggetto LINEA VERTICALE. Parametro obbligatorio.
nm - nome dell'oggetto. Quando viene passato il valore di default - "", il tempo di apertura della barra corrente viene usato come nome dell'oggetto.
t1 - Tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo corrente di apertura della barra.
st - Stile di linea. I valori validi sono STYLE_SOLID (default), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
wd - Larghezza della linea. Il valore predefinito è 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);
}
Questa funzione imposta l'oggetto OBJ_TREND trendline sul grafico corrente.
cl - Colore dell'oggetto TREND LINE. È un parametro obbligatorio.
nm - Nome dell'oggetto. Quando viene passato il valore predefinito - "", il tempo di apertura della barra corrente viene usato come nome.
t1 - Prima coordinata del tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo di apertura della decima barra.
p1 - Prima coordinata dell'oggetto che fissa il prezzo. Valore predefinito - 0 - minimo della decima barra.
t2 - Seconda coordinata del tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo aperto della barra corrente.
p2 - Seconda coordinata dell'oggetto che fissa il prezzo. Valore predefinito - 0 - barra corrente bassa.
ry - Flag della proprietà BLUE. Il valore predefinito è False.
st - Stile di linea. I valori validi sono STYLE_SOLID (default), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
wd - Larghezza della linea. Il valore predefinito è 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);
}
Funzione SetTLineByAngle().
Questa funzione imposta l'oggetto OBJ_TRENDBYANGLE per l'angolo di pendenza nel grafico corrente.
nm - Nome dell'oggetto. Quando viene passato il valore predefinito - "", il tempo di apertura della barra corrente viene usato come nome.
t1 - Prima coordinata del tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo di apertura della decima barra.
p1 - Prima coordinata dell'oggetto che fissa il prezzo. Valore predefinito - 0 - minimo della decima barra.
t2 - Seconda coordinata del tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo aperto della barra corrente.
p2 - Seconda coordinata del prezzo di impostazione dell'oggetto. Questo parametro è una specie di interruttore. Il suo valore diverso da zero equipara questa funzione a SetTLine(), cioè una linea di tendenza sarà disegnata usando la coppia di coordinate tempo/prezzo, mentre il valore dell'angolo di pendenza della linea di tendenza sarà ignorato. Il valore predefinito è 0 - costruzione della linea di tendenza per angolo di pendenza.
an - Angolo di pendenza in gradi. Valore predefinito - 0 - Linea orizzontale.
ry - Flag della proprietà BOW. Il valore predefinito è False.
st - Stile di linea. I valori validi sono STYLE_SOLID (default), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
wd - Larghezza della linea. Il valore predefinito è 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);
}
Questa funzione imposta l'icona dell'oggetto OBJ_ARROW sul grafico corrente.
cd - codice dell'icona. Parametro richiesto.
cl - Colore dell'icona. Parametro richiesto.
nm - Nome dell'oggetto. Se il valore predefinito è trasferito - "" il tempo aperto della barra corrente è usato come nome.
t1 - Prima coordinata del tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo corrente di apertura della barra.
p1 - Prima coordinata dell'oggetto che fissa il prezzo. Valore predefinito - 0 - prezzo di offerta corrente.
sz - Dimensione dell'icona. Valore predefinito - 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);
}
Funzione SetLabel().
Questa funzione imposta l'oggetto etichetta di testo OBJ_LABEL nel grafico corrente.
nm - nome dell'oggetto. Parametro richiesto.
tx - Testo. Parametro richiesto.
cl - Colore del marcatore. Parametro richiesto.
xd - Coordinata X in pixel rispetto all'angolo di riferimento. Parametro richiesto.
yd - Coordinata Y in pixel relativa all'angolo di riferimento. Parametro obbligatorio.
cr - Numero dell'angolo di riferimento. Valori validi: 0 in alto a sinistra, 1 in alto a destra, 2 in basso a sinistra, 3 in basso a destra. Il valore predefinito è 0.
fs - Dimensione del carattere. Il valore predefinito è 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);
}
Questa funzione calcola le coordinate del punto di intersezione di due linee. Ogni linea è definita da una coppia di coordinate dei suoi punti. Tre array sono passati alla funzione come parametri:
x - Matrice di ascissa. Dovrebbe contenere quattro elementi: x[0], x[1] - l'ascissa della prima linea, x[2], x[3] - l'ascissa della seconda linea.
y - Matrice di ordinate. Dovrebbe contenere quattro elementi: y[0], y[1] - le ordinate della prima linea, y[0], y[1] - le ordinate della seconda linea.
t - Matrice di coordinate del punto di intersezione delle due linee. Dopo la normale esecuzione della funzione questa matrice conterrà due elementi: t[0] è l'ascissa del punto di intersezione delle due linee e t[1] è l'ordinata dello stesso punto.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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;
}
}
Funzione SetRegression().
Questa funzione imposta l'oggetto OBJ_REGRESSION del canale di regressione lineare sul grafico corrente.
cl - Colore dell'oggetto. Parametro richiesto.
nm - Nome dell'oggetto. Quando viene passato il valore predefinito - "", il tempo di apertura della barra corrente viene usato come nome.
t1 - Prima coordinata del tempo di impostazione dell'oggetto. Valore predefinito - 0 - tempo di apertura della decima barra.
t2 - Seconda coordinata del tempo di impostazione dell'oggetto. Il valore predefinito è 0 - il tempo aperto della barra corrente.
ry - Flag della proprietà BOW. Il valore predefinito è False.
st - Stile di linea. I valori validi sono STYLE_SOLID (default), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
wd - Larghezza della linea. Il valore predefinito è 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);
}
L'equazione di una linea retta. Questa funzione calcola il valore dell'ordinata Y per l'ascissa X all'intersezione con una linea disegnata attraverso due punti arbitrari del grafico. La funzione prende i seguenti parametri obbligatori:
x1, y1 - Coordinate del primo punto.
x2, y2 - Coordinate del secondo punto.
x - Valore, l'ascissa per cui l'ordinata Y deve essere calcolata.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
Funzione GetArrowInterval().
Ho scritto questa funzione per migliorare la comodità di sviluppare indicatori di segnale, cioè quegli indicatori che danno chiari segnali di acquisto o vendita. Il segnale di tale indicatore di solito faccio come una freccia verso il basso sopra il Khai di una barra o come una freccia verso l'altosotto il basso della barra corrispondente. Il valore di "sotto" e "sopra" era di solito qualche punto, in modo che la freccia non "corresse sopra" la barra. Non era un gran problema nel caso di un indicatore a timeframe singolo progettato solo per barre di un'ora, per esempio. Per ogni timeframe ho avuto diversi valori "sotto" e "sopra". Tuttavia, per gli indicatori multiframe ho dovuto usare la funzione 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);
}
Questa funzione cerca il frattale più vicino e restituisce il suo livello di prezzo. La funzione accetta i seguenti parametri opzionali:
sy - Nome dello strumento. "" o NULL - simbolo corrente. Il valore predefinito è NULL.
tf - Timeframe. Valore predefinito 0 - simbolo corrente.
modalità - Tipo di frattale. MODE_LOWER e MODE_UPPER sono ammessi. Il valore predefinito è 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);
}
Funzione GetExtremumZZBar().
Questa funzione cerca un estremo dell'indicatoreZigZag standard personalizzato e restituisce il numero della barra. La funzione accetta i seguenti parametri opzionali:
sy - Nome dello strumento. "" o NULL - il simbolo corrente. Il valore predefinito è NULL.
tf - Timeframe. Il valore predefinito è 0 - l'intervallo di tempo corrente.
ne - Numero estremo. 0 - ultimo, 1 - precedente, 2 - precedente, ecc.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
Questa funzione cerca un estremo dell'indicatoreZigZag standard personalizzato e restituisce il suo livello di prezzo. La funzione accetta i seguenti parametri opzionali:
sy - Nome dello strumento. "" o NULL - simbolo corrente. Il valore predefinito è NULL.
tf - Timeframe. Valore predefinito 0 - simbolo corrente.
ne - Numero estremo. 0 - ultimo, 1 - precedente, 2 - precedente, ecc.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
Questa funzione cerca il frattale inferiore più vicino e restituisce il suo livello di prezzo. La particolarità di questa funzione è la possibilità di impostare una formula arbitraria per il frattale. La formula frattale standard, generalmente accettata, è 2-2. Significa 2 barre a sinistra e 2 barre a destra. Con questa funzione, si possono eseguire anche frattali molto esotici, come 8-2 (8 barre a sinistra e 2 a destra) o 5-3 (5 barre a sinistra e 3 a destra) e così via. La funzione accetta i seguenti parametri opzionali:
sy - Nome dello strumento. "" o NULL - simbolo corrente. Il valore predefinito è NULL.
tf - Timeframe. Valore predefinito 0 - simbolo corrente.
nr - Numero di barre sulla destra. Valore predefinito - 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));
}
Funzione GetNearestUpFractal().
Questa funzione cerca il frattale più vicino verso l'alto e restituisce il suo livello di prezzo. La particolarità di questa funzione è la possibilità di impostare una formula arbitraria per il frattale. La formula frattale standard, generalmente accettata, è 2-2. Significa 2 barre a sinistra e 2 barre a destra. Con questa funzione, si possono eseguire anche frattali molto esotici, come 8-2 (8 barre a sinistra e 2 a destra) o 5-3 (5 barre a sinistra e 3 a destra) e così via. La funzione accetta i seguenti parametri opzionali:
sy - Nome dello strumento. "" o NULL - simbolo corrente. Il valore predefinito è NULL.
tf - Timeframe. Valore predefinito 0 - simbolo corrente.
nl - Numero di barre a sinistra. Il valore predefinito è 2.
nr - Numero di barre sulla destra. Valore predefinito - 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));
}
La funzione ArrayMin().
Questa funzione restituisce il valore dell'elemento minimo della matrice.
La funzione ArrayAvg().
Questa funzione restituisce la media aritmetica degli elementi della matrice.
La funzione ArrayAvGeom().
Questa funzione restituisce la media geometrica degli elementi della matrice.
La funzione SetHLine().
Questa funzione imposta l'oggetto linea orizzontale OBJ_HLINE sul grafico corrente.
La funzione SetVLine().
Questa funzione imposta la linea verticale dell'oggetto OBJ_VLINE sul grafico corrente.
La funzione SetTLine().
Questa funzione imposta l'oggetto OBJ_TREND trendline sul grafico corrente.
Funzione SetTLineByAngle().
Questa funzione imposta l'oggetto OBJ_TRENDBYANGLE per l'angolo di pendenza nel grafico corrente.
La funzione SetArrow().
Questa funzione imposta l'icona dell'oggetto OBJ_ARROW sul grafico corrente.
Funzione SetLabel().
Questa funzione imposta l'oggetto etichetta di testo OBJ_LABEL nel grafico corrente.
La funzione CrossPointOfLines().
Questa funzione calcola le coordinate del punto di intersezione di due linee. Ogni linea è definita da una coppia di coordinate dei suoi punti. Tre array sono passati alla funzione come parametri:
Funzione SetRegression().
Questa funzione imposta l'oggetto OBJ_REGRESSION del canale di regressione lineare sul grafico corrente.
La funzione EquationDirect().
L'equazione di una linea retta. Questa funzione calcola il valore dell'ordinata Y per l'ascissa X all'intersezione con una linea disegnata attraverso due punti arbitrari del grafico. La funzione prende i seguenti parametri obbligatori:
Funzione GetArrowInterval().
Ho scritto questa funzione per migliorare la comodità di sviluppare indicatori di segnale, cioè quegli indicatori che danno chiari segnali di acquisto o vendita. Il segnale di tale indicatore di solito faccio come una freccia verso il basso sopra il Khai di una barra o come una freccia verso l'alto sotto il basso della barra corrispondente. Il valore di "sotto" e "sopra" era di solito qualche punto, in modo che la freccia non "corresse sopra" la barra. Non era un gran problema nel caso di un indicatore a timeframe singolo progettato solo per barre di un'ora, per esempio. Per ogni timeframe ho avuto diversi valori "sotto" e "sopra". Tuttavia, per gli indicatori multiframe ho dovuto usare la funzione GetArrowInterval():
Funzione FindNearFractal().
Questa funzione cerca il frattale più vicino e restituisce il suo livello di prezzo. La funzione accetta i seguenti parametri opzionali:
Funzione GetExtremumZZBar().
Questa funzione cerca un estremo dell'indicatore ZigZag standard personalizzato e restituisce il numero della barra. La funzione accetta i seguenti parametri opzionali:
Funzione GetExtremumZZZPrice().
Questa funzione cerca un estremo dell'indicatore ZigZag standard personalizzato e restituisce il suo livello di prezzo. La funzione accetta i seguenti parametri opzionali:
Funzione GetNearestDownFractal().
Questa funzione cerca il frattale inferiore più vicino e restituisce il suo livello di prezzo. La particolarità di questa funzione è la possibilità di impostare una formula arbitraria per il frattale. La formula frattale standard, generalmente accettata, è 2-2. Significa 2 barre a sinistra e 2 barre a destra. Con questa funzione, si possono eseguire anche frattali molto esotici, come 8-2 (8 barre a sinistra e 2 a destra) o 5-3 (5 barre a sinistra e 3 a destra) e così via. La funzione accetta i seguenti parametri opzionali:
Funzione GetNearestUpFractal().
Questa funzione cerca il frattale più vicino verso l'alto e restituisce il suo livello di prezzo. La particolarità di questa funzione è la possibilità di impostare una formula arbitraria per il frattale. La formula frattale standard, generalmente accettata, è 2-2. Significa 2 barre a sinistra e 2 barre a destra. Con questa funzione, si possono eseguire anche frattali molto esotici, come 8-2 (8 barre a sinistra e 2 a destra) o 5-3 (5 barre a sinistra e 3 a destra) e così via. La funzione accetta i seguenti parametri opzionali: