Funciones útiles de KimIV - página 33

 

La función SetVLine().

Esta función establece la línea vertical del objeto OBJ_VLINE en el gráfico actual.

  • cl - Color del objeto LÍNEA VERTICAL. Parámetro obligatorio.
  • nm - nombre del objeto. Cuando se pasa el valor por defecto - "", se utiliza la hora de apertura de la barra actual como nombre del objeto.
  • t1 - Tiempo de ajuste del objeto. Valor por defecto - 0 - tiempo de apertura de la barra actual.
  • 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                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.07.2008                                                     |
//|  Описание : Установка объекта OBJ_VLINE вертикальная линия                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время                      (0  - время открытия текущего бара)     |
//|    st - стиль линии                (0  - простая линия)                    |
//|    wd - ширина линии               (1  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetVLine(color cl, string nm="", datetime t1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[0];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_VLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1, t1);
  ObjectSet(nm, OBJPROP_COLOR, cl);
  ObjectSet(nm, OBJPROP_STYLE, st);
  ObjectSet(nm, OBJPROP_WIDTH, wd);
}
 

Ejemplos de cómo utilizar SetVLine().

  1. Línea vertical sólida azul en la barra actual.
    SetVLine(Aqua);
  2. Línea gruesa lila en la octava barra.
    SetVLine(Magenta, "", Time[8], STYLE_SOLID, 3);
  3. Cuadrícula de líneas punteadas en las barras 14:00.
    for (int i=0; i<7; i++) {
      datetime dt=StrToTime((TimeToStr(TimeCurrent()-i*1440*60, TIME_DATE))+" 14:00");
      int nb=iBarShift(NULL, 0, dt, True);
      SetVLine(Coral, "VLine"+i, Time[nb], STYLE_DOT);
    }

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

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

EJECUTIVO. >> VOY A HACERLO.

Enséñame una foto, vamos a intentar hacer una.

 
TheXpert писал (а) >>

Muéstralo en la figura, vamos a intentar hacerlo.

Una función personalizada que calcula las áreas descritas por el indicador, por ejemplo, el RSI y la línea media.

El espacio delimitado por la curva por debajo de la línea media y la propia línea media es el área -S1, y por encima de la línea media es +S2.

Enviado a https://www.mql5.com/ru/forum/109590 para no interferir.

 

La función SetTLine().

Esta función establece el objeto de línea de tendencia OBJ_TREND en el gráfico actual.

  • cl - Color del objeto LÍNEA DE TENDENCIA. Es un 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. Valor por defecto - 0 - barra actual baja.
  • ry - Bandera de la propiedad BLUE. El valor por defecto es Falso.
  • 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_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);
}
 

Ejemplos de cómo utilizar SetTLine().

  1. Línea sólida naranja que pasa por los mínimos de las barras 15 y actuales.
    SetTLine(Orange, "", Time[15], Low[15], 0, Low[0], True);
  2. Línea de tendencia roja a través de los máximos de las barras 35 y 10.
    SetTLine(Red, "", Time[35], High[35], Time[10], High[10]);
  3. Rayo lila grueso a través de los máximos de los dos días anteriores.
    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=iHighest(NULL, 0, MODE_HIGH, b2-b1-1, b1);
    int n1=iHighest(NULL, 0, MODE_HIGH, b1-b0-1, b0);
    datetime t1=Time[n2];
    double   p1=High[n2];
    datetime t2=Time[n1];
    double   p2=High[n1];
    SetTLine(Magenta, "", t1, p1, t2, p2, True, STYLE_SOLID, 3);

HH. Se adjunta un script para probar la función SetTLine().

Archivos adjuntos:
 

Igor, me dirijo a ti como un codificador de MQL4 más experimentado.

Empecé a escribir una biblioteca para la red de Kohonen.

Quiero hacerlo lo más flexible y conveniente posible, pero me he enfrentado a un momento que aún no puedo superar.

Ejemplo1:

int& value; // так нельзя, интересует аналог на MQL4, если он есть
 
void AssignValue(int& newValue)
{
   value = newValue;
}
 
void SetValue(int newValue)
{
   value = newValue;
}
 
int init()
{
   int someValue = 5;
   AssignValue(someValue);
   SetValue(10);
   Print(someValue); // очень хочется, чтобы вывелось 10
}

¿Es posible hacer esto usando MQL4, y cómo, si es así?



Ejemplo2:

void SetSize(double& matrix[][], int inSize, int outSize)
{
    // требуется установить размеры матрицы, не осилил
}
 
void Init(double& matrix[][])
{
    // допустим, требуется проиниализировать всю матрицу значением 1, также не осилил
}

De nuevo, si es posible, por favor, dame el código. Este ejemplo me parece realizable.



Gracias de antemano.

 
TheXpert писал (а) >>
Quiero que sea lo más flexible y conveniente, pero me he enfrentado a un momento que aún no puedo superar.
>> Ejemplo 1:
¿Es posible hacerlo con las herramientas MQL4 y cómo, si es así?

Entiendo que quiere organizar el trabajo con punteros. Para que una variable apunte a otra... ¿O tal vez me he equivocado? Intenta explicar con palabras lo que necesitas.

TheXpert escribió >>
Ejemplo2:
De nuevo, si es posible hacer algo así, por favor, dame el código. Este ejemplo me parece aplicable.
void start()
{
  double arr[3][2];
  Init(arr);
  for (int i=0; i<3; i++)
  {
    for (int j=0; j<2; j++)
    {
      Print("arr[",i,"][",j,"]=",arr[i][j]);
    }
  }
}
void Init(double& matrix[][])
{
  ArrayInitialize(matrix, 1);
}
 
KimIV писал (а) >>

Entiendo que quiere organizar el trabajo con punteros. Para que una variable apunte a otra... ¿O tal vez me he equivocado? Intenta explicar con palabras lo que necesitas.

Sí, más o menos.


Sobre lo segundo... ¿qué tal si se inicializa con valores aleatorios?

Sí, además, necesito exactamente arrays dinámicos.

 
TheXpert писал (а) >>
Sí, más o menos.

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.

TheXpert escribió (a) >>
En cuanto a la segunda... ¿qué pasa con la inicialización con valores aleatorios?

MathRand()

TheXpert escribió (a) >>
Sí, además, necesito exactamente arrays dinámicos.
Sólo se puede cambiar la primera dimensión de la matriz mediante programación. La función ArrayResize(). La segunda, la tercera y la cuarta dimensión deben fijarse de forma rígida.
Razón de la queja: