Проверяет, если бар с индексом fb является нижним фракталом
Бар считается нижним фракталом, минимум бара является самым низким минимумом слева и справа на заданное кол. баров. А так же если слева минимумы баров последовательно понижаются, а справа - возрастают.
[code=php]
bool iFR.IsDwMode2(int fb = 1){
/*
>Ver : 0.0.3
>Date : 2013.01.18
>Hist :
@0.0.3@2013.01.18@artamir [+] Добавлен тип цены: Закрытие
@0.0.2@2013.01.11@artamir []
@0.0.1@2012.11.13@artamir []
>Author : Morochin Artiom
>Desc : check if bar with index fb is down fractal
*/
Возвращает номер бара ближайшего верхнего фрактала. Отсчет ведется от бара с индексом startBar
[code=php]
int iFR.getNearstUp(int startBar = 1){
/*
>Ver : 0.0.1
>Date : 2012.11.13
>Hist :
@0.0.1@2012.11.13@artamir []
>Author : Morochin Artiom
>Desc : return index of bar of nearst up fractal
Возвращает номер бара ближайшего верхнего фрактала.
*/
Возвращает номер бара ближайшего нижнего фрактала.
[code=php]
int iFR.getNearstDw(int startBar = 1){
/*
>Ver : 0.0.1
>Date : 2012.11.13
>Hist :
@0.0.1@2012.11.13@artamir []
>Author : Morochin Artiom
>Desc : return index of bar of nearst down fractal
Возвращает номер бара ближайшего нижнего фрактала.
*/
SetIndexBuffer(0,U);
SetIndexEmptyValue(0,0.0);
SetIndexBuffer(1,D);
SetIndexEmptyValue(1,0.0);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
iFR.Set(Left, Right, Mode, Price);
int ic=IndicatorCounted();
//----
int lim = Bars - ic + Right;
for(int i = lim; i >= 0; i--){
if(iFR.IsUp(i)){
U = iHigh(NULL, 0, i);
UV = iHigh(NULL, 0, i)+5*Point;
}
if(iFR.IsDw(i)){
D = iLow(NULL, 0, i);
DV = iLow(NULL, 0, i)-5*Point;
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
[/code]
18 строка - привязка заголовочного файла к коду индикатора.
69,75,87 - вызов функций, определенных в заголовочном файле.
69 - устанавливаем настройки расчета фрактала.
75 - Проверяем, если текущий бар является верхним фракталом согласно заданных настроек.
87 - Проверяем, если текущий бар является нижним фракталом согласно заданных настроек.
Редактировалось: 1 раз (Последний: 10 июля 2013 в 16:23)
Разбивает строку на подстроки разделителем. если разделителя нет, то в массиве возвращается строка.
[code=php]
int StringToArrayString(string &a[], string s, string del = ";"){
/**
\version 0.0.0.1
\date 2013.06.12
\author Morochin Artiom
\details Разбивает строку на подстроки разделителем. если разделителя нет, то в массиве возвращается строка.
\internal
>Hist:
@0.0.0.1@2013.06.12@artamir [] StringToArray
>Rev:0
*/
int pR = StringFind(s, del, 0);
int ROWS = ArrayRange(a,0);
int lastROW = ROWS-1;
if(pR > -1){
ROWS = ROWS + 1;
ArrayResize(a, ROWS);
Возвращает целочисленное значение по ключу из строки.
[code=php]
int Struc_KeyValue_int(string str, string key = "@p"){
/*
>Ver : 0.0.1
>Date : 2012.04.05
>History:
>Description:
return int value by key from format string
*/
Производит поиск ключа в заданной строке и возвращает значение, соответствующее заданному ключу.
[code=php]
string Struc_StringKeyValue(string str = "", string key = "@p", string defolt = "-1", string delimeter = "@"){
/*
>Ver : 0.0.2
>Date : 2012.04.04
>History:
>Description:
@str = incoming string of the form "@p123456@l5@w3@d1"; p,l,w,d - name of keys
@key = <@x>; where @-separator, x-name of key
on defolt return parent ticket
if key not found, return defolt value
*/
int lPosStart = -1; //start position of key name
int lPosEnd = -1; //end position of key name
string d = delimeter; //разделитель
//---
if(StringFind(key,d,0) == -1){
key = d + key;
}
//---
lPosStart = StringFind(str,key,0);
if(lPosStart == -1){
return(defolt);
}
//---
int lKeyLen = StringLen(key);
lPosEnd = StringFind(str,d,lPosStart+1); // find position of "@" in str after lPosStart
lPosStart = lPosStart + lKeyLen;
int len = iif(lPosEnd == -1, -1, lPosEnd - lPosStart);
//---
return(StringSubstr(str, lPosStart, len));
}
[/code]
Редактировалось: 1 раз (Последний: 11 июля 2013 в 15:20)
Пример использования.
Чуть забегая вперед приведу пример функции, возвращающей цену скользящей средней на заданном баре с настройками, которые хранятся в элементе строкового массива в формате:
"@p21@m1@ap0@syEURUSD@sh1";
где
@p - период средней,
@m - метод расчета средней
@ap - цена для расчета средней
@sy - инструмент (валютная пара) для расчета средней
@sh - сдвиг от начала графика для получения цены средней.
[code=php]
double iMA_getByHandle(int handle=0, int shift=-1, int d=0){
/**
\version 0.0.0.2
\date 2013.06.27
\author Morochin Artiom
\details Возвращает цену скользящей средней по заданному индексу в массиве настроек и индексу бара.
\internal
>Hist:
@0.0.0.2@2013.06.27@artamir [] iMA_getByHandle
@0.0.0.1@2013.05.20@artamir [] iMA_getByHandle
>Rev:0
*/
int p = Struc_KeyValue_int(aMASets[handle], "@p");
int mode = Struc_KeyValue_int(aMASets[handle], "@m");
int ap = Struc_KeyValue_int(aMASets[handle], "@ap");
string sy = Struc_KeyValue_string(aMASets[handle], "@sy");
int sh = shift;
if(sh<=-1){
sh = Struc_KeyValue_int(aMASets[handle], "@sh");
}
double ma = iMA(sy,0,p,0,mode,ap,sh);
ma = Norm_symb(ma, "", d);
return(ma);
}
[/code]
Пример использования
[code=php]
double pr = Norm_symb(Bid, "", 2);
[/code]
если эту конструкцию запустить на ЕвроДолларе с 4-мя знаками, то вернет текущую цену Bid + 2 знака после запятой. т.е. после запятой будет 6 знаков.
Удобно использовать для поиска пересечений средних.