Errores, fallos, preguntas - página 1697

 
Karputov Vladimir:
Print(MQLInfoString(MQL_PROGRAM_NAME)); devuelve el nombre corto del indicador. Si no se especifica un nombre corto, se devolverá el nombre completo.
Gracias.
 
Vladimir Pastushak:

Gracias.

Alexey, tu ejemplo no funciona, los métodos del padre se siguen volcando en el heredero, que no debería ser volcado.


No debería ser así, ¿puedes tirar el código?

Aquellos datos que estaban protegidos y eran públicosen el padre serán protegidos en la herencia protegida.

	          
 
  1. Fijamos el indicador en un gráfico NONE con nuestras manos
    #property indicator_separate_window
    #property indicator_buffers 1
    #property indicator_plots   1
    
    double Buffer[];
    
    int handle = INVALID_HANDLE;
    
    void OnInit()
    {
      ::SetIndexBuffer(0, Buffer, INDICATOR_DATA);
      
      handle = ChartIndicatorGet(0, 1, ChartIndicatorName(0, 1, 0));  
    }
    
    #define  TOSTRING(A) #A + " = " + (string)A + "\n"
    
    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[] )
    {
      if (handle != INVALID_HANDLE)
      {
        Buffer[rates_total - 1] = MathRand();
        
        double BufferCopy[];
        
        if (CopyBuffer(handle, 0, 0, 1, BufferCopy) > 0)
          Print(TOSTRING(BufferCopy[0]) + TOSTRING(Buffer[rates_total - 1]));
      }
      
      return(rates_total);
    }
  2. Retire el indicador del gráfico con la mano.
  3. En el registro vemos que el indicador sigue funcionando. Puedes cerrar todos los gráficos en el terminal, pero seguirá ejecutándose. Y no servirá de nada, por supuesto,
    void OnDeinit( const int Reason )
    {
      if (handle != INVALID_HANDLE)  
        IndicatorRelease(handle);
      
      return;
    }
  4. Al reiniciar el terminal se detiene la ejecución del indicador.
  5. ¿Cuántos indicadores pueden estar inactivos y ni siquiera los conocemos? No hay ningún tipo de control.
 
fxsaber:
  1. Fijación manual del indicador NULL en el gráfico
  2. Retire el indicador del gráfico con la mano.
  3. En el registro vemos que el indicador sigue funcionando. Puedes cerrar todos los gráficos en el terminal, pero se seguirá ejecutando.
  4. El reinicio del terminal detiene la ejecución del indicador.
  5. ¿Cuántos indicadores pueden estar inactivos y no hemos sabido nada de ellos? No hay ningún tipo de control.

Es imposible leer y revisar los códigos con#define y con ::

Por favor, reescriba los códigos en el estilo de MQL5 común.

 
fxsaber:
  1. Fijación manual del indicador NULL en el gráfico
  2. Retire el indicador del gráfico con la mano.
  3. En el registro vemos que el indicador sigue funcionando. Puedes cerrar todos los gráficos en el terminal, pero se seguirá ejecutando.
  4. El reinicio del terminal detiene la ejecución del indicador.
  5. ¿Cuántos indicadores pueden ejecutarse en modo inactivo y ni siquiera hemos oído hablar de ellos? No hay ningún tipo de control.
¿Añadir la comprobación _StopFlag no ayuda?
 
Karputov Vladimir:

Es imposible leer y ver los códigos con#define y con ::

Por favor, reescriba los códigos en el estilo común de MQL5.

Este es el estilo MQL5. Por favor, estudie lo que es #define y lo que es ::.
 
Alexey Kozitsyn:
¿Añadir una comprobación _StopFlag no ayuda?
Dónde añadirlo y cómo puede ayudar, al menos teóricamente, a la población. Esto es un error del terminal. Y es un error grave. He tenido suerte: veo en el registro que el indicador funciona. Sin embargo, hay muchos indicadores que funcionan en el terminal sin ninguna información sobre ellos. Pero el tema sale a relucir, ¿y por qué mi CPU está tan cargada en un terminal vacío?
 
fxsaber:
Este es el estilo de MQL5. Por favor, estudie lo que es #define y lo que es ::.
No me refiero a eso. El "::" no es necesario en absoluto en tus ejemplos - tal vez sea tu costumbre, pero no es necesario allí en absoluto. El código puede ser escrito normalmente sin #defane también. Intenta reescribirlo y ver si algo se aclara.
 
Karputov Vladimir:
No me refiero a eso. "::" no es necesario en absoluto en sus ejemplos - tal vez es su costumbre, pero no es necesario allí en absoluto. El código se puede escribir perfectamente sin #defane. Intenta reescribirlo y ver si algo se aclara.

Sólo tenía "::" en un lugar. Y no escribo códigos desde cero. Por regla general, saco algo de mis códigos. Aquí está ::: había uno a través de copiar-pegar. Nunca le había prestado atención pero lo he quitado ya que te hace sentir mucho mejor.

Pero no es una cuestión de principios el no eliminar #define. El 99% del código se puede escribir sin él. Esta no es una ocasión para quitarla.

¡Y hay un 1% (relativamente) en el que no se puede prescindir de #define!

 
fxsaber:

Sólo tenía "::" en un lugar. Y no escribo códigos desde cero. Por regla general, saco algo de mis códigos. Aquí está ::: había uno a través de copiar-pegar. Nunca le había prestado atención pero lo he quitado ya que te hace sentir mucho mejor.

Pero no es una cuestión de principios el no eliminar #define. El 99% del código se puede escribir sin él. Esta no es una ocasión para quitarla.

¡Y hay un 1% (condicionado) en el que no se puede prescindir de #define!

Si no copias el buffer:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

double Buffer[];

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   SetIndexBuffer(0,Buffer,INDICATOR_DATA);

   handle=ChartIndicatorGet(0,1,ChartIndicatorName(0,1,0));
  }

#define  TOSTRING(A) #A + " = " + (string)A + "\n"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
  {
   if(handle!=INVALID_HANDLE)
     {
      Buffer[rates_total-1]=MathRand();

      double BufferCopy[];
      Print(__FUNCTION__);
      //if(CopyBuffer(handle,0,0,1,BufferCopy)>0)
      //   Print(TOSTRING(BufferCopy[0])+TOSTRING(Buffer[rates_total-1]));
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int Reason)
  {
   Print("#1 OnDeinit");
   if(handle!=INVALID_HANDLE)
     {
      Print("#2 OnDeinit");
      IndicatorRelease(handle);
      Print("#3 OnDeinit");
     }
   Print("#4 OnDeinit");
   return;
  }
//+------------------------------------------------------------------+

entonces el indicador completa su trabajo con éxito

2016.09.23 12:11:12.655 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:12.737 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:12.737 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:12.737 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:12.747 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:13.406 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:13.406 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:13.406 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:14.794 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:15.747 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:16.936 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:11:19.339 2 (SBRF-12.16,M1)       #1 OnDeinit
2016.09.23 12:11:19.339 2 (SBRF-12.16,M1)       #2 OnDeinit
2016.09.23 12:11:19.339 2 (SBRF-12.16,M1)       #3 OnDeinit
2016.09.23 12:11:19.339 2 (SBRF-12.16,M1)       #4 OnDeinit