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

 
hamsteruser:

*El returntick tampoco está siendo destruido. Estoy confundido por el escape de la terminal de comercio. Es escribir sobre la memoria no aclarada.


Dame todo el código donde utilizas el puntero devuelto por la función y el momento en que destruyes el puntero. Es muy difícil ayudarte.

 
Anatolij Povoroznyj:

Hola. Por favor, ayúdenme a corregir el código. Necesito que el EA no abra una serie de órdenes, sino una sola orden en el primer evento.

Ahora funciona así: cuando el CCI cruza la línea 200 hacia abajo, esto abre un BAY, luego si el CCI cruza 200 hacia abajo de nuevo, esto abre otro BAY, etc., etc., hasta que el CCI cruza la línea -200 hacia arriba, entonces todos los BAY se cierran y se abre una Venta.

Lo que quiero preguntar: cuando el SSI cruza la línea 200 de arriba a abajo - el primer y único BAI se abre, otros BAI no deberían abrirse hasta que el SSI cruce la línea -200 de abajo a arriba, en este caso el BAI se cierra y se abre una venta. (Espejo de la línea de venta y de la línea de -200).


Añadir una función para comprobar si hay órdenes abiertas del tipo correspondiente. Es decir, si hay órdenes, la función devolverá true y la siguiente orden no se abrirá.

 

Probablemente no sea el punto...

Un deseo en MT4

Utilizo muchas alertas, y todas están configuradas para ciertos parámetros.

Configuro la duración de mis alertas tanto como sea necesario y las resucito a un nuevo precio objetivo.

Dado que el registro de alertas de mi terminal no está ordenado por símbolo o evento, buscar la alerta correcta cada vez es una molestia.

Estaría bien tener opciones de clasificación como en la pestaña "comercio"

 
hamsteruser:

Hay una función con un puntero:


Lo sigo llamando en otra función:


¿Cómo puedo borrar la memoria que hay detrás?

En delete(TickReturn); obtengo un error operand excepted.

TickReturn* rt = returntick( period, 1 );

int timeis = rt.curtime;

delete rt;
 
MMM1972:

Probablemente no sea el punto...

Un deseo en MT4

Utilizo muchas alertas, y todas están configuradas para ciertos parámetros.

Configuro la duración de mis alertas tanto como sea necesario y las resucito a un nuevo precio objetivo.

Dado que el registro de alertas de mi terminal no está ordenado por símbolo o evento, buscar la alerta correcta cada vez es una molestia.

Estaría bien tener opciones de clasificación como en la pestaña "comercio"

El terminal MT4 ya no se desarrolla. Sólo se están corrigiendo los errores encontrados.

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

Da todo el código en el que utilizas el puntero devuelto por la función y el momento en el que destruyes el puntero. Es muy difícil ayudarte.

El recuerdo es realmente fluido.

  class TickReturn

   {

   public:

      int curtime;

      double open;

      double close;

      double high;

      double low;

      double priceask;

      double pricebid;

      

   };



  TickReturn *returntick(int period, int timeposition)

   {

      TickReturn *returntick = new TickReturn();

      MqlRates rates[];

      MqlTick last_tick;

      

      if(SymbolInfoTick(symbol,last_tick)){}

      else Print("SymbolInfoTick() failed, error = ",GetLastError());

      

      //int timeposition=0;

      ArraySetAsSeries(rates,true);

      ArrayResize(rates,1);

      int copied=CopyRates(symbol,period,timeposition,1,rates);

      

      returntick.curtime = rates[0].time;

      returntick.open = rates[0].open;

      returntick.close = rates[0].close;

      returntick.high = rates[0].high;

      returntick.low = rates[0].low;

      returntick.priceask = last_tick.ask;

      returntick.pricebid = last_tick.bid;

      

      return(returntick);

}

void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); Вот здесь пытаюсь уничтожить указатель. }

 
hamsteruser:

El recuerdo es realmente fluido.


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. Esencialmente, 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 recoge de ella lo que necesites, porque la variable será global, no necesitarás ejecutarla a través de funciones y no necesitarás punteros.

 

1.¿Es posible utilizar mql4 para desactivar otros EAs?

2. Para comprobar si hay un Asesor Experto ejecutándose en un ChartId dado?

 
Sergey Likho:

1.¿Es posible utilizar mql4 para desactivar otros EAs?

2. ¿Comprobar si hay un Asesor Experto funcionando en un ChartId dado?


Es posible desactivar el comercio dentro del código del EA, y hacer un cambio en un archivo externo, entonces otro EA será capaz de informar a cualquier EA que el comercio ya no es necesario.

 
Aleksey Vyazmikin:

Puede prohibir el comercio dentro del código del EA, y hacer el cambio en el archivo externo, entonces otro EA podrá decirle a cualquier EA que el comercio ya no es necesario.


La idea es exactamente que el EA A desactive el EA B por condición.

Razón de la queja: