Funciones útiles de KimIV - página 34

 
KimIV писал (а) >>

Los punteros en MQL4 son complicados. No hay ayudas directas. Alguien aquí en el foro intentó hacerlo con arrays, creo. No puedo ser más preciso. Búsquelo usted mismo.

MathRand()

Sólo se puede cambiar la primera dimensión del array mediante programación. La función ArrayResize(). La segunda, la tercera y la cuarta dimensión deben fijarse de forma rígida.

Bueno, olvidemos también los punteros y las matrices dinámicas...

Esperando la 5ª versión de la lengua...

Gracias por la ayuda...



Trabajar con una cuadrícula es fácil de implementar.

Lo curioso es que para mi idea una red no era suficiente, y quería hacer un algoritmo para cambiar entre redes, con punteros no es difícil.

Pero no... ...tendremos que codificarla.

 

La función SetTLineByAngle().

Esta función establece el objeto OBJ_TRENDBYANGLE de la línea de tendencia por el ángulo de la pendiente en el gráfico actual.

  • cl - Color del objeto TRENDBYANGLE. Parámetro obligatorio.
  • nm - Nombre del objeto. Cuando se pasa el valor por defecto - "", se utiliza como nombre la hora de apertura de la barra actual.
  • t1 - Primera coordenada del tiempo de ajuste del objeto. Valor por defecto - 0 - tiempo de apertura del décimo compás.
  • p1 - Primera coordenada del objeto que fija el precio. Valor por defecto - 0 - mínimo de la décima barra.
  • t2 - Segunda coordenada del tiempo de ajuste del objeto. Valor por defecto - 0 - tiempo de apertura de la barra actual.
  • p2 - Segunda coordenada del objeto que fija el precio. Este parámetro es una especie de interruptor. Su valor no nulo equipara esta función a SetTLine(), es decir, se dibujará una línea de tendencia utilizando el par de coordenadas tiempo/precio, mientras que el valor del ángulo de la pendiente de la línea de tendencia se ignorará. Valor por defecto - 0 - construcción de la línea de tendencia por el ángulo de la pendiente.
  • an - Ángulo de inclinación en grados. Valor por defecto - 0 - Línea horizontal.
  • ry - Bandera de la propiedad BOW. El valor por defecto es False.
  • st - Estilo de línea. Los valores válidos son STYLE_SOLID (por defecto), STYLE_DASH, STYLE_DOT, STYLE_DASHDOT.
  • wd - Ancho de línea. El valor por defecto es 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);
}
 

Ejemplos de cómo utilizar SetTLineByAngle().

  1. Rayo sólido naranja con un ángulo de 45° desde el mínimo de la 5ª barra.
    SetTLineByAngle(Orange, "", Time[5], Low[5], 0, 0, 45, True);
  2. Un abanico de rayos rojos punteados desde el mínimo de la 13ª barra.
    for (int i=0; i<90; i+=10)
      SetTLineByAngle(Red, "TL"+i, Time[13], Low[13], 0, 0, i, True, STYLE_DOT);

ZY. Se adjunta un script para probar SetTLineByAngle().

Archivos adjuntos:
 

La función SetArrow().

Esta función establece el icono del objeto OBJ_ARROW en el gráfico actual.

  • cd - código de icono. Parámetro obligatorio.
  • cl - Color del icono. Parámetro obligatorio.
  • nm - Nombre del objeto. Si se transfiere el valor por defecto - "", se utiliza como nombre la hora de apertura de la barra actual.
  • t1 - Primera coordenada del tiempo de ajuste del objeto. Valor por defecto - 0 - tiempo de apertura de la barra actual.
  • p1 - Primera coordenada del objeto que fija el precio. Valor por defecto - 0 - precio de oferta actual.
  • sz - Tamaño del icono. Valor por defecto - 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);
}
 

Ejemplos de cómo utilizar SetArrow().

  • El marcador de precio dorado de la izquierda en el máximo de la novena barra.
    SetArrow(5, Gold, "", Time[9], High[9], 3);

  • Marca roja de precio a la derecha en el máximo de la segunda barra.
    SetArrow(6, Red, "", Time[2], High[2], 3);

  • 3. Flecha azul sobre el máximo de la 2ª barra.
    SetArrow(242, Blue, "", Time[2], High[2]+50*Point, 2);
    

SZY. Se adjunta un script para probar la función SetArrow().

Archivos adjuntos:
 
Muchas gracias por lo que haces, ¿te importa si recojo las características de este hilo, y las cuelgo en mi web, en una sección aparte con un enlace al foro, y a tu web
 

En general, estaría bien tener un "Índice" en la primera página de este post. Una tabla con una lista de funciones, descripciones y enlaces a páginas. O mantener un archivo actualizado en la primera página, y las descripciones se pueden encontrar en las otras páginas.

Así que, si xrust hace su sugerencia, sería bueno repetirla aquí. En aras de la sistematización de lo ganado con esfuerzo :))

 
xrust писал (а) >>
...¿te importa si recojo las características de este hilo, y las pongo en mi sitio web, en una sección separada con un enlace al foro, y a tu sitio

No, no lo haré...

 
xrust писал (а) >>
Muchas gracias por lo que estás haciendo, te importaría si recojo las funciones de esta rama, y las cuelgo en mi sitio, en una sección aparte con una referencia al foro y a tu sitio

Crear un archivo "inluder" (mqh) (probablemente 2 - "comercio" y "otros"), acordar su nombre y obligar a los "desarrolladores" a incluirlo en la distribución. Para que todos en cada EA no tengan que reinventar la rueda.

:)

 
Gracias de nuevo, es que me da un poco de pereza, quiero recopilar todo a mano. Otra pregunta, ¿te importaría que usara la misma sintaxis y nombres de variables en mis funciones que tú, para estandarizarlas, por así decirlo.