Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 722

 
Zver4991:
¿hay reglas de código?

Por supuesto, ¡y no sólo el código!

https://forum.mql4.com/ru/38943

 
No puedo entender por qué se cuelga
//+------------------------------------------------------------------+
//|                     Машка за больший период без перерисовки .mq4 |
//|                                                             Zver |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Zver"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Aqua
extern int Otobrajat_v_istorii = 1000;
extern int ma_shift=0;
extern int ma_method =0;
extern int applied_price=0;


double buf_ma[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
     SetIndexBuffer(0,buf_ma);         // Назначение массива буферу
   SetIndexStyle(0,DRAW_LINE,EMPTY,2);// Стиль линии
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---

   int i,// Индекс бара
   Counted_bars;
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if(i>Otobrajat_v_istorii-1) // Если много баров то ..
      i=Otobrajat_v_istorii-1;                  // ..рассчитывать заданное колич.
     
   while(i>=1) // Цикл по непосчитанным барам
     {

    
     buf_ma[i]=iMA(Symbol(),Period(),5,ma_shift,ma_method,applied_price,i);
  
     
     }
   
   
   
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
Variante de código
int Err;   //Номер ошибки
int FunErr(int Err) // Функция обработки ошибок
da una advertencia:
la declaración de 'Err' oculta la declaración global en la línea 51
Otra variante de código
int Err;   //Номер ошибки
int FunErr(Err) // Функция обработки ошибок
da un error:
'Err' - declaración sin tipo
¿Cómo se escribe correctamente?
 
Zver4991:
No puedo entender por qué se cuelga
int i// Índice de barras
while(i>=1) // Recorre las barras no contadas
i>=1siempre.
 
Shurkin:
int i// Índice de barras
while(i>=1) // Bucle sobre las barras no contadas
i>=1siempre.

Cierto, me olvidé de... gracias.

i--;

 
//--------------------------------------------------------------------
int Count=0;                                    
//--------------------------------------------------------------------
void OnTick()   
  {
   Count++;
   Comment("Новый тик ", Count);
   //if(Count>2) ExpertRemove();
  }
//--------------------------------------------------------------------
void OnDeinit(const int reason)
  {
   Comment("Сработала ф-ия deinit() при выгрузке");
  }
//--------------------------------------------------------------------

Si al descomentar if(Count>2) ExpertRemove(), y salir por esta función, entoncesdespués de la descarga del EA, el comentario "Deinit() disparado durante la descarga" permanece mostrado en el gráfico.

¿Alguien sabe por qué, si dicho EA se elimina del gráfico a través del menú contextual, entonces Comment() de OnDeinit no permanece en el gráfico?

 

Shurkin:

Variante de código
int Err;   //Номер ошибки
int FunErr(int Err) // Функция обработки ошибок
da una advertencia:
la declaración de 'Err' oculta la declaración global en la línea 51
Otra variante de código
int Err;   //Номер ошибки
int FunErr(Err) // Функция обработки ошибок
da un error:
'Err' - declaración sin tipo
¿Cómo se escribe correctamente?

Esto es un error de diseño del lenguaje en general, defendido al más alto nivel. Dos hechos:

1. El lenguaje MQL4++ permite ocultar los nombres de las variables en ámbitos anidados.

2. Cuando se ocultan los nombres de las variables en los ámbitos anidados, debe haber una advertencia, que no se puede desactivar.

Para responder a la pregunta, hay al menos dos posibilidades:

1. Utilizar la ocultación de nombres, pero aguantando la presencia de una advertencia (malo, podría pasar por alto otra advertencia realmente importante entre las muchas advertencias sobre la ocultación de nombres que podría ayudar a detectar y eliminar un posible error).

2. No utilice la ocultación de nombres, aunque el idioma disponga de esta función. Por ejemplo, nombre la variable global gErr en lugar de Err.

En lugar de prohibir la ocultación de nombres, se introduce una advertencia no removible. Aprovéchalo.

 

En ruso: la opción correcta es la primera, ignorar las advertencias.

 
tara:

En ruso: la opción correcta es la primera, ignorar las advertencias.

Gracias.
 
¿Dónde puedo encontrar las descripciones de las funciones en los archivos de inclusión?