Errori, bug, domande - pagina 98

 

Non capisco "dove è sepolto il cane", il codice funziona, tutto è OK, ma gli avvertimenti del compilatore possibile perdita di dati a causa della conversione di tipo Indi.mqh 125 45 mi fanno riflettere.


//+------------------------------------------------------------------+
//|Получение значений позиций в средe BB цены AppPrice,Fast/Slow TEMA|
//+------------------------------------------------------------------+

void CIndi::SetPricePositions(ushort SymbolPosition,ushort Index,uchar AppPrice)
  {
   int handle=GetHandle(SymbolPosition,BANDS);
   double Upper =Upper_Band(handle,Index);
   double Base  =Base_Band(handle,Index);
   double Lower =Lower_Band(handle,Index);
   double FTema =GetValuesFromIndi(GetHandle(SymbolPosition,TEMA_FAST),0,Index);
   double STema =GetValuesFromIndi(GetHandle(SymbolPosition,TEMA_SLOW),0,Index);
   
   Bollinger[SymbolPosition][PRICE_POSITION]=(double)GetPricePos(handle,Index,AppPrice); ???
   Bollinger[SymbolPosition][FAST_POSITION] =(double)Custom.Position(Lower,Upper,FTema); ???
   Bollinger[SymbolPosition][SLOW_POSITION] =(double)Custom.Position(Lower,Upper,STema); ???
   Bollinger[SymbolPosition][UPPER]         =(double)Upper; ???
   Bollinger[SymbolPosition][BASE]          =(double)Base;  ???
   Bollinger[SymbolPosition][LOWER]         =(double)Lower; ???
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора - Документация по MQL5
 

Agli sviluppatori.

Per quanto ho capito, il problema dello swap è stato risolto? O allora non è chiaro perché l'argomento è scomparso dal servicedesk.....

 

Quando si testa un EA

void OnTick(){
   Print(iTest());
}
//+------------------------------------------------------------------+
int iTest(){
   double i;
   int j;
   for(int x=3; x>0; x--) { 
      i=i+0.00001;
   }//Next x
   j=int(i/_Point);
   return(j);
}//iTest()

Il registro mostra un numero in costante aumento! È normale che sia così?

In MQL4 avreste dovuto scrivere

static double i;

 
EvgeTrofi:

Quando si testa un EA

Il registro mostra un numero in costante aumento! Dovrebbe essere così?

Sì, dovrebbe essere così.

Non avete inizializzato la variabile locale i, che nelle chiamate successive è stata allocata nello stesso posto sullo stack delle chiamate precedenti.

Документация по MQL5: Основы языка / Переменные / Локальные переменные
Документация по MQL5: Основы языка / Переменные / Локальные переменные
  • www.mql5.com
Основы языка / Переменные / Локальные переменные - Документация по MQL5
 
Renat:

Sì, è così che dovrebbe essere.

Non avete inizializzato la variabile locale i che sarà allocata nello stesso posto dello stack durante le prossime chiamate come lo era durante le chiamate precedenti.

In quale caso si dovrebbe usare la classe di memoria statica?

Frase incomprensibile nell'aiuto: "Le variabili locali dichiarate comestatiche hanno lo scopo di un blocco, nonostante il fatto che esistano dall'inizio dell'esecuzione del programma", per favore spiegate. Sembra esserci un errore sintattico o grammaticale in questa frase :)

Notate l'esempio nell'aiuto:https://www.mql5.com/ru/docs/basis/variables/static

Se si rimuove la parola static dal codice, non cambierà nulla:

int Counter()
  {
   int count;
   count++;
   if(count%100==0) Print("Функция Counter была вызвана уже ",count," раз");
   return count;
  }
void OnStart()
  {
//---
   int c=345;
   for(int i=0;i<1000;i++)
     {
      int c=Counter();
     }
   Print("c = ",c);
  }

Domanda: perché abbiamo bisogno della statica se è lo stesso senza?

Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - Документация по MQL5
 
ALozovoy:
Salve. Manca il parametro ExpertParameters nella descrizione [Tester]. Potete saperne di più nell'aiuto.

Grazie, funziona.

 


Per favore ditemi, qual era lo scopo di aggiungere la possibilità di dichiarare variabili all'interno dei blocchi in primo luogo? In precedenza, in un caso come questo:

  
int c;    for(int i=0;i<1000;i++)      {        int  c=Counter(); }

Una volta si apriva una finestra che segnalava che una diretta era stata dichiarata due volte ed era chiaro che si doveva trovare un altro nome per la variabile o usare lo stesso nome ma senza l 'int. Ma ora si può confondere. È lo stesso in C++?

(Ero solito programmare in Visual Basic prima di imparare MQL. Non c'era un tale casino).

 
EvgeTrofi:

Allora in quale caso si dovrebbe usare la classe di memoria statica?


No.

Se avete creato una variabile int i;, perché non l'avete inizializzata? Infatti, tu stesso hai detto "non mi interessa cosa c'è in questa variabile" e ti sei ritrovato con della spazzatura dentro.

Il modo corretto è int i=0;

È così anche in C++?

Sì, è vero - potete creare tali variabili all'interno di un blocco.
 

Ho riscontrato un problema su Windows 7 64 bit su 306 Bild del terminale (Windows 7 32 bit funziona tutto bene).

File:
mql64.png  52 kb
 
VanHelsing:

Ho riscontrato un problema su Windows 7 64 bit su 306 Bild del terminale (Windows 7 32 bit tutto funziona bene).

Si prega di postare in servicedesk un pezzo di codice in cui si verifica questa situazione.