Funciones útiles de KimIV - página 116

 

La función SetChannel().

Esta función establece el objetoOBJ_CHANNEL en un canal equidistante en el gráfico actual.

  • cl- Color del objeto. Parámetro obligatorio.
  • t[]- Matriz de tres valores en el eje del tiempo.Parámetro obligatorio.
  • p[]- Matriz de tres valores en el eje de precios. Parámetroobligatorio.
  • nm- Nombre del objeto. Cuando se pasa el valor por defecto -"", se utiliza como nombre la hora de apertura de la barra actual.
  • ry- Bandera de la propiedadBOW. El valor por defecto esFalse.
  • st- Estilo de línea. Los valores válidos sonSTYLE_SOLID(por defecto),STYLE_DASH,STYLE_DOT,STYLE_DASHDOT.
  • wd- Ancho de línea. Por defecto es1.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2013                                                     |
//|  Описание : Установка объекта OBJ_CHANNEL Равноудаленный канал.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl  - цвет линии                                                        |
//|    t[] - время открытия бара                                               |
//|    p[] - ценовой уровень                                                   |
//|    nm  - наименование              (  ""  - время открытия текущего бара)  |
//|    ry  - луч                       (False - по умолчанию)                  |
//|    st  - стиль линии               (  0   - простая линия)                 |
//|    wd  - ширина линии              (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetChannel(color cl, datetime& t[], double& p[],
                string nm="", bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t[0]<=0) t[0]=Time[20];
  if (p[0]<=0) p[0]=High[20];
  if (t[1]<=0) t[1]=Time[0];
  if (p[1]<=0) p[1]=High[0];
  if (t[2]<=0) t[2]=Time[15];
  if (p[2]<=0) p[2]=Low[15];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_CHANNEL, 0, 0,0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t[0]);
  ObjectSet(nm, OBJPROP_PRICE1, p[0]);
  ObjectSet(nm, OBJPROP_TIME2 , t[1]);
  ObjectSet(nm, OBJPROP_PRICE2, p[1]);
  ObjectSet(nm, OBJPROP_TIME3 , t[2]);
  ObjectSet(nm, OBJPROP_PRICE3, p[2]);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
ZZY. Se adjunta un script para probar la función SetChannel().
Archivos adjuntos:
 

Buenas tardes.

Estoy utilizando la función SetTLine() de KimIV https://forum.mql4.com/ru/38949/page6#434255 . El problema es que necesito dos líneas (superior e inferior), pero no me funciona. Hice otra función SetTLine1() con otras variables, pero sigue sin funcionar. ¿Cómo hacerlo?

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
datetime d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
datetime d1=TimeCurrent()-24*60*60;
while (TimeDayOfWeek(d1)==0 || TimeDayOfWeek(d1)==6) d1-=24*60*60;
d1=StrToTime(TimeToStr(d1, TIME_DATE));
datetime d2=d1-24*60*60;
while (TimeDayOfWeek(d2)==0 || TimeDayOfWeek(d2)==6) d2-=24*60*60;
d2=StrToTime(TimeToStr(d2, TIME_DATE));
int b2=iBarShift(NULL, 0, d2);     // номер бара начала второго дня
int b1=iBarShift(NULL, 0, d1);     // номер бара начала первого дня
int b0=iBarShift(NULL, 0, d0);     // номер бара начала текущего дня
int n2=iLowest(NULL, 0, MODE_LOW, b2-b1-1, b1);
int n1=iLowest(NULL, 0, MODE_LOW, b1-b0-1, b0);
datetime t1=Time[n2];
double   p1=Low[n2];
datetime t2=Time[n1];
double   p2=Low[n1];
SetTLine(Magenta, "", t1, p1, t2, p2, True, STYLE_SOLID, 3);   


datetime di0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
datetime di1=TimeCurrent()-24*60*60;
while (TimeDayOfWeek(di1)==0 || TimeDayOfWeek(di1)==6) di1-=24*60*60;
di1=StrToTime(TimeToStr(di1, TIME_DATE));
datetime di2=di1-24*60*60;
while (TimeDayOfWeek(di2)==0 || TimeDayOfWeek(di2)==6) di2-=24*60*60;
di2=StrToTime(TimeToStr(di2, TIME_DATE));
int bi2=iBarShift(NULL, 0, di2);     // номер бара начала второго дня
int bi1=iBarShift(NULL, 0, di1);     // номер бара начала первого дня
int bi0=iBarShift(NULL, 0, di0);     // номер бара начала текущего дня
int ni2=iHighest(NULL, 0, MODE_HIGH, bi2-bi1-1, bi1);
int ni1=iHighest(NULL, 0, MODE_HIGH, bi1-bi0-1, bi0);
datetime t1i=Time[ni2];
double   p1i=High[ni2];
datetime t2i=Time[ni1];
double   p2i=High[ni1];
SetTLine1(Magenta, "", t1i, p1i, t2i, p2i, True, STYLE_SOLID, 3);
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}


void SetTLine1(color cli, string nmi="",
              datetime t1i=0, double p1i=0, datetime t2i=0, double p2i=0,
              bool ryi=False, int sti=0, int wdi=1) {
  if (nmi=="") nmi=DoubleToStr(Time[0], 0);
  if (t1i<=0) t1i=Time[10];
  if (p1i<=0) p1i=Low[10];
  if (t2i<=0) t2i=Time[0];
  if (p2i<=0) p2i=Bid;
  if (ObjectFind(nmi)<0) ObjectCreate(nmi, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nmi, OBJPROP_TIME1 , t1i);
  ObjectSet(nmi, OBJPROP_PRICE1, p1i);
  ObjectSet(nmi, OBJPROP_TIME2 , t2i);
  ObjectSet(nmi, OBJPROP_PRICE2, p2i);
  ObjectSet(nmi, OBJPROP_COLOR , cli);
  ObjectSet(nmi, OBJPROP_RAY   , ryi);
  ObjectSet(nmi, OBJPROP_STYLE , sti);
  ObjectSet(nmi, OBJPROP_WIDTH , wdi);
}
 

No es necesario hacer dos funciones. Hay que llamar a uno con diferentes parámetros. Has llamado a dos funciones, pero has pasado un nombre vacío del objeto LINE a ambas. Por defecto, la función SetTLine() establece como nombre la hora de apertura de la barra actual. En su caso, esto provocaría que no importa cuántas veces llamara aSetTLine(), cada vez crearía un objeto con el mismo nombre, es decir, UN objeto LINE.

He revisado su código. Véase el anexo. Y para un ejemplo de lo que dibuja su código, una imagen

Archivos adjuntos:
 
KimIV:

No es necesario hacer dos funciones. Hay que llamar a uno con diferentes parámetros. Has llamado a dos funciones, pero has pasado un nombre vacío del objeto LINE a ambas. Por defecto, la función SetTLine() establece como nombre la hora de apertura de la barra actual. En su caso, esto provocaría que no importa cuántas veces llamara aSetTLine(), cada vez crearía un objeto con el mismo nombre, es decir, UN objeto LINE.

He revisado su código. Véase el anexo. Y para un ejemplo de lo que dibuja su código, una imagen


Ya veo, gracias.

 

¡Hola!

Quiero darles un GRAN AGRADECIMIENTO por su trabajo. He descargado 2 archivos(ByMarketBuy(Sell)+e-SARTrailing) de su sitio web para construir mi sistema de comercio. Envío el scriptByMarketBuy(Sell) sobre el par EUR/USD en 1 pantalla, prescribiendo MAGIC 30 para una orden yMAGIC 60 para otra orden (respectivamente M30 y H1) ye-SARTrailing advisor en 2 y 3 pantallas con ajustesSAR.TF=30 y 60respectivamente. Y puesto que dos órdenes están abiertas en el mismo par de divisas, por lo que van co-rotación y resulta que sinMagicNumber Asesorese-SARTrailing en dos pantallas entrará en conflicto con los demás. Tengo una GRANSOLICITUDa ustedsi usted podría modificar el asesor (para escribir) una característica comoMagicNumber puede ser un suplemento tal apreciaría muchos. Y esto funcionará en todos los plazos al mismo tiempo sin conflicto entre ellos, independientemente de la direccionalidad.

Muchas gracias de antemano.

 
tim-time:

Tengo una GRAN PETICIÓN para usted si usted podría ajustar su Asesor Experto con lafunciónMagicNumber.

Gracias por el consejo. He añadido un filtro para magos...
 

Función GetTimeOpenBar().

Esta función devuelve el tiempo de apertura de un símbolo arbitrario y una barra de marco temporal arbitraria. En general, es sólo una combinación de las funciones básicas iBarShift() y iTime(). Por lo tanto, no hay nada nuevo aquí, y el uso de una variante particular es una cuestión de conveniencia. Puede pasar los siguientes parámetros opcionales a la función

  • sy- Nombre del instrumento comercial (símbolo). Los valores "" y NULL significan el símbolo actual. El valor por defecto es "".
  • tf- Marco temporal. Valor por defecto - 0 - marco temporal actual.
  • dt- Fecha y hora. Valor por defecto - 0 - hora actual.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия бара.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий)                 |
//|    dt - дата/время                 (    0       - текущее)                 |
//+----------------------------------------------------------------------------+
datetime GetTimeOpenBar(string sy="", int tf=0, int dt=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  if (tf==0) tf=Period();
  if (dt==0) dt=TimeCurrent();
  
  int sh=iBarShift(sy, tf, dt, False);

  return(iTime(sy, tf, sh));
}

 
KimIV:
Gracias por el consejo. He añadido un filtro para magos...

¡HOLA!

¡¡¡WOW!!! ¡¡¡ESE ES EL RITMO!!! (Lo hago yo mismo o digo que NO)

UNENORME RESPETOPOR LOS PROFESIONALES!(Un profesional debe conocer todos los detalles más pequeños + el trabajo duro en su campo y, por supuesto, la experiencia que se acumula con los años).

Me dedico a los muebles incorporados ya 4 5 años y 1 5 años termina el comercio de Forex (el trabajo duro + la experiencia de los momentos de éxito y sin éxito en el comercio, queda por aprender los detalles más pequeños).

MI OBJETIVO ES CONVERTIRME EN UN PROFESIONAL DEL COMERCIO.

¡LEAGRADEZCOSU AYUDA!

¡CON RESPETO!

 

He creado la función ErrorRU(), que devuelve una descripción rusa corta o detallada de un error por su código. Se detectan tanto los errores devueltos por el servidor comercial como los errores de ejecución de los programas MQL. Sin embargo, no todos los errores tienen una descripción detallada con recomendaciones de "Qué hacer", pero así es.

Estoy publicando la función en el script para probarla.

Si alguien necesita una variación en forma de archivo MQH, puede obtenerla en mi sitio web.

Archivos adjuntos:
 

¡Hola!

¿Es posible añadir notificaciones PUSH a su EAe-SignalOfTrade?

https://www.mql5.com/ru/forum/6960

https://www.mql5.com/ru/docs/common/sendnotification

( El servidorVPS alquilado se niega a dar los datos del servidor SMTP que debe ser especificado en la configuración de correo de MT4 para el trabajo del asesor conUseSendMail=True- correo electrónico. )

Gracias de antemano.

Razón de la queja: