Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 722

 
Zver4991:
ci sono delle regole del codice?

Certo, e non solo il codice!

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

 
Non riesco a capire perché si blocca
//+------------------------------------------------------------------+
//|                     Машка за больший период без перерисовки .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 di codice
int Err;   //Номер ошибки
int FunErr(int Err) // Функция обработки ошибок
dà un avvertimento:
la dichiarazione di 'Err' nasconde la dichiarazione globale alla linea 51
Un'altra variante di codice
int Err;   //Номер ошибки
int FunErr(Err) // Функция обработки ошибок
dà un errore:
'Err' - dichiarazione senza tipo
Come scriverlo correttamente?
 
Zver4991:
Non riesco a capire perché si blocca
int i// Indice delle barre
while(i>=1) // Ciclo di barre non contate
i>=1sempre.
 
Shurkin:
int i// Indice delle barre
while(i>=1) // Loop over uncounted bars
i>=1sempre.

Giusto, mi ero dimenticato di... grazie.

i--;

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

Se si decommenta if(Count>2) ExpertRemove(), e si esce da questa funzione, alloradopo lo scarico dell'EA, il commento "Deinit() attivato durante lo scarico" rimane visualizzato sul grafico.

Qualcuno sa perché, se tale EA viene rimosso dal grafico tramite il menu contestuale, allora Comment() da OnDeinit non rimane sul grafico?

 

Shurkin:

Variante di codice
int Err;   //Номер ошибки
int FunErr(int Err) // Функция обработки ошибок
dà un avvertimento:
la dichiarazione di 'Err' nasconde la dichiarazione globale alla linea 51
Un'altra variante di codice
int Err;   //Номер ошибки
int FunErr(Err) // Функция обработки ошибок
dà un errore:
'Err' - dichiarazione senza tipo
Come scriverlo correttamente?

Questo è un errore di progettazione del linguaggio in generale, difeso al più alto livello. Due fatti:

1. Il linguaggio MQL4++ permette di nascondere i nomi delle variabili negli scopi annidati.

2. Quando si nascondono i nomi delle variabili negli scopi annidati, ci deve essere un avvertimento, che non può essere disabilitato.

Per rispondere alla domanda, ci sono almeno due possibilità:

1. usare il name hiding, ma sopportare la presenza di un avvertimento (male, si potrebbe perdere un altro avvertimento molto importante tra i molti avvertimenti sul nascondere i nomi che potrebbe aiutare a rilevare ed eliminare un potenziale errore).

2. Non usare il name hiding, anche se la lingua ha questa caratteristica. Per esempio, nominate la variabile globale gErr invece di Err.

Invece di proibire di nascondere i nomi, viene introdotto un avvertimento non rimovibile. Approfittatene.

 

In russo: l'opzione corretta è la prima, ignorare gli avvertimenti.

 
tara:

In russo: l'opzione corretta è la prima, ignorare gli avvertimenti.

Grazie.
 
Dove posso trovare le descrizioni delle funzioni nei file di inclusione?
Motivazione: