Preguntas de un "tonto" - página 68

 

x100intraday:

Lo principal que quiero saber: ¿es posible llenar los búferes de tiempo directamente como los búferes de precio (sin recurrir a CopyTime y otras funciones regulares de copia en un array), y cómo, y si no, por qué?

2. ¿Es realmente necesario crear otro par de buffers para almacenar los segundos desde el inicio de 1970, pero con tipo no datetime, sino algún double o long, por ejemplo, y en los momentos necesarios convertir mediante TimeToString al formato de tiempo como cadena literal?

1. imposible. con "¿por qué?" - a los desarrolladores.

En su caso, esta es la solución más sencilla. (Se garantiza que funcione.) Ya que planteas la cuestión de rellenar topes similares a los de los precios.

En mi lugar, trataría de evitar ese desperdicio de memoria a nivel algorítmico, y en ningún caso crearía buffers con datos útiles llenos al 3%.

 
MetaDriver:

En mi lugar, trataría de evitar este desperdicio de memoria a nivel algorítmico, y no crearía buffers con un 3% de datos utilizables.

Pues bien, aquí viene la pregunta-explicación: https://www.mql5.com/ru/forum/1111/page529#comment_101059 con al menos una respuesta inteligible y no incomprensible, aunque sí todo lo contrario. El interés es alto...
 
x100intraday:

sí, bada))

"Constantes de fecha y hora... " y "...puede representarse como una cadena literal".

puede ser representado o no... es para datos de entrada/salida en la forma habitual de fecha/hora.

Además, no podemos asociar arrays de este tipo con buffers indicadores (y no hay necesidad de hacerlo...), no podemos aplicar SetIndexBuffer a arrays de este tipo de datos por razones bien conocidas.

no hay nada que impida que el tipo datetime esté en el buffer del indicador (es deseable).

Y no lo hacemos.

Y en vano)

Compila el código resultante. Obtenemos la advertencia"truncamiento del valor constante" con respecto a las cadenas con =EMPTY_VALUE(nos sorprendemos tristemente) y un error en el informe de expertos del terminal: "Array out of range " con respecto a las mismas cadenas (nos molestamos al fin). Parece queEMPTY_VALUE no quiere encajaren el tipo datetime , mientras que el tamaño del array sigue siendo cero. CambiandoEMPTY_VALUE a 0, el error desaparece pero el array sigue teniendo un tamaño cero.

EMPTY_VALUE es de tipo doble.

Sería más fácil con un buffer indicador - no necesitamos determinar el tamaño del array.

Otra cosa extraña es que el tamaño de ExtUpperBuffer y ExtLowerBuffer es distinto de cero, significa que se llenan, pero los fractales no aparecen. ¿Por qué debería ser así?

eh, no lo sé).

Lo principal que me interesa: ¿es posible rellenar los búferes de tiempo directamente de forma similar a los búferes de precios (sin recurrir al CopyTime y otras funciones regulares de copia en el array), y cómo, y si no, por qué? Realmente, para ello tengo que crear otro par de buffers para almacenar los segundos desde el inicio de 1970, pero con tipo no datetime, sino algún double o long, por ejemplo, y en los momentos necesarios convertir a través de TimeToString a formato de hora como cadena literal?

El acceso a datos como datetime es similar al acceso a datos de precios.

datetime es esencialmente el mismo int/long.

P.D.: quien sea demasiado perezoso para reproducir el código de Fractals.mq5, sólo dígame, ¿cómo almacena los datos de tiempo específicos calculados (sin llamar a las manijas de los indicadores incorporados y trabajar con ellos)?

es lo mismo que con los datos enteros, int/datetime/long es lo mismo.

 
Swan:

sí, badaada))

nada impide que el tipo datetime esté en el buffer del indicador (eso es deseable).

Y en vano)

Es más fácil con el buffer indicador - no necesitas determinar el tamaño del array.

¿Y qué estoy haciendo mal exactamente? Todo está descrito en detalle, el código fuente es estándar, probado en el tiempo, ¡el más sencillo! Las modificaciones son simples y obvias... Estoy perdido en las conjeturas de mi mente nublada... Cuando estoy atascado en algo, también podría llamar a un mecánico de coches con una llave inglesa...

¿Y cuál es el hechizo de la runa para vincular las matrices de fecha a los búferes de los indicadores? Otra vez:


SetIndexBuffer

Vincula el búfer indicador especificado a un array dinámico unidimensional de tipo double, declarado globalmente.

 
x100intraday:

¿Y qué estoy haciendo mal exactamente? Al fin y al cabo, lo he descrito todo con detalle, el código fuente es, en general, estándar, probado en el tiempo, ¡el más sencillo! Las modificaciones son simples y obvias... Estoy perdido en la especulación de mi mente nublada... Cuando estoy atascado en algo, también podría llamar a un mecánico de coches con una llave inglesa...

¿Y cuál es el hechizo de la runa para vincular las matrices de fecha a los búferes de los indicadores? Otra vez:


SetIndexBuffer

Vincula el búfer indicador especificado a un array dinámico unidimensional de tipo double, declarado globalmente.

No necesitas esta fecha. Escribe todo en un array doble y lo convierte a datetime antes de utilizarlo (si es necesario).

Básicamente, la única diferencia entre datetime y double está en la presentación. Puede convertir sin pérdidas la hora escrita en double a datetime.

Ambos son tipos de 8 bytes.

 
x100intraday:

¿Y qué estoy haciendo mal exactamente? Al fin y al cabo, lo he descrito todo con detalle, el código fuente es, en general, estándar, probado en el tiempo, ¡el más sencillo! Las modificaciones son simples y obvias... Estoy perdido en la especulación de mi mente nublada... Cuando se me atasca algo, quiero un mecánico de coches con una llave inglesa...

Sólo puedo adivinar los detalles del código con los cambios...

¿Y cómo utilizar el hechizo rúnico para vincular matrices de tipo datetime a los búferes de los indicadores? Otra vez:


SetIndexBuffer

Vincula el búfer indicador especificado a un array dinámico unidimensional de tipo double, declarado globalmente.

Urain ya lo ha contestado. Bueno, para que el compilador no joda, algo así:

double ExtUpperTimeBuffer[];//обьявляем
...
ExtUpperTimeBuffer[xz0]=(double)time[xz1];//присваиваем
...
datetime XZ=(datetime)ExtUpperTimeBuffer[xz2];//юзаем
 

Así que... Sí...

Nada rompedor, pero el terreno está bien plantado, por así decirlo.

Gracias a todos por las patadas medicinales. Lo intentaré...

 
x100intraday:

Gracias a todos por las patadas de la medicina.

Y patadas de buena suerte : D
 

¿Existe un análogo interno de la función de biblioteca array.Add()?

P.D.: si no es así, regala un año de pastillas para dormir.

 
x100intraday:

¿Existe un análogo interno de la función de biblioteca array.Add()?

P.D.: si no es así, regala un año de pastillas para dormir.

¿Por qué no almacenar la fecha en el indicador...... o en el buffer...... de tipo doble?

Se añaden muchos puntos, si no aparece algún tipo de enlace.

double time[10];

time[0] = (double) D'3000.12.31 23:59';
time[1] = (double) D'2030.12.31 23:59';

Print(TimeToString((datetime)time[0]));
Print(TimeToString((datetime)time[1]));

Todo se convierte correctamente sin errores

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5
Razón de la queja: