Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1173

 

MQL5 iBarShift

Según la documentación de mql5, la función iBarShift devuelve un valor de tipo int.

int#

El tipo int tiene un tamaño de 4 bytes (32 bits). El valor mínimo es -2 147 483 648, el valor máximo es 2 147 483 647.


MiiBarShift no quiere dar un valor superior a 99999

Dibujo una línea de tendencia en el gráfico, el siguiente script obtiene el tiempo de inicio de la línea y emite el número de barra de ese tiempo.

Cuando la línea se desplaza hacia atrás en la historia en algún momento el valor de salida se detiene en 99999, y si

boolexact=false// modo

cambiarlo a true, imprime -1, y GetLastError = 0

void OnStart()
  {
int total = ObjectsTotal(0, 0, -1);  // Общее кол-во объектов на: /текущий график/главное окно/все типы объектов
datetime time0 = 0; // Время соответствующее началу трендовой линии
string objname = ""; // Имя объекта (трендовой линии)
int shift = 0; // Номер бара, соответствующего времени начала трендовой линии time0

for(int i = total - 1; i >= 0; i--)
     {
     objname = (string)ObjectName(0, i, 0, OBJ_TREND);
     time0 = ObjectGetInteger(0, objname, OBJPROP_TIME, 0);
     shift = iBarShift(NULL, PERIOD_M1, time0, false);
     Comment("shift: ", shift, " Error: ", GetLastError());
     Sleep(2000);
     }
  }

¿Qué pasa?

He probado diferentes gráficos de diferentes brokers, el tiempo de la línea se lee correctamente, si cambio PERIOD_M1 a M5, por ejemplo, entonces necesito moverme más en el historial para llegar a 99999

Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
Archivos adjuntos:
sc1.mq5  3 kb
 
Sunriser:

MQL5 iBarShift

Según la documentación de mql5, la función iBarShift devuelve un valor de tipo int.

int#

El tipo int tiene un tamaño de 4 bytes (32 bits). El valor mínimo es -2 147 483 648, el valor máximo es 2 147 483 647.


MiiBarShift no quiere dar un valor superior a 99999

Dibujo una línea de tendencia en el gráfico, el siguiente script obtiene el tiempo de inicio de la línea y emite el número de barra de ese tiempo.

Cuando la línea se desplaza hacia atrás en la historia en algún momento el valor de salida se detiene en 99999, y si

boolexact=false// modo

cambiarlo a true, imprime -1, y GetLastError = 0

¿Qué pasa?

He probado diferentes gráficos de diferentes brokers, el tiempo de la línea se lee correctamente, si cambio PERIOD_M1 a M5, por ejemplo, necesito moverme más en el historial para llegar a 99999.

En primer lugar, comprueba el número máximo de barras en los ajustes del terminal.

 
Uladzimir Izerski:

Primero comprueba el número máximo de barras en los ajustes del terminal.

Gracias.

Era 10000, lo cambié a ilimitado y funcionó.

Aunque no es algo obvio...

 

Ayuda a la creación de asas

Esto es lo que pasa

int OnInit()
  {
//-создадим хэндл индикатора
      handle=iAO(name,period);
//-если не удалось создать хэндл
   if(handle==INVALID_HANDLE)
     {
      ...
      return(INIT_FAILED);
     }

Pregunta: ¿A partir de qué parámetros se asigna el número (dígitos) de una manilla?
¿Puede ser diferente después de reiniciar el terminal?
¿Puede ser diferente después de una reinicialización del gráfico?
¿En qué casos puede cambiar?

 
Vitaly Muzichenko:

Ayuda a la creación de asas

Esto es lo que pasa

Pregunta: ¿A partir de qué parámetros se asigna el número (dígitos) de una manilla?
¿Puede ser diferente después de reiniciar el terminal?
¿Puede ser diferente después de una reinicialización del gráfico?
¿En qué casos puede cambiar?

Si sólo hay un indicador, siempre tiene un mango de 10. Cada una de las sucesivas es igual a la anterior+1 y todo depende del orden de creación de las asas. Sólo puede cambiar si uno de los anteriores obtiene un error.

 
Alexey Viktorov:

Si tiene un indicador, siempre tiene un mango de 10. Cada una de las siguientes es igual a la anterior+1 y todo depende del orden en que se crearon las asas. Sólo puede cambiar si uno de los anteriores obtiene un error.

Ya veo, se entiende más o menos. Gracias.

 
Vitaly Muzichenko:

Ayuda a la creación de asas

Hay una cosa así

Pregunta: ¿A partir de qué parámetros se asigna el número (dígitos) de una manilla?
¿Puede ser diferente después de reiniciar el terminal?
¿Puede ser diferente después de una reinicialización del gráfico?
¿En qué casos puede cambiar?

Respuestas encontradas

Сравниваем скорость самокэширующихся индикаторов
Сравниваем скорость самокэширующихся индикаторов
  • www.mql5.com
Предположим, что нам вдруг наскучил классический MQL5-доступ к индикаторам и захотелось сравнить скорость доступа в сравнении с альтернативными вариантами. Например, сравним его с доступом к индикаторам в стиле MQL4 без кэширования и с кэшированием. Идеи с доступом в MQL4-стиле были взяты из статьи LifeHack для трейдера: готовим фастфуд из...
 
¿Dónde se puede insertar un archivo para que sea visible, vía herencia, para todos los archivos de la biblioteca estándar?
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 

Por favor, indíqueme cómo pasar correctamente un array multidimensional a una función.

Si simplemente especifico MyFun( &Mas[][] ) en la cabecera, el compilador genera un error al acceder a un elemento del array Mas[j][k] en el cuerpo de la función... ¿Pero cómo?

Parece que no hay problema con los unidimensionales.

 
User_mt5:

Por favor, indíqueme cómo pasar correctamente un array multidimensional a una función.

Si simplemente especifico MyFun( &Mas[][] ) en la cabecera, el compilador genera un error al acceder a un elemento del array Mas[j][k] en el cuerpo de la función... ¿Pero cómo?

No parece haber ningún problema con las matrices unidimensionales.

Las dimensiones del segundo y del siguiente array no pueden ser dinámicas. En consecuencia, debe ser MyFun(int &Mas[][7]) declarada como un array, por ejemplo, int Mas[][7]; por lo que debe ser recibida.