Preguntas de un "tonto" - página 65

 
x100intraday:

Cuando llamo a mi función, ¿debo pasar el array por referencia, por puntero o algo más?

Lea la sección sobre el paso de parámetros por valor y por referencia:

MQL5 Reference / Conceptos básicos del lenguaje / Funciones / Pasar parámetros

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Yedelkin:

Lea la sección del Manual de referencia sobre el paso de parámetros por valor y por referencia:

MQL5 Reference / Conceptos básicos del lenguaje / Funciones / Pasar parámetros

De hecho, acabo de llegar de allí y los errores de compilación que mencioné en mi mensaje anterior han ocurrido después de leer la sección anterior.

Ahora lo he releído con atención: se trata de la const y de dónde ponerla.

Gracias, ya lo he resuelto.

 
x100intraday:

EnOnCalculate puedo utilizar fácilmente los elementos del array como alto por índice. ¿Es posible también acceder a los elementos del índice de este array en ExtFunc? Al llamar a mi función, ¿debo pasar el array-argumento por referencia, por puntero o por otra cosa? Hasta ahora he conseguido minimizar los mensajes de error a: "'high' - parameter conversion is not allowed" y "'high' - constant variable cannot be passed as reference" respecto a la misma línea de mi llamada a la función con el argumento del array de OnCalculate. ¿Es inútil o hay una solución?

Hasta ahora en OnCalculate he recurrido a copiar los altos a otro array:

y luego usar CopyOfHigh en ExtFunc en lugar de usar high-array directamente.

Sólo tienes que pasar el array a tu función por referencia

bool ExtFunc (string str, int P, int i, double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

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=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 

¡Saludos a todos!

¿Qué significa la advertencia?

posible pérdida de datos debido a la conversión de tipo expert.mq5

al compilar? Dice esto:

   string Symb="EURJPY";
   int DIGITS = SymbolInfoInteger(Symb,SYMBOL_DIGITS);

¿Qué pasa?

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
sergey1294:

Simplemente pasa el array a tu función por referencia

No exactamente:

bool ExtFunc (string str, int P, int i, const double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

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=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 
RomanS:

¡Saludos a todos!

¿Qué significa la advertencia?

posible pérdida de datos debido a la conversión de tipo expert.mq5

al compilarlo? Dice esto:

¿Qué pasa?

La funciónSymbolInfoInteger() devuelve un valor de tipo long (ver Referencia), mientras que DIGITS se declara como int. Se trata de una conversión de tipo implícita. Véase "Conversión de tipos".
 
RomanS:

Qué significa la advertencia:

posible pérdida de datos debido a la conversión de tipos

El significado de este mensaje varía según el contexto en el que se considere.

Por ejemplo:

1. "¡Haz una conversión de tipo explícita!"

   int DIGITS = (int) SymbolInfoInteger(Symb,SYMBOL_DIGITS);

2. "Posible torsión de datos con conversión de tipos implícita" // Esta es una traducción literal.

Esto es comprensible, ya que el tipo largo devuelto por la función tiene un tamaño mayor y cubre un rango más amplio de valores.

Otra de las opciones que más se me ocurren últimamente:

3. "El personal de MetaQuotes no entiende lo genial, atractivo y eficaz que sería aprender si los mensajes de error y las advertencias del compilador de mql5 se dieran en el idioma nativo del usuario".

 
MetaDriver:

... lo genial, atractivo y eficaz que sería aprender si los mensajes de error y las advertencias del compilador de mql5 se dieran en el idioma nativo del usuario".

Sí, no estaría mal. Aunque yo personalmente ya soy un poco espabilado con el inglés, y los traductores son una pasta hoy en día, pero de nuevo, esto me quita un tiempo valioso, que no es tanto. Hay gente que no tiene suficiente con utilizar un traductor para un tema tan complicado como es el comercio en los mercados financieros + la programación. MetaTrader 5 es una plataforma multilingüe. Me gustaría que los mensajes y comentarios de los ejemplos de ayuda (a veces nos los encontramos) estuvieran en el idioma que se ha seleccionado en el terminal.
 

Tengo la sospecha de que si el indicador se activa a través de iCustom, se calcula en cada tick. Y no depende de las llamadas a él a través del CopyBuffer. ¿Es correcto?

Si es correcto, ¿es posible desactivar el cálculo del indicador y activarlo sólo antes de llamar al CopyBuffer?

 
masharov:

Tengo la sospecha de que si el indicador se activa a través de iCustom, se calcula en cada tick. Y no depende de las llamadas a él a través del CopyBuffer. ¿Es correcto?

Depende de la lógica del indicador personalizado. En realidad, puede recalcular sus valores una vez al día, saltándose todos los demás ticks. Es decir, según la voluntad del autor.

masharov:

Si es así, ¿es posible desactivar el recálculo del indicador y activarlo sólo antes de llamar al CopyBuffer?

Básicamente, algunas personas tratan de utilizar este enfoque monstruoso: crear una copia del indicador a través de iCustom, copiar los datos necesarios, eliminar la copia del indicador. El procedimiento se repite según sea necesario.

También existe la función OnTimer(), no he trabajado con ella, pero quizás puedas adaptarla a tu tarea.

Razón de la queja: