[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 308

 
¿Qué hora es en Estados Unidos? ¿Qué hora abre/cierra en Estados Unidos? ¿Qué hora abre/cierra en Japón? Sólo con la supresión del horario de invierno es un poco confuso... ¿y Europa, Asia, EE.UU. están ajustando sus relojes?
 
Elenn:
La solución es realmente original, deberíamos probarla. Pero cuando se reinicie el array, ¿no se perderán los datos debido a la reinicialización?

Si aumenta el tamaño de la matriz, los datos introducidos anteriormente no se perderán. Y las celdas "capturadas" (nuevas) contendrán basura RAM. Y si se encoge la matriz, los datos que estaban en las celdas que se encogen se perderán irremediablemente. Esto es lo básico de la programación.
 
vilard:

¿Cuánto tiempo tarda una orden pendiente de MODE_TRADE en convertirse en una orden de MODE_HISTORY?

En poco tiempo. Las órdenes pendientes no se almacenan en el historial.

Tan pronto como se transforme en una orden de mercado y se cierre - entonces se convertirá en historia, pero con un tipo de orden de mercado.

Por ejemplo:

Si había OP_BUYSTOP, entonces se convirtió en OP_BUY. Tras su cierre, pasará a la historia.

PERO, después de la conversión de OP_BUYSTOP a OP_BUY, el OP_BUYSTOP original no estará en el historial.

 
001:

Buenas noches, por favor, aconséjeme. Hay dos valores del indicador en barras diferentes. ¿Cómo trazar una línea a través de ellos y cómo trabajar con ella en el indicador? Gracias.

La línea entre ellos puede ser dibujada usando el objeto OBJ_TREND. La primera coordenada es la hora y el precio de la primera barra, la segunda coordenada es la hora y el precio de la segunda barra.

Función:

//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm, datetime t1=0, double p1=0, datetime t2=0, double p2=0, int st=0, int sz=0) {
   if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0, 0, 0, 0);
   ObjectSet(nm, OBJPROP_TIME1    , t1);
   ObjectSet(nm, OBJPROP_PRICE1   , p1);
   ObjectSet(nm, OBJPROP_TIME2    , t2);
   ObjectSet(nm, OBJPROP_PRICE2   , p2);
   ObjectSet(nm, OBJPROP_COLOR    , cl);
   ObjectSet(nm, OBJPROP_STYLE    , st);
   ObjectSet(nm, OBJPROP_WIDTH    , sz);
   ObjectSet(nm, OBJPROP_RAY      , 0);
}
//+----------------------------------------------------------------------------+

Espero que todo esté claro en él.

cl - color del objeto, nm - nombre del objeto, t1, p1 - coordenadas de origen, t2, p2 - coordenadas finales, st - estilo de línea, sz - tamaño.

También puedes añadir rayo: 1 - rayo, 0 - segmento. La última línea de esta función define un segmento. En lugar de 0 puedes poner el nombre del parámetro a pasar.

En cuanto a cómo trabajar con ella (esta línea) en el indicador - usted necesita saber lo que necesita de ella. Pero los datos sobre ella (la línea) pueden obtenerse utilizando la función estándar

ObjectGet("nombre del objeto",propiedad del objeto requerida);

 
artmedia70:

Se puede trazar una línea entre ellos utilizando el objeto OBJ_TREND. La primera coordenada es la hora y el precio de la primera barra, la segunda coordenada es la hora y el precio de la segunda barra.

Función:

Espero que todo esté claro en él.

cl - color del objeto, nm - nombre del objeto, t1, p1 - coordenadas de origen, t2, p2 - coordenadas finales, st - estilo de línea, sz - tamaño.

También puedes añadir rayo: 1 - rayo, 0 - segmento. La última línea de esta función define un segmento. En lugar de 0 puedes poner el nombre del parámetro a pasar.

En cuanto a cómo trabajar con ella (esta línea) en el indicador - usted necesita saber lo que necesita de ella. Sin embargo, los datos sobre ella (la línea) pueden obtenerse utilizando la función estándar

ObjectGet("nombre del objeto", la propiedad del objeto necesaria);


¡Muchas gracias! Otra pregunta, si se me permite. Cómo trabajar (necesito saber qué valor toma la tendencia en una barra determinada), cómo trabajar la tendencia en el EA. Quiero transferir una parte del indicador al Asesor Experto (cálculos).
 
¡¡¡Buenos días!!! ¡No puedo entrar en la cuenta! ¿Qué carajo es ese "error común"?
 
¿Hay algún problema con el ordenador otra vez?
 
Elenn:
La solución es realmente original, deberíamos probarla.


Voy a citar un pequeño texto del tutorial de Delphi. No está de más saberlo.

Las "matrices dinámicas" son estructuras de datos dinámicas, por lo que el programa debe prever su eliminación explícita de la memoria del ordenador cuando se haya terminado de utilizarlas. El proceso de eliminar las variables dinámicas innecesarias de la memoria del ordenador se denomina a veces recogida de basura".

Una variante que funcionará en MQL4 es redimensionar un array dinámico a longitud cero utilizando la función ArrayResize() https://docs.mql4.com/ru/array/ArrayResize cuando el programa termina de trabajar con él.

 
drknn:


Creo que te voy a citar un trozo de texto del tutorial de Delphi. Es bueno saberlo.

Las "matrices dinámicas" son estructuras de datos dinámicas, por lo que el programa debe prever su eliminación explícita de la memoria del ordenador cuando se haya terminado de utilizarlas. El proceso de eliminar las variables dinámicas innecesarias de la memoria del ordenador se denomina a veces recogida de basura".

Una variante adecuada para el lenguaje MQL4 es redimensionar un array dinámico a longitud cero utilizando la función ArrayResize() https://docs.mql4.com/ru/array/ArrayResize después de terminar de trabajar con él.

Todo eso es cierto: limpiar la basura es una buena regla...

Pero en este contexto cómo determinar si debemos limpiar la "basura" ahora o viceversa: no es basura sino datos necesarios para los cálculos posteriores.

Según tengo entendido, deinit() debería utilizarse para limpiar la basura, pero... se ejecuta no sólo cuando se borra el gráfico de un instrumento comercial y se elimina el EA, sino también cuando se cambia el TF. En este caso, todos los datos acumulados para el TF se perderán y el Asesor Experto volverá a trabajar con una matriz cero cuando vuelva al marco temporal anterior. Lo mismo ocurrirá si cambiamos alguno de los parámetros del EA.

Resulta que, en algunas situaciones, el "barrido" es un proceso lógico complejo, en lugar de limitarse a cambiar el tamaño de una matriz.

 
001:

¡Muchas gracias! Otra pregunta, si se me permite. Cómo trabajar(necesito saber qué valor toma la tendencia en una barra determinada), cómo trabajar con la tendencia en el EA. Quiero transferir una parte del indicador al Asesor Experto (cálculo).

ObjectGetValueByShift() para ayudarle

Y cómo vas a trabajar con ella, sólo tú lo sabes...