Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1791

 
MakarFX #:

Para que puedas escribirte un recordatorio - cuál es la función

:))) como si no pudiera hacerlo yo mismo cuando lo necesito: insertar dos barras y escribir un par de palabras. ¿Has probado a escribir algo en ese marco? Esa barra oblicua de la derecha irá a la derecha por el número de caracteres que hayas escrito, pero ¿qué pasa si necesitas escribir más de una línea? En lugar de hacer algo, tengo que perder el tiempo dibujando marcos. Es que el ideario impone una especie de visión enfermiza de cómo debe ser.

 
Nerd Trader #:

:))) como si no pudiera hacerlo yo mismo cuando lo necesito: insertar dos barras y escribir un par de palabras. ¿Has probado a escribir algo en ese marco? Esa barra oblicua de la derecha saldrá por el número de caracteres que hayas escrito a la derecha, pero ¿qué pasa si necesitas escribir más de una línea? En lugar de hacer algo, tengo que perder el tiempo dibujando marcos. Sólo estoy imponiendo una visión enfermiza de cómo debería ser.

Pon dos barras delante de la función y ya está.

//
int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const datetime& time[],
                 const double& open[],
                 const double& high[],
 
MakarFX #:

Poner dos barras delante de la función y ya está.

Ya escribí arriba que si hay una línea vacía entre el comentario y la función, se insertará un marco.
 

Cuando se hace clic en el botón, se crea una línea horizontal. Se recrean con un color diferente según la posición del cursor en relación con el precio. El problema es: las líneas amarillas y grises parpadean y se crean constantemente (el verde está bien) cuando el cursor está en la posición adecuada lejos del precio. Un código similar cambiando sólo la propiedad del color de la línea, sin recrearlo, funciona correctamente.

El NOT lógico aquí está en su lugar, es decir, en lugar de escribir == 0.

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
  ...
  ...
  ...
  if(ObjectGetInteger(0,"Button Stop Order",OBJPROP_STATE)){
    int x = (int)lparam;
    int y = (int)dparam;
    //Переведём координаты X, Y в дату и время
    if(ChartXYToTimePrice(0,x,y,window,dt,price)){
      //Линия меняет цвет с зелёного на желтый
      if(price < Bid){
        if(!ObjectFind("Buy Stop") || !ObjectFind("not allowed")){
          ObjectDelete(line_name);
          line_name = "Sell Stop";
          CreateLine(line_name, clrYellow);
        }      
      }
      //Линия меняет цвет с желтого на зелёный
      if(price > Ask){
        if(!ObjectFind("Sell Stop") || !ObjectFind("not allowed")){
          ObjectDelete(line_name);
          line_name = "Buy Stop";
          CreateLine(line_name, clrGreen);
        }
      }
      //Линия меняет цвет на серый если в зоне спреда
      if(price > Bid && price < Ask){
        if(!ObjectFind("Buy Stop") || !ObjectFind("Sell Stop")){
          ObjectDelete(line_name);
          line_name = "not allowed";
          CreateLine(line_name, clrGray);
        }
      }
      //Прикрепляем линию к курсору
      if(id == CHARTEVENT_MOUSE_MOVE)
        if(ObjectMove(0,line_name,0,0,price))
          ChartRedraw(0);
    }
  }else if(ObjectFind(line_name) == window) Print(ObjectDelete(line_name));
 
Nerd Trader una línea horizontal. Se recrean en un color diferente según la posición del cursor en relación con el precio. El problema es: las líneas amarillas y grises parpadean y se crean constantemente (el verde está bien) cuando el cursor está en la posición adecuada del precio. Un código similar cambiando sólo la propiedad del color de la línea, sin recrearlo, funciona correctamente.

El NOT lógico aquí está en su lugar, es decir, en lugar de escribir == 0.

ObjectFind es un int, no un bool
 
Nerd Trader #:

Porque me jode mucho que se decida pasar a un entorno nativo de mql4 y ahí se vaya. ¿Quiere un marco? Y lo venderemos de todos modos.

Tienes que usar el método de Makar para conseguir lo que quieres.

MakarFX #:

No conocía los estilos, así que les di el formato que quería para leerlos.

 
MakarFX #:
ObjectFind es un int, no un bool
en este caso no hay diferencia "!" o "==0"
 
Nerd Trader #:
en este caso no hay diferencia "!" o "==0"

¡¡¡Hay una diferencia!!!

      if(!ObjectFind("Buy Stop"))Print("All right Христофор Бонифатич!");
      else Print("Something is wrong!");
      if(ObjectFind("Buy Stop")!=0)Print("All right Христофор Бонифатич");
 
Nerd Trader #:
en este caso no hay diferencia "!" o "==0"
if(!ObjectFind("Buy Stop"))

Esta consulta es así:

Vasili Ivanovich Chapayev y Petka están volando en un avión, y de repente Vasili Ivanovich, sentado al volante, grita:

"¡Petya, los instrumentos!"

Petya responde: "Treinta y ocho".

Vasily Ivanovich: "¿Treinta y ocho qué?"

Petya: "¿Y los instrumentos?"

 
MakarFX #:

Esta solicitud tiene el siguiente aspecto:

No Makar, se ve así:

La función ObjectFind() devuelve el número de la ventana principal. Y este número es 0. Por otro lado, 0 == false, por lo que se deduce que si la función devuelve 0, sigue devolviendo false. Por supuesto, yo no usaría esto porque si la función devuelve -1, es decir, un error, podemos considerar que la ubicación del objeto no está en la ventana principal. Además, nunca se sabe qué arreglos se harán...

En general, no discutas y no aprendas a hacerlo...