Эту функцию я написал после того, как обнаружил, что иногда я могу запросто во входных параметрах индикатора или советника указать неправильный таймфрейм, который равен целому количеству минут. Например, я ввёл 50 для часовок вместо 60. Ну... типа промахнулся. Так вот оказывается, функция iRSI() для неправильного таймфрейма возвращает ноль. Про другие функции ничего не скажу, ибо не проверял. И чтобы избежать досадных недоразумений из-за своих же ошибок по невнимательности, я написал эту функцию, как элементарную защиту от "дурака". Она выполняет подгонку входного параметра под "ближайший" подходящий правильный таймфрейм и возвращает его значение.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 02.03.2008 |//| Описание : Корректирует таймфрейм под ближайший поддерживаемый МТ4. |//+----------------------------------------------------------------------------+//| Параметры: |//| TimeFrame - таймфрейм (количество секунд) (0 - текущий ТФ) |//+----------------------------------------------------------------------------+intCorrectTF(intTimeFrame=0){if(TimeFrame==0)TimeFrame=Period();
if(TimeFrame< PERIOD_M5)return(PERIOD_M1);
if(TimeFrame>=PERIOD_M5 && TimeFrame<PERIOD_M15)return(PERIOD_M5);
if(TimeFrame>=PERIOD_M15 && TimeFrame<PERIOD_M30)return(PERIOD_M15);
if(TimeFrame>=PERIOD_M30 && TimeFrame<PERIOD_H1)return(PERIOD_M30);
if(TimeFrame>=PERIOD_H1 && TimeFrame<PERIOD_H4)return(PERIOD_H1);
if(TimeFrame>=PERIOD_H4 && TimeFrame<PERIOD_D1)return(PERIOD_H4);
if(TimeFrame>=PERIOD_D1 && TimeFrame<PERIOD_W1)return(PERIOD_D1);
if(TimeFrame>=PERIOD_W1 && TimeFrame<PERIOD_MN1)return(PERIOD_W1);
if(TimeFrame>=PERIOD_MN1)return(PERIOD_MN1);
}
ЗЫ. Во вложении скрипт для тестирования функции CorrectTF().
Эта функция возвращает дату начала квартала по его номеру. Например, если сейчас 27.08.2008, то датой начала текущего квартала будет 01.07.2008. Функция принимает только один параметр - номер квартала относительно текущего. Например, 0 - текущий квартал, 1 - следующий, а -1 - предыдущий. То есть положительные номера кварталов запросят даты из будущего, а нулевой и отрицательные из прошлого. Возвращаемое значение - количество секунд, прошедшее с 00:00 1 января 1970 года.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 12.05.2008 |//| Описание : Возвращает дату начала квартала |//+----------------------------------------------------------------------------+//| Параметры: |//| (-2 - позапрошлый) |//| (-1 - прошлый) |//| nq - номер квартала ( 0 - текущий) |//| ( 1 - следующий) |//| ( 2 - последующий) |//+----------------------------------------------------------------------------+datetimeDateBeginQuarter(intnq=0){intye=Year()-MathFloor(nq/4);
nq=MathMod(nq, 4);
intmo=Month()-MathMod(Month()+2, 3)+3*nq;
if(mo<1){mo+=12;
ye--;
}if(mo>12){mo-=12;
ye++;
}return(StrToTime(ye+"."+mo+".01"));
}
P.S. Во вложении скрипт для тестирования функции DateBeginQuarter().
Эта функция возвращает дату начала недели (дату понедельника) по её номеру. Например, если сейчас 29.08.2008, то датой начала текущей недели будет 25.08.2008. Функция принимает только один параметр - номер недели относительно текущей. Например, 0 - текущая неделя, 1 - следующая, а -1 - предыдущая. То есть положительные номера недель запросят даты из будущего, а нулевой и отрицательные из прошлого. Возвращаемое значение - количество секунд, прошедшее с 00:00 1 января 1970 года.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 13.05.2008 |//| Описание : Возвращает дату понедельника по номеру недели |//+----------------------------------------------------------------------------+//| Параметры: |//| (-2 - предпредыдущая неделя) |//| (-1 - предыдущая неделя) |//| nn - номер недели ( 0 - текущая неделя) |//| ( 1 - следующая неделя) |//| ( 2 - последующая неделя) |//+----------------------------------------------------------------------------+datetimeDateOfMonday(intnn=0){datetimedt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
while(TimeDayOfWeek(dt)!=1)dt-=24*60*60;
dt+=nn*7*24*60*60;
return(dt);
}
P.S. Во вложении скрипт для тестирования функции DateOfMonday().
Эта функция возвращает элемент ряда Фибоначчи по его порядковому номеру.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 07.08.2008 |//| Описание : Возвращает элемент ряда Фибоначчи по его порядковому номеру. |//+----------------------------------------------------------------------------+//| Параметры: |//| n - номер элемента ряда |//+----------------------------------------------------------------------------+intFibonacci(intn){inta=0, b=0, i=1, s=0;
if(n==1)s=1;
if(n>1){s=1;
while(i<n){i++;
a=b;
b=s;
s=a+b;
}}return(s);
}
P.S. Во вложении скрипт для тестирования функции Fibonacci().
Эта функция возвращает наименование метода МА (Moving Averages) по его идентификатору. Данную функцию удобно использовать в комментариях, сообщениях индикаторов, советников.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Возвращает наименование метода МА. |//+----------------------------------------------------------------------------+//| Параметры: |//| mm - идентификатор метода МА |//+----------------------------------------------------------------------------+stringGetNameMA(intmm){switch(mm){caseMODE_SMA : return("SMA");
caseMODE_EMA : return("EMA");
caseMODE_SMMA: return("SMMA");
caseMODE_LWMA: return("LWMA");
default : return("Unknown Method");
}}
Эта функция возвращает наименование метода МА (Moving Averages) по его идентификатору. Данную функцию удобно использовать в комментариях, сообщениях индикаторов, советников.
Не сочтите за придирательство....
default : return("Unknown Method");
Просто если уж быть последовательным, то до конца...
Эта функция возвращает ценовую разницу между двумя барами, которые задаются их номерами. Целью разработки данной функции было определение величины и направления движения курса. Функция GetPriceDiffInPoint() самостоятельно определяет, какие именно опорные точки (Open или High или Low или Close) баров брать в расчёт. Функция принимает следующие необязательные параметры:
sy - Наименование инструмента. "" или NULL - текущий символ. Значение по умолчанию NULL.
tf - Таймфрейм. Значение по умолчанию 0 - текущий символ.
n2 - Номер левого бара. Значение по умолчанию - 2.
n1 - номер правого бара. Значение по умолчанию - 1.
Возвращаемое значение:
положительное- между барами N2 и N1 был рост курса.
отрицательное - между барами N2 и N1 было снижение курса.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.09.2005 |//| Описание : Возвращает ценовую разницу в пунктах между двумя барами. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| n2 - номер левого бара ( 2 - второй бар) |//| n1 - номер правого бара ( 1 - первый бар) |//| Возвращаемое значение: |//| положительное - между барами N2 и N1 был рост курса |//| отрицательное - между барами N2 и N1 было снижение курса |//+----------------------------------------------------------------------------+intGetPriceDiffInPoint(stringsy="0", inttf=0, intn2=2, intn1=1){if(sy=="" || sy=="0")sy=Symbol();
doublep=MarketInfo(sy, MODE_POINT);
intd=MarketInfo(sy, MODE_DIGITS);
intdd=0, k=iBars(sy, tf);
if(n1>k || n2>k)Print("GetPriceDiffInPoint(): Недостаточно баров для ",sy,"",GetNameTF(tf));
else{if(n1>0 && n2>0){intd1=NormalizeDouble((iHigh(sy, tf, n1)-iLow(sy, tf, n2))/p, d);
intd2=NormalizeDouble((iLow(sy, tf, n1)-iHigh(sy, tf, n2))/p, d);
if(MathAbs(d1)>MathAbs(d2))dd=d1;
if(MathAbs(d1)<MathAbs(d2))dd=d2;
if(MathAbs(d1)==MathAbs(d2)){if(iOpen(sy, tf, n2)>iClose(sy, tf, n1))dd=d2; elsedd=d1;
}}}return(dd);
}
Примеры использования функции GetNearestDownFractal().
ЗЫ. Во вложении скрипт для тестирования функции GetNearestUpFractal().
Функция CorrectTF().
Эту функцию я написал после того, как обнаружил, что иногда я могу запросто во входных параметрах индикатора или советника указать неправильный таймфрейм, который равен целому количеству минут. Например, я ввёл 50 для часовок вместо 60. Ну... типа промахнулся. Так вот оказывается, функция iRSI() для неправильного таймфрейма возвращает ноль. Про другие функции ничего не скажу, ибо не проверял. И чтобы избежать досадных недоразумений из-за своих же ошибок по невнимательности, я написал эту функцию, как элементарную защиту от "дурака". Она выполняет подгонку входного параметра под "ближайший" подходящий правильный таймфрейм и возвращает его значение.
ЗЫ. Во вложении скрипт для тестирования функции CorrectTF().Функция DateBeginQuarter().
Эта функция возвращает дату начала квартала по его номеру. Например, если сейчас 27.08.2008, то датой начала текущего квартала будет 01.07.2008. Функция принимает только один параметр - номер квартала относительно текущего. Например, 0 - текущий квартал, 1 - следующий, а -1 - предыдущий. То есть положительные номера кварталов запросят даты из будущего, а нулевой и отрицательные из прошлого. Возвращаемое значение - количество секунд, прошедшее с 00:00 1 января 1970 года.
P.S. Во вложении скрипт для тестирования функции DateBeginQuarter().
Функция DateOfMonday().
Эта функция возвращает дату начала недели (дату понедельника) по её номеру. Например, если сейчас 29.08.2008, то датой начала текущей недели будет 25.08.2008. Функция принимает только один параметр - номер недели относительно текущей. Например, 0 - текущая неделя, 1 - следующая, а -1 - предыдущая. То есть положительные номера недель запросят даты из будущего, а нулевой и отрицательные из прошлого. Возвращаемое значение - количество секунд, прошедшее с 00:00 1 января 1970 года.
P.S. Во вложении скрипт для тестирования функции DateOfMonday().
Функция Fibonacci().
Эта функция возвращает элемент ряда Фибоначчи по его порядковому номеру.
P.S. Во вложении скрипт для тестирования функции Fibonacci().
Функция GetNameMA().
Эта функция возвращает наименование метода МА (Moving Averages) по его идентификатору. Данную функцию удобно использовать в комментариях, сообщениях индикаторов, советников.
Функция GetNameMA().
Эта функция возвращает наименование метода МА (Moving Averages) по его идентификатору. Данную функцию удобно использовать в комментариях, сообщениях индикаторов, советников.
Не сочтите за придирательство....
Не сочтите за придирательство....
ни в коем случае... спасибо! Исправил!
Добрый день !
Помогите экспа переправить самую малость.
Он зараза ордеров понаоткрывает и не закрывает эту пачку по условию.
т.е. если сделка одна всего лиш то он из позы вылезет а если сделки 2 то глохнет.
Функция GetPriceDiffInPoint().
Эта функция возвращает ценовую разницу между двумя барами, которые задаются их номерами. Целью разработки данной функции было определение величины и направления движения курса. Функция GetPriceDiffInPoint() самостоятельно определяет, какие именно опорные точки (Open или High или Low или Close) баров брать в расчёт. Функция принимает следующие необязательные параметры:
Возвращаемое значение: