Preguntas de un "tonto" - página 162

 
Karlson:
DBL_MAX estará allí.
:-)
 

¿Por qué no vuelve el nandl para discapacitados, aunque se haya eliminado la discapacidad?

   int       indicator_handle=iCustom(
   NULL,
   PERIOD_CURRENT,
   "Examples\\ZigzagColor"
   );
   Print(indicator_handle);
   bool  a=IndicatorRelease(
   indicator_handle//,
   );
   Print(a);
   Print(indicator_handle);

La primera impresión es 10, la segunda es verdadera, la tercera es 10 otra vez. Poner un resbalón por minuto - todavía 10.

Creo que debería ser -1(INVALID_HANDLE). ¿Estoy pensando mal?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Silent:

¿Por qué no vuelve el nandl para discapacitados, aunque se haya eliminado la discapacidad?

La primera impresión es 10, la segunda es verdadera, la tercera es 10 otra vez. Poner un resbalón por minuto - todavía 10.

Creo que debería ser -1(INVALID_HANDLE). ¿Estoy pensando mal?

Los indicadores borrados no se eliminan físicamente de forma inmediata, sino después de una pausa (quizás unos minutos), por si el mismo u otro programa los vuelve a abrir (opción de caché).

En la mayoría de los casos, esto es conveniente. El problema se producirá sólo si el ciclo lee búferes de un gran conjunto de indicadores (tan grandes que no todos ellos pueden caber en la memoria a la vez).

// Sólo en este caso tiene sentido liberar indicadores en el programa en absoluto.

// Todas las demás variantes de uso de la función IndicatorRelease() son "racialmente incorrectas", porque los indicadores se liberan al final del trabajo de todos modos.

De ahí la paradoja: la función es inútil porque el almacenamiento en caché mata por completo todos los casos de uso kosher.

En este caso, Renat prometió una vez hacer una variante de "liberación instantánea", pero al parecer sigue muy ocupado. ;)

--

Esa es más o menos la primera parte de la respuesta (sin la cual la segunda sería incomprensible).

Y ahora sobre INVALID_HANDLE. Por lo que veo, las funciones de liberación de objetos dinámicos, así como el operador de borrado, no asignan el valor INVALID_HANDLE al puntero per se; sólo eliminan los objetos a los que apunta el handle. Sólo las funciones de asignación de memoria (también el operador new) asignan forzosamente valores INVALID_HANDLE a los punteros en caso de fallo, por lo que la forma correcta de comprobar la validez del puntero es la función CheckPointer(), que literalmente busca en la tabla de handles del sistema en busca de un objeto y devuelve el tipo de handle si se encuentra el objeto o 0 si no.

Esperemos que la lógica de trabajar con punteros (handles) esté ahora un poco más clara. Así como los resultados de su ejemplo. Todo es correcto ahí : el indicador es un objeto de acceso grupal, no se elimina físicamente en el primer pitido (por lo que incluso CheckPointer() devolverá un valor distinto de cero), por no mencionar el fallo de esperar obtener el valor INVALID_HANDLE en la variable del puntero después de pasarlo a IndicatorRelease() por valor.

 

El artículo Órdenes, posiciones y operaciones en MetaTrader 5 da el ejemplo de que"Cada operación se basa en una orden particular, perouna orden puede generar múltiples operaciones. Por ejemplo, una orden de compra de 10 lotes puede ejecutarse mediante varias operaciones sucesivas en ejecución parcial". Entiendo que si quiero abrir una posición de, por ejemplo, 10 lotes, pueden aparecer varias operaciones en el historial. En mi estrategia, la posición 1 y 2 en la misma dirección, mi Asesor Experto (MT4) abre con 1.0 lote, y luego el tercero y luego 2.0 lote. En MT5 puede ocurrir que al abrir la primera posición en el historial aparezcan, por ejemplo, 2 o más operaciones. Pueden aparecer 2 o más operaciones en el historial. Cuando desee abrir una segunda posición, el Asesor Experto se desplazará por el historial y encontrará que será la tercera posición. Y abrirá el lote equivocado. Esto es un poco molesto.

Tal vez alguien sabe cómo resolver este problema o me da un enlace.

 
MetaDriver:

Gracias, justo lo que necesitas.

// nelp by nelp for dummies - eso es lo que se necesita en los artículos.

 

Estoy intentando crear un indicador que utilice dos marcos temporales diferentes, por ejemplo M5 (el actual en la pantalla) y H1. ¿Cómo sincronizar los precios entre estos diferentes marcos temporales? Por ejemplo, al calcular el último valor del indicador en M5, quiero bombear automáticamente los precios de H1 de la misma hora (es decir, la barra cero en ambos marcos temporales después de ArraySetAsSeries corresponde a la última hora actual, como en OnTick, pero no a la última barra en la pantalla). Si no existe tal posibilidad y debemos comprobar las horas de las barras manualmente, deberíamos añadir una función de sincronización, como OnTick, para los indicadores.

He intentado probarlo en el probador - es algo bueno. ¿Por qué el último valor calculado no se guarda en la pantalla?

 
gpwr:

Estoy intentando crear un indicador que utilice dos marcos temporales diferentes, por ejemplo M5 (el actual en la pantalla) y H1. ¿Cómo sincronizar los precios entre estos diferentes marcos temporales? Por ejemplo, al calcular el último valor del indicador en M5, quiero bombear automáticamente los precios de H1 de la misma hora (es decir, la barra cero en ambos marcos temporales después de ArraySetAsSeries corresponde a la última hora actual, como en OnTick, pero no a la última barra en la pantalla). Si no existe tal posibilidad y debemos comprobar las horas de las barras manualmente, deberíamos añadir una función de sincronización, como OnTick, para los indicadores.

He intentado probarlo en el probador - es algo bueno. ¿Por qué no se guardan en el indicador los valores calculados previamente?

Utilice una de las sobrecargas de la función CopyXXXX()

Al depurar, compruebe en qué dirección se copian los datos (si se copian más de 1).

Обращение по начальной дате и количеству требуемых элементов

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   int              count,             // сколько копируем
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   );
 
 
Urain:

Utilice una de las sobrecargas de CopyXXXX()

Al depurar, compruebe en qué dirección se copian los datos (si se copian más de 1).

Lo tengo. Gracias.
 

¡Hola!

¿Podría decirme el código de un indicador que dibuje el máximo y el mínimo en los gráficos de los minutos actuales del día anterior?

¡SPS!

 

Mucho tiempo sin verte =).

Digamos. Hay un punto en el tiempo. Por ejemplo D'03.07.2005 13:48:12'.

¿Cómo puedo averiguar la hora de la barra (de un periodo determinado) que incluye este periodo de tiempo?

Estaría bien que hubiera una función como:

datetime УзнатьВремяБараПоВремениПользователя (datetime времяПользователя, ENUM_TIMEFRAMES периодБаров) 

... Y que devolvería un valor negativo si no hubiera comercio en ese momento.

Bueno, escúpelo, ¿existe esa función?