Erros, bugs, perguntas - página 98

 

Não percebo "onde o cão está enterrado", o código funciona, está tudo bem, mas os avisos do compilador de possíveis perdas de dados devido à conversão do tipo Indi.mqh 125 45 fazem-me pensar.


//+------------------------------------------------------------------+
//|Получение значений позиций в сред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
 

Aos promotores.

Tanto quanto sei, a questão da troca foi resolvida? Ou então não é claro porque é que o tópico desapareceu do servicedesk.....

 

Ao testar uma 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()

O registo mostra um número constantemente crescente! É suposto ser assim?

Na MQL4 deverá ter escrito

static double i;

 
EvgeTrofi:

Ao testar uma EA

O registo mostra um número constantemente crescente! Será isto suposto ser assim?

Sim, deve ser.

Não se inicializou a variável local i, que foi atribuída no mesmo local da pilha em chamadas subsequentes como em chamadas anteriores.

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

Sim, é assim que deve ser.

Ainda não inicializou a variável local i que será atribuída no mesmo local da pilha durante as chamadas seguintes como foi durante as chamadas anteriores.

Em que caso deve ser utilizada a classe de memória estática?

Frase incompreensível na ajuda: "As variáveis locais declaradas comoestáticas têm alcance de um bloco, apesar de existirem desde o início da execução do programa", por favor explique. Parece haver um deslize sintáctico ou gramatical nesta frase :)

Note o exemplo na ajuda:https://www.mql5.com/ru/docs/basis/variables/static

Se remover a palavra estática do código, nada mudará:

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);
  }

Pergunta: porque é que precisamos de estática se é a mesma sem ela?

Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - Документация по MQL5
 
ALozovoy:
Olá. Falta-lhe o parâmetro ExpertParameters na descrição [Testador]. Pode saber mais sobre o assunto na ajuda.

Obrigado, está a funcionar.

 


Por favor, diga-me, qual foi o objectivo de adicionar a capacidade de declarar variáveis dentro de blocos em primeiro lugar? Anteriormente, num caso como este:

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

Costumava aparecer uma caixa que era declarada directa duas vezes e era claro que se tinha de arranjar outro nome para a variável ou usar o mesmo mas sem a int. Mas agora pode tornar-se confuso. É o mesmo em C++?

(Eu costumava programar em Visual Basic antes de aprender MQL. Não houve aí tal confusão).

 
EvgeTrofi:

Então em que caso deve ser utilizada a classe de memória estática?


Não.

Se criou uma variável int i;, porque não a inicializou? De facto, você mesmo disse "Não me interessa o que está nesta variável" e acabou por ficar com lixo dentro dela.

A forma correcta é int i=0;

Também é assim em C++?

Sim, isso mesmo - pode criar tais variáveis dentro de um bloco.
 

Encontrei um problema no Windows 7 64 bit no 306 Bild do terminal (Windows 7 32 bit tudo funciona bem).

Arquivos anexados:
mql64.png  52 kb
 
VanHelsing:

Encontrei um problema no Windows 7 64 bit no 306 Bild do terminal (Windows 7 32 bit tudo funciona bem).

Por favor, afixar em servicedesk um pedaço de código sobre o qual esta situação ocorre.
Razão: