Funciones útiles de KimIV - página 35

 
xrust писал (а) >>
Otra pregunta, te importaría que utilizara tu sintaxis y nombres de variables en mis funciones, por así decirlo, para estandarizarlas.

Haz lo que creas que es correcto.

 

La función SetLabel().

Esta función establece el objeto de etiqueta de texto OBJ_LABEL en el gráfico actual.

  • nm - Nombre del objeto. Parámetro obligatorio.
  • tx - Texto. Parámetro obligatorio.
  • cl - Color del marcador. Parámetro obligatorio.
  • xd - Coordenada X en píxeles relativa al ángulo de referencia. Parámetro obligatorio.
  • yd - Coordenada Y en píxeles relativa al ángulo de referencia. Parámetro obligatorio.
  • cr - Número de ángulo de referencia. Valores válidos: 0 arriba-izquierda, 1 arriba-derecha, 2 abajo-izquierda, 3 abajo-derecha. El valor por defecto es 0.
  • fs - Tamaño de la fuente. El valor por defecto es 9.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка текстовой метки, объект OBJ_LABEL.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    nm - наименование объекта                                               |
//|    tx - текст                                                              |
//|    cl - цвет метки                                                         |
//|    xd - координата X в пикселах                                            |
//|    yd - координата Y в пикселах                                            |
//|    cr - номер угла привязки        (0 - левый верхний,                     |
//|                                     1 - правый верхний,                    |
//|                                     2 - левый нижний,                      |
//|                                     3 - правый нижний )                    |
//|    fs - размер шрифта              (9 - по умолчанию  )                    |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
  ObjectSetText(nm, tx, fs);
  ObjectSet(nm, OBJPROP_COLOR    , cl);
  ObjectSet(nm, OBJPROP_XDISTANCE, xd);
  ObjectSet(nm, OBJPROP_YDISTANCE, yd);
  ObjectSet(nm, OBJPROP_CORNER   , cr);
  ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
 

Ejemplos de cómo utilizar SetLabel().

  • Tres etiquetas de texto azules en la esquina superior izquierda, tipo de letra 9.
    SetLabel("Label1", "Текстовая метка", Blue, 5, 15);
    SetLabel("Label2", "Ещё одна текстовая метка", Blue, 5, 30);
    SetLabel("Label3", "Параметр cr=0", Blue, 5, 45);

  • Tres etiquetas de texto de color púrpura en la esquina superior derecha, tipo de letra 12.
    SetLabel("Label1", "Текстовая метка", Magenta, 5, 15, 1, 12);
    SetLabel("Label2", "Ещё одна текстовая метка", Magenta, 5, 30, 1, 12);
    SetLabel("Label3", "Параметр cr=1", Magenta, 5, 45, 1, 12);

  • Tres etiquetas de texto de color verde en la esquina inferior derecha, tipo de letra 12.
    SetLabel("Label1", "Текстовая метка", Green, 5, 15, 3, 12);
    SetLabel("Label2", "Ещё одна текстовая метка", Green, 5, 30, 3, 12);
    SetLabel("Label3", "Параметр cr=3", Green, 5, 45, 3, 12);


ZS. Se adjunta un script para probar la función SetLabel().

Archivos adjuntos:
 
SergNF писал (а) >>

Crear un archivo "inluder" (mqh) (probablemente 2 - "comercio" y "otros"), acordar su nombre y obligar a los "desarrolladores" a incluirlo en la distribución.

No se puede matar la idea, hace tiempo que se está consolidando. Mi sueño, como no profesional, es dejar al usuario ordinario sólo la toma de decisiones, liberándole de los entresijos del software.

Los desarrollos de Igor (impresionantes por su consistencia y detalle) se acercan al máximo. Además, el autor no sólo programa, sino que mantiene constantemente su

Los asesores en el comercio real, lo que aumenta el valor práctico del código.

Sería interesante conocer la opinión de Igor sobre la posibilidad de mqh-framing de sus desarrollos y sobre las ventajas y desventajas de tal implementación.

 
granit77 писал (а) >>
Me gustaría conocer la opinión de Igor sobre la posibilidad de mqh-diseño de sus desarrollos, ventajas y desventajas de tal implementación.

Sobre las posibilidades...

Hace tiempo que tengo los archivos MQH hechos... No los voy a publicar todavía... Tengo un as en la manga... El acorde final será... Pondré todas las características y lo resumiré poniendo los archivos mqh.

Los pros y los contras...

Los archivos MQH son convenientes. Puede utilizarlos en diferentes Asesores Expertos. El código de un EA específico se reduce significativamente. Sólo queda la lógica desnuda y algunas otras cosas, y todos los artilugios y envoltorios están fuera.

Sin embargo, rara vez utilizo archivos mqh, en general, sólo uno. Es stdlib.mqh. He copiado todas las funciones necesarias en el archivo de Expert Advisor. Es más conveniente para mí. Me acostumbré a esto cuando trabajaba mucho en los pedidos y a menudo me olvidaba de enviar uno u otro archivo mqh al solicitante. Además, quiero copiar un archivo EA a diferentes carpetas de la terminal en lugar de arrastrar todo el montón de inlusiones tras él.

 
No es sólo una delicia. ¡Es una delicia! No está lejos el día en que una distribución sin esta biblioteca se considere incompleta.
 

Tal vez tenga un script en funciones útiles que pueda hacer la apertura de órdenes descrita en el artículo http://www.kroufr.ru/content/view/1027/124/.

Si no es así, aconséjeme dónde encontrar uno. .

 

La función CrossPointOfLines().

Esta función calcula las coordenadas del punto de intersección de dos líneas. Cada línea está definida por un par de coordenadas de sus puntos. Se pasan tres matrices a la función como parámetros:

  • x - Matriz de abscisas. Debe contener cuatro elementos: x[0], x[1] - la abscisa de la primera línea, x[2], x[3] - la abscisa de la segunda línea.
  • y - Matriz de ordenadas. Debe contener cuatro elementos: y[0], y[1] - las ordenadas de la primera línea, y[0], y[1] - las ordenadas de la segunda línea.
  • t - Matriz de coordenadas del punto de intersección de las dos líneas. Tras la ejecución normal de la función este array contendrá dos elementos: t[0] es la abscisa del punto buscado de intersección de las dos rectas y t[1] es la ordenada del mismo punto.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Вычисляет координаты точки пересечения двух прямых.            |
//|             Каждая прямая задаётся парой координат своих точек.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив абсцисс              x[0], x[1] - первая прямая              |
//|                                    x[2], x[3] - вторая прямая              |
//|    y - массив ординат              y[0], y[1] - первая прямая              |
//|                                    y[0], y[1] - вторая прямая              |
//|    t - массив искомых координат    t[0]       - абсцисса                   |
//|                                    t[1]       - ордината                   |
//+----------------------------------------------------------------------------+
void CrossPointOfLines(double& x[], double& y[], double& t[]) {
  double z=(y[3]-y[2])*(x[1]-x[0])-(y[1]-y[0])*(x[3]-x[2]);
  ArrayResize(t, 2);
  ArrayInitialize(t, 0.0);

  if (z==0) Print("CrossPointOfLines(): Не удалось найти точку пересечения!");
  else {
    double xy1=x[1]*y[0]-x[0]*y[1];
    double xy2=x[3]*y[2]-x[2]*y[3];
    t[0]=NormalizeDouble((xy1*(x[3]-x[2])-xy2*(x[1]-x[0]))/z, 0);
    t[1]=(xy1*(y[3]-y[2])-xy2*(y[1]-y[0]))/z;
  }
}
 

Un ejemplo de uso de la función CrossPointOfLines().

Como ejemplo de uso de la función CrossPointOfLines(), ofrezco tradicionalmente mi script (ver adjunto). Para que el script funcione correctamente, es necesario dibujar dos líneas de intersección en el gráfico actual de cualquiera de los siguientes tipos: vertical, horizontal o de tendencia. A continuación, la secuencia de comandos debe adjuntarse al gráfico. La secuencia de comandos dará lugar a marcar el precio de la izquierda en el punto de intersección de las dos líneas.

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

Archivos adjuntos:
 

La función SetRegression().

Esta función establece el objeto OBJ_REGRESSION del canal de regresión lineal en el gráfico actual.

  • cl - Color del objeto. 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.
  • t2 - Segunda coordenada del tiempo de ajuste del objeto. El valor por defecto es 0 - el tiempo de apertura de la barra actual.
  • 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_REGRESSION канал линейной регрессии.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ( ""   - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10])                      |
//|    t2 - время открытия бара        (  0   - Time[0])                       |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetRegression(color cl, string nm="", datetime t1=0, datetime t2=0,
                    bool ry=False, int st=STYLE_SOLID, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (t2<=0) t2=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_REGRESSION, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_TIME2, t2);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_RAY  , ry);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}