Errores, fallos, preguntas - página 1520

 
Slawa:

Todavía no hay otra manera.

Hemos discutido la introducción de un nuevo comando de salida que terminaría inmediatamente el programa, pero hay problemas no resueltos aquí

Es una pena. Sí, un exit() como en C++ estaría bien. Hoy en día, arrastrar la respuesta de las funciones anidadas al llamador es bastante problemático. Y no hay bibliotecas universales.
 
Alexey Kozitsyn:
Es una pena. Sí, un exit() como en C++ estaría bien. Hoy en día, llevar la respuesta de las funciones anidadas a la que llama es bastante problemático. Y no hay bibliotecas universales.
Otra forma es crear una función que elimine todos los objetos de un programa por separado y llamarla cuando se cumpla la condición de eliminar el programa del terminal, seguida deExpertRemove(), en este caso todo debería terminar más rápido... aunque no es seguro :)
 
coderex:
Alternativamente, puedes crear una función separada para borrar todos los objetos del programa y llamarla cuando se cumpla la condición de borrar el programa de la terminal, seguida deExpertRemove(), en este caso debería terminar más rápido... aunque no es seguro :)

Como he escrito antes, y se sugirió antes en un artículo en este sitio, en caso de un error en una función anidada profunda, puede llamar a la división por 0 o salir fuera de la matriz. Pero no es agradable.

Sí, y no es sólo en OOP (por lo que entendí, te refieres a ello). Sencillamente, si un error no se puede arreglar, el programa se terminará.

 
Slawa:
Se detiene, pero no inmediatamente
No entiendo, ¿es correcto trabajar con ExpertRemove() en los indicadores o no?
 
Alexey Kozitsyn:
No entiendo, ¿es correcto trabajar con ExpertRemove() en los indicadores o no?

Creo que hay una función para los indicadores, o ya no es relevante

ChartIndicatorDelete();
 
Alexey Kozitsyn:
No entiendo, ¿es correcto trabajar con ExpertRemove() en los indicadores o no?

No. ExpertRemove() se superpone en los indicadores.

"Se detiene, pero no inmediatamente" se dice de ExpertRemove en general. Esta función no interrumpe el funcionamiento del programa.

 
Slawa:

No. ExpertRemove() se superpone en los indicadores.

"Se detiene, pero no inmediatamente" se dice de ExpertRemove en general. Esta función no interrumpe el funcionamiento del programa.

En general, ¿hay algún plan para resolver el problema con exit()? ¿O los usuarios lo solucionan con muletas?)
 
Slawa:
Por favor, ponga un ejemplo. Proporcione el código fuente del indicador para ilustrar el problema
Inserta el texto en el OnCalculate del indicador por defecto creado en el redactor. Colóquelo en cualquier gráfico. Verá el funcionamiento del indicador en la esquina superior izquierda de la ventana del gráfico. Después de seleccionar "Eliminar" de la lista de indicadores, no dejará de funcionar, lo verás en la esquina superior izquierda. Continuará incluso después de cerrar la ventana. Después de abrir una nueva ventana, continuará en la nueva ventana. Esta ventana no tiene por qué tener el mismo símbolo que la que tenías al principio :)
El trabajo del indicador se detiene sólo cuando se cierra el terminal. Y no sé si se detiene o no - sólo tuve que quitar manualmente el terminal a través del Administrador de Tareas para reiniciarlo...

Al mismo tiempo, la ayuda de la función IsStopped dice que la operación del programa se detiene después de 3 segundos si hay un comando para terminar un programa mql.

   int i=0;
   while(true){
      Comment(i++);
      Sleep(100);
   }

Y si se sustituye while(true) por while(!IsStopped()), el indicador se completa con éxito cuando se elimina del gráfico.

 

Una razón divertida para el error interno del compilador (función utilizada en el indicador):

void SaveData ( uint handle_, int wrdata_, int interv_, string dpath_, int tmode_, int tmult_, long ctime_, long& ltime_ )
{
int ierr, wrtint;
// ----
if ( interv_ > 0 ) // modo de trabajo
{
if ( MQLInfoInteger ( MQL_TESTER ) == 0 ) { wrtint = interv_; } // no tiene ningún significado
si no{ wrtint = interv_ * tmult_; } // no importa
//
if ( ( ctime_ - ltime_ ) >= ( wrtint * 60 ) ) // si se comenta esta línea, el error desaparecerá
{
// algo de código para guardar los datos ... no tiene ningún significado - probado
//
ltime_ = ctime_; // en general tampoco importa
} // si ( ( ctime_ - ltime_ ) >= ( wrtint * 60 )
} // si ( interv_ > 0 )
// ----
volver;

} // void GuardarDatos

( Lo siento, no he utilizado el botón SRC intencionadamente, porque no puedo seleccionar las partes necesarias del texto con él )

El remedio es obvio, pero deberías estar de acuerdo: es un fallo bastante divertido. :)))

 

Una empresa de corretaje tiene una comisión de 16x2 dólares para una facturación de 1 millón. Al parecer, han establecido una comisión de 16 dólares en la configuración del servidor. Y ahora durante la prueba en su servidor la comisión 16x2 se deduce de cada transacción independientemente de su tamaño de lote, es decir, la prueba adecuada se puede hacer sólo con 10 lotes.

¿Es su falta de habilidad para configurar los servidores o una limitación real de MT5? ¿Qué puedo aconsejarles que hagan en los servidores para que la comisión se procese correctamente en el probador?