Escribí esta función después de descubrir que a veces puedo especificar fácilmente un marco de tiempo incorrecto, que es igual a un número entero de minutos, en los parámetros de entrada de un indicador o un EA. Por ejemplo, introduje 50 por hora en lugar de 60. Bueno... como si se perdiera. Resulta que la función iRSI() devuelve cero para un marco temporal incorrecto. No puedo decir nada sobre otras funciones, porque no las he comprobado. Para evitar malentendidos resultantes de mis propios errores de falta de atención, escribí esta función como una primitiva a prueba de tontos. Ajusta el parámetro de entrada al marco temporal "más cercano" apropiado y correcto y devuelve su valor.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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);
}
SZY. Se adjunta un script para probar la función CorrectTF().
Esta función devuelve la fecha de inicio del trimestre por su número. Por ejemplo, si ahora es 27.08.2008, la fecha de inicio del trimestre actual será 01.07.2008. La función sólo toma un parámetro: el número de trimestre relativo al trimestre actual. Por ejemplo, 0 es el trimestre actual, 1 es el trimestre siguiente y -1 es el trimestre anterior. Es decir, los números positivos de los trimestres solicitarán fechas del futuro, mientras que el cero y el negativo solicitarán fechas del pasado. El valor devuelto es el número de segundos transcurridos desde las 00:00 del 1 de enero de 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.D. Se adjunta un script para probar la función DateBeginQuarter().
Esta función devuelve la fecha de inicio de la semana (la fecha del lunes) por su número. Por ejemplo, si ahora es 29.08.2008, la fecha de inicio de la semana actual será 25.08.2008. La función sólo toma un parámetro: el número de semana relativo a la semana actual. Por ejemplo, 0 es la semana actual, 1 es la semana siguiente y -1 es la semana anterior. Es decir, los números de semana positivos solicitarán fechas del futuro, mientras que los números cero y negativos solicitarán fechas del pasado. El valor devuelto es el número de segundos transcurridos desde las 00:00 del 1 de enero de 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.D. Se adjunta un script para probar la función DateOfMonday().
Esta función devuelve un elemento de una serie de Fibonacci por su número de secuencia.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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.D. Se adjunta un script para probar Fibonacci().
Esta función devuelve el nombre del método MA (Moving Averages) por su identificador. Esta función es conveniente utilizarla en los comentarios, indicadores y mensajes de los Asesores Expertos.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. 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");
}}
Esta función devuelve el nombre del método MA (Moving Averages) por su identificador. Esta función es útil en los comentarios, indicadores y Asesores Expertos.
No pienses en ello como en un puntilloso ....
default : return("Unknown Method");
Es que si vas a ser consistente, tienes que ir hasta el final...
Esta función devuelve la diferencia de precio entre dos barras, que se especifican por sus números. El propósito de desarrollar esta función era determinar el valor y la dirección del movimiento del precio. La función GetPriceDiffInPoint() determina los puntos de referencia (Apertura o Alta o Baja o Cierre) de las barras a tener en cuenta. La función acepta los siguientes parámetros opcionales:
sy - Nombre del instrumento. "" o NULL - símbolo actual. El valor por defecto es NULL.
tf - Marco temporal. Valor por defecto 0 - símbolo actual.
n2 - Número de barra izquierda. Valor por defecto - 2.
n1 - Número de barra derecha. Valor por defecto - 1.
Valor devuelto:
positivo: hubo un aumento de la tasa entre las barras N2 y N1.
Negativo: hubo una disminución entre las barras N2 y 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);
}
Ejemplos de cómo utilizar GetNearestDownFractal().
SZY. Se adjunta un script para probar la función GetNearestUpFractal().
Función CorrectTF().
Escribí esta función después de descubrir que a veces puedo especificar fácilmente un marco de tiempo incorrecto, que es igual a un número entero de minutos, en los parámetros de entrada de un indicador o un EA. Por ejemplo, introduje 50 por hora en lugar de 60. Bueno... como si se perdiera. Resulta que la función iRSI() devuelve cero para un marco temporal incorrecto. No puedo decir nada sobre otras funciones, porque no las he comprobado. Para evitar malentendidos resultantes de mis propios errores de falta de atención, escribí esta función como una primitiva a prueba de tontos. Ajusta el parámetro de entrada al marco temporal "más cercano" apropiado y correcto y devuelve su valor.
SZY. Se adjunta un script para probar la función CorrectTF().La función DateBeginQuarter().
Esta función devuelve la fecha de inicio del trimestre por su número. Por ejemplo, si ahora es 27.08.2008, la fecha de inicio del trimestre actual será 01.07.2008. La función sólo toma un parámetro: el número de trimestre relativo al trimestre actual. Por ejemplo, 0 es el trimestre actual, 1 es el trimestre siguiente y -1 es el trimestre anterior. Es decir, los números positivos de los trimestres solicitarán fechas del futuro, mientras que el cero y el negativo solicitarán fechas del pasado. El valor devuelto es el número de segundos transcurridos desde las 00:00 del 1 de enero de 1970.
P.D. Se adjunta un script para probar la función DateBeginQuarter().
La función DateOfMonday().
Esta función devuelve la fecha de inicio de la semana (la fecha del lunes) por su número. Por ejemplo, si ahora es 29.08.2008, la fecha de inicio de la semana actual será 25.08.2008. La función sólo toma un parámetro: el número de semana relativo a la semana actual. Por ejemplo, 0 es la semana actual, 1 es la semana siguiente y -1 es la semana anterior. Es decir, los números de semana positivos solicitarán fechas del futuro, mientras que los números cero y negativos solicitarán fechas del pasado. El valor devuelto es el número de segundos transcurridos desde las 00:00 del 1 de enero de 1970.
P.D. Se adjunta un script para probar la función DateOfMonday().
La función Fibonacci().
Esta función devuelve un elemento de una serie de Fibonacci por su número de secuencia.
P.D. Se adjunta un script para probar Fibonacci().
Función GetNameMA().
Esta función devuelve el nombre del método MA (Moving Averages) por su identificador. Esta función es conveniente utilizarla en los comentarios, indicadores y mensajes de los Asesores Expertos.
Función GetNameMA().
Esta función devuelve el nombre del método MA (Moving Averages) por su identificador. Esta función es útil en los comentarios, indicadores y Asesores Expertos.
No pienses en ello como en un puntilloso ....
No pienses en ello como si te estuvieras metiendo en ....
por todos los medios... Gracias. Corregido.
Buenas tardes.
Ayúdame a que la expo se transmita un poco.
No puedo creer que abra órdenes y no cierre esta pila en condiciones.
Es decir, si un acuerdo es uno solo, saldrá de la pose y si hay 2 acuerdos, se cierra.
Función GetPriceDiffInPoint().
Esta función devuelve la diferencia de precio entre dos barras, que se especifican por sus números. El propósito de desarrollar esta función era determinar el valor y la dirección del movimiento del precio. La función GetPriceDiffInPoint() determina los puntos de referencia (Apertura o Alta o Baja o Cierre) de las barras a tener en cuenta. La función acepta los siguientes parámetros opcionales:
Valor devuelto: