Errores, fallos, preguntas - página 98

 

No entiendo "dónde está enterrado el perro", el código funciona, todo está bien, pero las advertencias del compilador posible pérdida de datos debido a la conversión de tipo Indi.mqh 125 45 me hacen dudar.


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

A los desarrolladores.

Según tengo entendido, ¿se ha resuelto el problema del intercambio? O entonces no está claro por qué el tema desapareció del servicedesk.....

 

Al probar 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()

El registro muestra un número en constante aumento. ¿Se supone que debe ser así?

En MQL4 debería haber escrito

static double i;

 
EvgeTrofi:

Al probar un EA

El registro muestra un número en constante aumento. ¿Se supone que esto es así?

Sí, debería serlo.

No has inicializado la variable local i, que en las siguientes llamadas se ha asignado en el mismo lugar de la pila que en las anteriores.

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

Sí, así es como debería ser.

No has inicializado la variable local i, que se asignará en el mismo lugar de la pila durante las siguientes llamadas que durante las anteriores.

¿En qué caso se debe utilizar la clase de memoria estática?

Frase incomprensible en la ayuda: "Las variables locales declaradas comoestáticas tienen ámbito de un bloque, a pesar de que existen desde el principio de la ejecución del programa", por favor explique. Parece que hay un desliz sintáctico o gramatical en esta frase :)

Tenga en cuenta el ejemplo de la ayuda:https://www.mql5.com/ru/docs/basis/variables/static

Si eliminas la palabra static del código, nada cambiará:

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

Pregunta: ¿por qué necesitamos la estática si es lo mismo sin ella?

Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - Документация по MQL5
 
ALozovoy:
Hola. Falta el parámetro ExpertParameters en la descripción de [Tester]. Puedes encontrar más información en la ayuda.

Gracias, está funcionando.

 


Dígame, por favor, ¿cuál era el propósito de añadir la posibilidad de declarar variables dentro de los bloques en primer lugar? Anteriormente en un caso como este:

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

Antes salía un recuadro de que una directa estaba declarada dos veces y estaba claro que había que inventar otro nombre para la variable o usar el mismo pero sin el int. Pero ahora puede resultar confuso. ¿Es lo mismo en C++?

(Solía programar en Visual Basic antes de aprender MQL. Allí no había tal lío).

 
EvgeTrofi:

Entonces, ¿en qué caso se debe utilizar la clase de memoria estática?


No.

Si has creado una variable int i;, ¿por qué no la has inicializado? De hecho, tú mismo dijiste "no me importa lo que hay en esta variable" y terminaste con basura en ella.

La forma correcta es int i=0;

¿Es así también en C++?

Sí, eso es, puedes crear esas variables dentro de un bloque.
 

He encontrado un problema en Windows 7 64 bits en el 306 Bild del terminal (Windows 7 32 bits todo funciona bien).

Archivos adjuntos:
mql64.png  52 kb
 
VanHelsing:

He encontrado un problema en Windows 7 64 bits en el 306 Bild del terminal (Windows 7 32 bits todo funciona bien).

Por favor, publica en servicedesk un trozo de código en el que se produzca esta situación.