Errores, fallos, preguntas - página 541

 
220Volt:

Para no ser infundado, he simulado la situación de la que hablaba más arriba (no puedo citarlo porque no puedo salir del quote :) ).

He ejecutado el siguiente código en M15:

Mientras se ejecutaba el script me conecté y desconecté de Internet. Las imágenes muestran el resultado.

Ya veo. Lo corregiremos.
 

¿Está en servicedesk o es un error en el código?

El indicador debe construir niveles de 5 puntos desde el precio de cierre hacia abajo en rojo.

Pero sólo se muestran dos buffers (aunque los cuenta todos) y no en rojo, sino en verde (después de la compilación en negro).

Por favor, compruebe si es sólo yo o si es sólo yo en general...


#define  N      5
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   5
#property indicator_color1 clrRed
#property indicator_color2 clrRed
#property indicator_color3 clrRed
#property indicator_color4 clrRed
#property indicator_color5 clrRed

#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3

#property indicator_type1 DRAW_COLOR_ARROW
#property indicator_type2 DRAW_COLOR_ARROW
#property indicator_type3 DRAW_COLOR_ARROW
#property indicator_type4 DRAW_COLOR_ARROW
#property indicator_type5 DRAW_COLOR_ARROW

//------------------------------------------------------------------    class CClrHist
class CClrHist
{
public:
        double buf[];
        CClrHist() { };
};

CClrHist bufs[N]; // массив буферов

//------------------------------------------------------------------    OnInit
int OnInit()
{
        for (int i=0; i<N; i++) SetIndexBuffer(i, bufs[i].buf, INDICATOR_DATA);
        return(0);
}
//------------------------------------------------------------------    OnCalculate
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
        for (int i=0; i<N; i++) for (int j=rates_total-1; j>=0; j--)
        {
                bufs[i].buf[j]=close[j];
                bufs[i].buf[j]-=i*100*Point();
        }
        return(rates_total);
}
 
sergeev:

¿Está en servicedesk o es un error en el código?

El indicador debe construir niveles de 5 puntos desde el precio de cierre hacia abajo en rojo.

Pero sólo se muestran dos buffers (aunque los cuenta todos) y no en rojo, sino en verde (después de la compilación en negro).

Por favor, compruebe si es sólo yo o si es sólo yo en general...

#property indicator_type1 DRAW_ARROW
#property indicator_type2 DRAW_ARROW
#property indicator_type3 DRAW_ARROW
#property indicator_type4 DRAW_ARROW
#property indicator_type5 DRAW_ARROW
 
masharov:

...creo que las bibliotecas estándar son un código ideal que debería servir de modelo para los demás.

Sólo puedo decir que sería deseable deshacerse de esas nociones lo antes posible.

No tengo nada en contra de las bibliotecas estándar, pero ¿confiar en el código de otra persona "para facilitar la escritura de programas" sin verificarlo? - Salvo en la fase de redacción inicial de un peritaje. Para acelerar los procesos rutinarios, por así decirlo.

 

En mi cuaderno de bitácora aparece con bastante frecuencia el mensaje: Terminación anormal. ¿Alguien se ha dado cuenta de cuándo puede haber un conflicto de este tipo?

Todavía no puedo encontrar la causa. Lo único que puedo decir es que si dejo el terminal inactivo durante un rato o simplemente utilizo otro programa en ese momento (por ejemplo, Excel), el Asesor Experto que estoy probando empieza a funcionar incorrectamente después de volver al terminal. Es decir, las operaciones comerciales se realizan sin problemas. El único problema está en la interacción con los paneles de comercio e información. Parece que OnChartEvent() tiene fallos. El cambio entre los paneles empieza a ser muy lento, como si el proceso estuviera muy ocupado con otra cosa. No uso bucles eternos. También la carga de la CPU en este momento no indica que algo se utilice activamente. La recompilación del Asesor Experto ayuda. En el momento de la recompilación, antes de que se desinicialice el EA, aparece en el diario el mensajeTerminación anormal. Entonces el programa se inicializa con éxito y todo empieza a funcionar como un reloj.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
tol64:

En mi cuaderno de bitácora aparece con bastante frecuencia el mensaje: Terminación anormal. ¿Alguien se ha dado cuenta de cuándo puede haber un conflicto de este tipo?

Todavía no puedo encontrar la causa. Lo único que puedo decir es que si dejo el terminal inactivo durante un rato o simplemente utilizo otro programa en ese momento (por ejemplo, Excel), el Asesor Experto que estoy probando empieza a funcionar incorrectamente después de volver al terminal. Es decir, las operaciones comerciales se realizan sin problemas. El único problema está en la interacción con los paneles de comercio e información. Parece que OnChartEvent() tiene fallos. El cambio entre los paneles empieza a ser muy lento, como si el proceso estuviera muy ocupado con otra cosa. No uso bucles eternos. También la carga de la CPU en este momento no indica que algo se utilice activamente. La recompilación del Asesor Experto ayuda. En el momento de la recompilación, antes de que se desinicialice el EA, aparece en el diario el mensajeTerminación anormal. Entonces el programa se inicializa con éxito y todo empieza a funcionar como un reloj.

¿Utilizamos IsStopped() en los bucles?

Puede leer sobre estos problemas aquí, aquí y aquí. También hay que pensar en qué parte del código hay "cuellos de botella"...

Según tengo entendido, este error se produce en caso de terminación "temprana" del programa (cuando se cierra el gráfico/terminal o cuando se recompila EA), y durante este proceso se realiza algún trabajo por parte de EA.

 
Interesting:

¿Utilizamos IsStopped() en los bucles?

Lea sobre problemas similares aquí, aquí y aquí. Piensa también en los cuellos de botella del código...

Según tengo entendido, este error se produce en el caso de la terminación "temprana" de un programa (cuando se cierra el gráfico/terminal o se recompila el Asesor Experto), mientras el Asesor Experto realiza algún trabajo.

Gracias. Los enlaces muestran la misma situación. Nunca uso IsStopped() en los bucles, sólo break, continue y return.

Hasta ahora, no he visto ninguna conexión entreIsStopped() y la ralentización del programa. Al fin y al cabo, si el programa se congelara, no se realizaría ninguna otra operación. ¿O me equivoco?

Una cosa más.IsStopped() es útil cuando se necesita detener la ejecución de un programa a la fuerza, por ejemplo, para cerrar el terminal o eliminar el Asesor Experto del gráfico. Y necesito seguir usando el Asesor Experto.

 
tol64:

Gracias. Los enlaces muestran la misma situación. No uso IsStopped() en los bucles en ninguna parte, sólo break, continue y return.

Hasta ahora, no he visto ninguna relación entreIsStopped() y la ralentización del programa. Si el programa se congelara, no se realizaría ninguna otra operación. ¿O me equivoco?

Una cosa más.IsStopped() es útil cuando se necesita detener la ejecución de un programa a la fuerza, por ejemplo, para cerrar el terminal o eliminar el Asesor Experto del gráfico. Y necesito seguir utilizando el Asesor Experto.

IsStopped(), se trata del error. Ni siquiera se adivina por qué se ralentiza el terminal/experto (no se conocen las condiciones de ejecución, tampoco nada sobre el Asesor Experto).
 
tol64:

En mi cuaderno de bitácora aparece con bastante frecuencia el mensaje: Terminación anormal. ¿Alguien se ha dado cuenta de cuándo puede haber un conflicto de este tipo?

Todavía no puedo encontrar la causa. Lo único que puedo decir es que si dejo el terminal inactivo durante un rato o simplemente utilizo otro programa en ese momento (por ejemplo, Excel), el Asesor Experto que estoy probando empieza a funcionar incorrectamente después de volver al terminal. Es decir, las operaciones comerciales se realizan sin problemas. El único problema está en la interacción con los paneles de comercio e información. Parece que OnChartEvent() tiene fallos. El cambio entre los paneles empieza a ser muy lento, como si el proceso estuviera muy ocupado con otra cosa. No uso bucles eternos. También la carga de la CPU en este momento no indica que algo se utilice activamente. La recompilación del Asesor Experto ayuda. En el momento de la recompilación, antes de que se desinicialice el EA, aparece en el diario el mensajeTerminación anormal. Entonces el programa se inicializa con éxito y todo empieza a funcionar como un reloj.

Laterminación anormal significa que se ha interferido con el programa de forma no natural, es decir, recompilándolo en tiempo de ejecución, lo que lleva a la interrupción y reinicialización del programa.

Lo mismo ocurre si se produce una división por cero o se interrumpe el programa en tiempo de ejecución, pero si el programa se vuelve a poner en marcha, no se producirá dicha entrada. Por eso se aconseja comprobar IsStopped para que el programa pueda salir por su propio retorno en lugar de ser forzado a hacerlo.

 

¿Hay algún plan para añadir los siguientes elementos?

Haga doble clic en una posición del gráfico para que aparezca el menú de gestión de posiciones.

Resaltar varias posiciones para cerrarlas a la vez

????

Gracias.

Razón de la queja: