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

 
Алексей Барбашин:

void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); Aquí es donde intento destruir el puntero }


No está muy claro qué es exactamente lo que se puede destruir aquí. No es de extrañar que haya fugas de memoria. ¿Qué es un puntero? Un puntero es una referencia a la dirección de memoria donde se almacena la variable dinámica creada. De hecho, se llama al procedimiento de obtención de un puntero a la variable de clase, en este procedimiento se crea el objeto de clase, se coloca en la memoria, luego se devuelve el puntero a la función de obtención de los ticks y.... se destruye al salir de la función. Tenga en cuenta que el puntero se destruye, pero la memoria no se borra. Y con cada nuevo tick se consume más y más memoria. Para evitar este punto en su código, primero debe eliminar la abreviatura y colocar el puntero en otra variable:TickReturn* temptick =returntick(period, 1);// obtener el puntero y colocarlo en una variable int timeis = temptick.curtime; // Obtener el valor requerido del objeto por el puntero ...... delete temptick; // Destruir el puntero y borrar la memoria

Y antes de destruir el puntero, es mejor comprobar si es correcto para evitar el error de borrado.

En general, no me molestaría con los punteros y la clase en particular, ya que la tarea es mucho más fácil de hecho y no hay necesidad de utilizar la clase. Crea una estructura con los campos necesarios, declara una variable global con el tipo de esta estructura, haz una función que actualice la información de esta estructura en cada tick y úsala para recoger lo que necesites, porque la variable será global, no necesitarás usarla en funciones y no necesitarás punteros.


Gracias, he recordado por qué me he pasado a la taquigrafía, la variable no se actualiza en los bucles (obviamente no se llama a la función) y tengo que hacer una nueva para cada estornudo, y luego matarla. En general, es más fácil cambiar de returntick a switch.

 
Vitaly Muzichenko:

Enviar una post-solicitud al servidor con el número de cuenta

En el servidor, comprueba el número entrante con todas las líneas del archivo CSV, y si hay una coincidencia, entonces desde esta línea del archivo envía una respuesta al terminal. Sólo queda leer la respuesta del servidor en el terminal y mostrarla en el gráfico.

En general, es más fácil implementar este tipo de cosas en MySQL que en un archivo.


Gracias por la respuesta, Vitaly.

Llevo tres días intentando entenderlo, pero no me sale nada (soy principiante - al principio de mi carrera)...

¿Puede describirlo con más detalle? Sólo quería darte un ejemplo...

Perdón por mi falta de comprensión...

 

Y una pregunta más...

Quería que el Rayo dibujara una línea desde el precio actual - hasta el final del día hasta el final del nivel (23:59) (blanco2), pero dibuja hasta el final del día (como se requiere), pero no en el nivel (blanco2), y se adentra en el gráfico del borde.

Y le doy cualquiera de los niveles (rojo1, rojo2, etc.), pero sigue rayando hacia arriba o hacia abajo hasta el infinito. ¿Escribí correctamente para que el Rayo comience siempre desdeHigh[0], es decir, con una nueva vela se desplaza a una nueva vela (es decir, sigue el precio) o dibuja el Rayo sólo una vez? Los niveles se obtienen del CSV. Por favor, ayuda...

if(уровни==Daily)
        {
         double red1 = d_input[0];
         double red2 = d_input[1];
         double blue1 = d_input[2];
         double blue2 = d_input[3];
         double white = d_input[4];
         double signal= d_input[5];
         double z_1 = d_input[6];
         double z_2 = d_input[7];
         double white2 = d_input[8];
                 
         t0 = дата_уровней + 1*PeriodSeconds(PERIOD_M1);
         t1 = дата_уровней + 24*PeriodSeconds(PERIOD_H1);

         Draw_Level("red1", red1, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("red2", red2, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("blue1", blue1, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("blue2", blue2, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("white", white,c_day_3, STYLE_SOLID,2);
         Draw_Level("white2", white2,c_day_3, STYLE_DOT,0);
        
         Draw_Level("green1",z_1, c_day_4, STYLE_SOLID,2);
         Draw_Level("green2",z_2,c_day_3, STYLE_DOT,2);
               
        string name = "Ray";
         int window = 0, time1 = (int)Time[0], time2 = (int)StrToTime(txt_data+" 23:59");
          double price1 = High[0], price2= white2;
         
          ObjectCreate(name, OBJ_TREND, window, time1, price1, time2, price2);
          ObjectSet(name, OBJPROP_COLOR, clrAqua);
          ObjectSet(name, OBJPROP_RAY_RIGHT, false);
          ObjectSet(name,OBJPROP_WIDTH,1);
          ObjectSet(name,OBJPROP_STYLE,2);
              
        
        if(показ_не отработанных)
            if(!check_white_level(дата_уровней,white))
               draw_line(t0,white,c_day_3);
                 else(Draw_Level("white", white,c_day_3, STYLE_SOLID,1));// меняет толщину белой при достижении ценой
                
        }
 
MosheDayan:

Y una pregunta más...

Quería que el Rayo dibujara una línea desde el precio actual - hasta el final del día hasta el final del nivel (23:59) (blanco2), pero dibuja hasta el final del día (como se requiere), pero no en el nivel (blanco2), y se adentra en el gráfico del borde.

Y lo meto en cualquiera de los niveles (rojo1, rojo2, etc.), pero sigue rayando hacia arriba o hacia abajo hasta el infinito. Los niveles se obtienen del CSV. Ayuda, por favor...

Averigua (compruébalo) el valor de white2 con Alert o Print.
 
STARIJ:
Compruebe el valor de white2 mediante Alerta o Impresión.
La alerta escribe inmediatamente "EURUSD ErrorFileOpen() for write" y todos los niveles del día actual desaparecen... Los niveles de ayer y todos los anteriores siguen ahí... Así que... El rayo en el punto comienza donde debe y llega al nivel de blanco2 de ayer, pero no al final del día, y hoy en vertical hacia abajo puedo ver visualmente que se detiene en el nivel de blanco2 de ayer.
 
MosheDayan:
Intenté comprobarlo mediante la Alerta e inmediatamente escribí "EURUSD Error FileOpen() for writing" y todos los niveles del día actual desaparecen... Los niveles de ayer y todos los anteriores siguen ahí... Así que... El rayo en el punto comienza donde debe y llega al nivel del blanco2 de ayer, pero no al final del día, y hoy en vertical hacia abajo se puede ver visualmente que se detiene en el nivel del blanco2 de ayer.

¿Por qué necesita acceder al archivo? Tiene el valor blanco2 y lo emite con Alert("blanco2 = ", blanco2) antes de utilizarlo;

 
STARIJ:

¿Por qué necesita referirse al archivo? Tiene el valor de white2 y lo emite con Alert("white2 = ", white2) antes de usarlo;

Gracias por la aclaración.... Esto es lo que dice: blanco2 = 0,0

p.d. El estúpido soy yo... White2 = 0.0 es para otros pares de divisas que no tienen niveles en CSV. Pero hay niveles para el EURUSD en el CSV y la alerta los muestra ayer (blanco2 1,1720) y hoy (blanco2 1,1810).

El rayo comienza donde debería, pero va al nivel del white2 de ayer a 1,1720, en lugar del white2 de hoy a 1,1810 y no va al final del día 23:59, sino que hoy se detiene en el white2 de ayer, es decir, 1,1720.

 

algo incomprensible

describió una función

int EsBajo

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow");

Alert("NextTick=",NextTick);

//---------------------------


//---------------------------

Alert("NextTick=",NextTick);

Alert("end IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

tiene un mensaje antes del cuerpo expexto con punto y coma {

Pregunta ¿qué punto y coma se espera?

Por favor, explique...

 
buyanov:

algo incomprensible

describió una función

int EsBajo

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow");

Alert("NextTick=",NextTick);

//---------------------------


//---------------------------

Alert("NextTick=",NextTick);

Alert("end IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

tiene un mensaje antes del cuerpo expexto con punto y coma {

Pregunta ¿qué punto y coma se espera?

Por favor, explique...


void IsBelow()

 
buyanov:

algo incomprensible

describió una función

int EsBajo

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow");

Alert("NextTick=",NextTick);

//---------------------------


//---------------------------

Alert("NextTick=",NextTick);

Alert("end IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

tiene un mensaje antes del cuerpo expexto con punto y coma {

Pregunta ¿qué punto y coma se espera?

Por favor, explique...

La respuesta está aquí
Функции - Основы языка - Справочник MQL4
Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Функции - Основы языка - Справочник MQL4