Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 722

 
Zver4991:
а есть правила кода?

Конечно, и не только кода!

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

 
почему виснет не могу понять
//+------------------------------------------------------------------+
//|                     Машка за больший период без перерисовки .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);
  }
//+------------------------------------------------------------------+

 
Вариант кода
int Err;   //Номер ошибки
int FunErr(int Err) // Функция обработки ошибок
даёт предупреждение:
declaration of 'Err' hides global declaration at line 51
Другой вариант кода
int Err;   //Номер ошибки
int FunErr(Err) // Функция обработки ошибок
даёт ошибку:
'Err' - declaration without type 
Как здесь написать правильно?
 
Zver4991:
почему виснет не могу понять
int i// Индекс бара
while
(i>=1) // Цикл по непосчитанным барам
i>=1 всегда.
 
Shurkin:
int i// Индекс бара
while
(i>=1) // Цикл по непосчитанным барам
i>=1 всегда.

 

точно забыл про...спс 

i--;

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

Если раскомментировать  if(Count>2) ExpertRemove(), и выход происходит по этой функции, тогда после выгрузки советника, комментарий "Сработала ф-ия deinit() при выгрузке" остается отображенным на графике.

 Кто-нибудь знает почему, если такой советник удалить с графика через контестное меню, то Comment() из OnDeinit на графике не остается?

 

Shurkin:

Вариант кода
int Err;   //Номер ошибки
int FunErr(int Err) // Функция обработки ошибок
даёт предупреждение:
declaration of 'Err' hides global declaration at line 51
Другой вариант кода
int Err;   //Номер ошибки
int FunErr(Err) // Функция обработки ошибок
даёт ошибку:
'Err' - declaration without type 
Как здесь написать правильно?

Это ошибка дизайна языка в целом, защищаемая на самом высоком уровне. Два факта:

1. Язык MQL4++ позволяет иметь сокрытие имён переменных во вложенных областях видимости.

2. При сокрытии имён переменных во вложенных областях видимости в обязательном порядке выдаётся предупреждение, которое нельзя отключить.

Отвечая на вопрос, могу сказать, что возможны не менее двух вариантов:

1. Используйте сокрытие имён, но миритесь с наличием предупреждений (плохо, можно не заметить среди множества предупреждений о сокрытии имён действительно важное другое предупреждение, которое могло бы помочь обнаружить и устранить потенциальную ошибку).

2. Не используйте сокрытия имён, несмотря на то, что в языке такая возможность имеется. Например, назовите глобальную переменную gErr, а не Err.

Вместо запрещения сокрытия имён, введено неубираемое предупреждение. Пользуйтесь.

 

По-русски: правильный вариант - первый, на предупреждения забейте. 

 
tara:

По-русски: правильный вариант - первый, на предупреждения забейте. 

 

Спасибо.
 
можна ли где посмотреть описания функций в инклюд файлах?