Errores, fallos, preguntas - página 1499

 
Alexey Kozitsyn:
El camino al infierno de la programación está pavimentado convariables globales" (Steve McConnell)
Sólo se muestra un ejemplo de la ausencia de esta advertencia. Crear una variable como global o local es una cuestión de gusto y experiencia del programador.
 
Ilyas:
Se añadirá una advertencia sobre el no uso real de las variables locales y globales (de tipo simple o "complejo" sin constructores), pero la prioridad de esta tarea es baja.
Entendido, gracias. Por si acaso, intentaré llamar la atención de los desarrolladores aquí.
 
Alexey Kozitsyn:
Una activación por PC. No importa el número de terminales que haya.
¿Hay alguna confirmación en algún sitio?
 
Vladimir Pastushak:
¿Hay alguna confirmación en algún sitio?

El Comprador adquiere el derecho de activar el Producto tantas veces como especifique el Vendedor en el momento de la compra o alquiler del Producto. Por ejemplo, si se permiten 20 activaciones para el Producto en el momento de la compra, el Comprador podrá instalarlo en 20 configuraciones de hardware diferentes, incluso si el Vendedor reduce posteriormente este número.

https://www.mql5.com/ru/market/rules

Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
  • www.mql5.com
Общие положения и правила пользования сервисом Market
 
Este post reduce automáticamente la resolución de la imagen hasta 6 veces el tamaño (bytes) del original. ¿Por qué?
 
Alexey Kozitsyn:
Slawa, buenas tardes, ¿puedes comentar algo sobre la biblioteca (pregunta anterior)?

Esa es la forma de arreglarlo.

long CChart::Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe)
  {
   m_chart_id=ChartOpen(symbol_name,timeframe);
   if(m_chart_id==0)
      m_chart_id=-1;
   return(m_chart_id);
  }
 
Slawa:

Esa es la manera de arreglarlo

Sí, gracias, es óptimo. Para la biblioteca. ¿Qué pasa con el error 4024?
 
Slawa:

Esa es la forma de arreglarlo.

¿Qué sentido tiene hacer esto? La biblioteca estándar no debe utilizarse a gusto del usuario, sino en estricta conformidad con la ideología de su estructura.Alexey Kozitsyn lo utiliza de forma incorrecta y por eso tiene muchos fallos en la salida. Sólo tiene que adjuntar el gráfico al objeto de la clase utilizando el método Attach después de haber creado el objeto CCart. Este método está sobrecargado y puede adjuntar tanto el gráfico actual como el necesario. Su cambio en el método de apertura acabará con la posibilidad de trabajar con el gráfico actual.

Y la petición a los desarrolladores de la biblioteca estándar - por favor, hacer una descripción de la estructura de la biblioteca. Muchos no lo entienden y empiezan a cometer errores, y tú vas con ellos, empiezas a romper todo lo que se ha hecho.

 
Alexey Kozitsyn:

Pregunta sobre la biblioteca estándar de MT4.

Archivo Chart.mqh

Quiero abrir el gráfico. Utilizo el método Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe).

1. Si utiliza un símbolo no disponible, la función ChartOpen() devolverá el error #4024 - error interno. Sin duda, el error puede ser interno, pero hay un código de error mucho más exacto - #4106 - un símbolo desconocido. ¿Tal vez deberíamos cambiar el código de error devuelto? Ya que el 4024 no indica al desarrollador nada sobre dónde buscar el error.

2. En caso de fallo, ChartOpen() asigna el valor 0 al campo m_chart_id, es decir, resulta que empezamos a trabajar con el gráfico actual, pero esto no es correcto, porque hemos fallado al abrir el gráfico que necesitamos para trabajar. En consecuencia, si no llamamos al método Detach(), el gráfico actual simplemente se cerrará después del trabajo. También creo que este no es el enfoque correcto. Es mejor que la función ChartOpen() devuelva -1 en caso de error.

¡¡¡Antes de trabajar con un gráfico, es necesario adjuntarlo a un objeto de clase mediante el método Attach !!! Si no quiere trabajar con el gráfico actual ( 0 ) entonces implemente esta comprobación y prohíba el uso del gráfico actual en su trabajo.

¿Y qué significa trabajar con el gráfico y no cerrarlo utilizando el método Detach para salir? ¿Es realmente difícil escribir una línea en el destructor de tus clases o en OnDeinit? El trabajo con los objetos debe estar estrictamente controlado, para evitar errores.

 
coderex:

¿Qué sentido tiene hacer esto? La biblioteca estándar debe utilizarse no como el usuario quiere, sino en estricta conformidad con la ideología de su estructura.Alexey Kozitsyn no lo utiliza correctamente y por eso tiene muchos fallos en la salida. Sólo tiene que adjuntar el gráfico al objeto de la clase utilizando el método Attach después de haber creado el objeto CCart. Este método está sobrecargado y puede adjuntar tanto el gráfico actual como el necesario. Su cambio en el método Open acabará con la posibilidad de trabajar con el gráfico actual.

Y la petición a los desarrolladores de la biblioteca estándar - por favor, hacer una descripción de la estructura de la biblioteca. Mucha gente no lo entiende y empieza a cometer errores, y tú les sigues la corriente y empiezas a romper todo lo que has hecho.

He escrito claramente más arriba cuál es el sentido de hacerlo. Si hay un error al abrir el gráfico (por ejemplo, si se establece un símbolo no válido), entonces, por analogía con el método Attach(void), el método Open() vinculará el identificador actual del gráfico al objeto. ¿Por qué debería hacerlo? Si quiero trabajar con el gráfico actual, llamaré al método Attach(void) { m_chart_id=ChartID(); } y listo. Pero aquí tengo una situación evidentemente errónea en la que por alguna razón empiezo a trabajar con lo que no es. En general, es un problema de la propia función ChartOpen(), pero ya que no la cambian, al menos que la cambien en la biblioteca.

Otro argumento. Por favor, piense con lógica. El método se llama Open(). Implica que se abrirá algo nuevo. Y empezaremos a trabajar con este nuevo elemento. Pero aquí parece que estamos trabajando con el antiguo. No veo ninguna lógica. Y usted parece utilizar esta inexactitud para sus propios fines.

Este método está sobrecargado y puede vincular tanto el gráfico actual como el necesario. Y su cambio en el método Open acabará con la posibilidad de trabajar con el gráfico actual.

¿Qué va a matar? Seguirá teniendo el método Attach(), seguirá haciendo lo que estaba haciendo. Como has dicho, comprueba el ID de retorno de la función Open() y si es menor que 0, llama al método Attach(void). Eso es todo. No entiendo por qué hay que hacer tanto lío, si basta con llamar al método Attach(void) y adjuntar el gráfico actual.

Tal vez no te entienda. Entonces dame un ejemplo.

Por favor, pida también a los desarrolladores de la biblioteca estándar que hagan una descripción de la estructura de la biblioteca. Mucha gente no lo entiende y empieza a cometer errores, y tú les sigues la corriente y empiezas a romper todo lo que has hecho.

Qué declaración tan fuerte... No pienses que eres más inteligente que los demás, puede que no lo seas.
Razón de la queja: