Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1884

 
Alexey Viktorov #:

No estoy discutiendo. "Los grises se muestran en la foto de este post.


Sin el material de origen, estos son los


Bueno, yo estaba hablando de "estos". Cuando tuve un desbordamiento y los indicadores no se mostraban, no miré lo que aparecía en el menú que se muestra en la captura de pantalla del post que mencionas. No puedo decir nada con seguridad aquí.

Pero si los indicadores no están en el navegador, pero sí en la carpeta, significa que los nuevos no aparecerán en el navegador hasta que se eliminen algunos de los antiguos de la carpeta.

He estado allí, he hecho eso. No soy el único.

 

Quería evitar la necesidad de redimensionar manualmente el array dinámico simplemente asignándolo como un buffer indicador. Pero no puedo deshacerme de ArrayResize() como si se tratara de un array dinámico de búfer indicador cuyo tamaño debe ser controlado por el propio terminal y que no debe ser redimensionado manualmente:

https://www.mql5.com/ru/docs/series/bufferdirection:

Индикаторный буфер представляет из себя динамический массив типа double, размером которого управляет клиентский терминал с тем, чтобы он всегда соответствовал количеству баров, на которых индикатор рассчитывается. Обычный динамический массив типа double назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(). Для индикаторных буферов не требуется задавать размер с помощью функции ArrayResize(), исполняющая система терминала сама позаботится об этом.

Vamos a https://www.mql5.com/ru/docs/array/arrayisdynamic, ejecutamos el código y de repente descubrimos que:

2022.01.24 21:25:27.543 t (NZDUSD,D1) 3. Comprobación de la memoria intermedia del indicador:

2022.01.24 21:25:27.543 t (NZDUSD,D1) Tamaño antes de la liberación de memoria = 7278

2022.01.24 21:25:27.543 t (NZDUSD,D1) Esto es un array dinámico = Ninguno

2022.01.24 21:25:27.543 t (NZDUSD,D1) Tamaño tras la liberación de memoria = 0

al mismo tiempo:

double ExtBuff[];      // индикаторный буфер
SetIndexBuffer(0,ExtBuff);

Miro en el libro y veo un higo. ¿O hemos sido engañados todo este tiempo?

¿O tal vez es dinámico una vez (en la primera inicialización) y luego eso es todo?

 
x572intraday #:

No puedo deshacerme de ArrayResize(), que supuestamente es una matriz dinámica de búferes indicadores cuyo tamaño debería ser controlado por el propio terminal y que supuestamente no necesita ser redimensionado manualmente:

https://www.mql5.com/ru/docs/series/bufferdirection:

Vamos a https://www.mql5.com/ru/docs/array/arrayisdynamic, ejecutamos el código y de repente descubrimos que:

Al mismo tiempo:

Miro en el libro y veo un higo. ¿O hemos sido engañados todo este tiempo?

¿O tal vez es dinámico una vez (en la primera inicialización) y luego eso es todo?

22:23:17.002 Dynamic EURCAD,H1: +============================+

0 22:23:17.002 Dynamic EURCAD,H1: 1. Comprobación de una matriz dinámica:

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño antes de la liberación de memoria = 100

0 22:23:17.002 Dynamic EURCAD,H1: Esto es Dynamic Array = Yes

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño después de liberar la memoria = 0

0 22:23:17.002 Dynamic EURCAD,H1: 2. Comprobación de la matriz estática:

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño antes de liberar memoria = 100

0 22:23:17.002 Dynamic EURCAD,H1: Esto es un array dinámico = Ninguno

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño después de liberar la memoria = 0

0 22:23:17.002 Dynamic EURCAD,H1: 3. Compruebe el búfer del indicador:

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño antes de liberar memoria = 2725

0 22:23:17.002 Dinámica EURCAD,H1: Esta es una matriz dinámica = Sí

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño después de la liberación de memoria = 0

0 22:23:24.754 Dynamic EURCAD,H1: uninit reason 1

0 22:23:24.758 Indicador personalizado Dynamic EURCAD,H1: eliminado

Esto es a las 4.

 
x572intraday #:

Quería evitar la necesidad de redimensionar manualmente el array dinámico simplemente asignándolo como un buffer indicador. Pero no puedo deshacerme de ArrayResize() como si se tratara de un array dinámico de búfer indicador cuyo tamaño debe ser controlado por el propio terminal y que no debe ser redimensionado manualmente:

https://www.mql5.com/ru/docs/series/bufferdirection:

Vamos a https://www.mql5.com/ru/docs/array/arrayisdynamic, ejecutamos el código y de repente descubrimos que:

Al mismo tiempo:

Miro en el libro y veo un higo. ¿O nos han engañado todo este tiempo?

¿O tal vez es dinámico una vez (en la primera inicialización) y luego ya está?

sí, entonces eso es todo :-)

...después de SetIndexBuffer es imposible utilizar ArrayResize y desde el punto de vista del programa, el array es estático, con un tamaño predefinido (controlado externamente)

 
Alekseu Fedotov #:

22:23:17.002 Dynamic EURCAD,H1: +============================+

0 22:23:17.002 Dynamic EURCAD,H1: 1. Comprobación de una matriz dinámica:

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño antes de la liberación de memoria = 100

0 22:23:17.002 Dynamic EURCAD,H1: Esto es Dynamic Array = Yes

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño después de liberar la memoria = 0

0 22:23:17.002 Dynamic EURCAD,H1: 2. Comprobación de la matriz estática:

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño antes de liberar memoria = 100

0 22:23:17.002 Dynamic EURCAD,H1: Esto es un array dinámico = Ninguno

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño después de liberar la memoria = 0

0 22:23:17.002 Dynamic EURCAD,H1: 3. Compruebe el búfer del indicador:

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño antes de liberar memoria = 2725

0 22:23:17.002 Dinámica EURCAD,H1: Esta es una matriz dinámica = Sí

0 22:23:17.002 Dynamic EURCAD,H1: Tamaño después de la liberación de memoria = 0

0 22:23:24.754 Dynamic EURCAD,H1: uninit reason 1

0 22:23:24.758 Indicador personalizado Dynamic EURCAD,H1: eliminado

Esto es a las 4.

¡Fantástico! ¿Qué es esta magia? Acabo de comprobar en EURCAD,H1 - de nuevo no.

¿Y qué es el 4? Sólo hay tres puntos en el ejemplo.

 
x572intraday #:

¡Fantástico! ¿Qué es esta magia? Acabo de comprobar en EURCAD,H1 - "No" de nuevo.

¿Y qué es el 4? Sólo hay tres puntos en el ejemplo.

Terminal MT4

 
x572intraday #:

¡Fantástico! ¿Cuál es la magia? Acabo de comprobar en EURCAD,H1 - "No" de nuevo.

¿Y qué es el 4? Sólo hay tres puntos en el ejemplo.

0 23:33:06.088 test (EURUSD,D1) +============================+

0 23:33:06.088 test (EURUSD,D1) 1. Comprobación de la matriz dinámica:

0 23:33:06.088 test (EURUSD,D1) Tamaño antes de la liberación de memoria = 100

0 23:33:06.088 test (EURUSD,D1) Esta es una matriz dinámica = Sí

0 23:33:06.088 test (EURUSD,D1) Tamaño tras la liberación de memoria = 0

0 23:33:06.088 test (EURUSD,D1) 2. Prueba de matriz estática:

0 23:33:06.088 test (EURUSD,D1) Tamaño antes de liberar memoria = 100

0 23:33:06.088 test (EURUSD,D1) Este es un array dinámico = Ninguno

0 23:33:06.088 test (EURUSD,D1) Tamaño tras la liberación de memoria = 100

0 23:33:06.088 test (EURUSD,D1) 3. Comprobar el buffer del indicador:

0 23:33:06.088 test (EURUSD,D1) Tamaño antes de liberar memoria = 1054

0 23:33:06.088 test (EURUSD,D1) Esto es un array dinámico = Ninguno

0 23:33:06.088 test (EURUSD,D1) Tamaño tras la liberación de memoria = 0


Terminal MT5, sin pensamientos.

 
x572intraday #:

Quería evitar la necesidad de redimensionar manualmente el array dinámico simplemente asignándolo como un buffer indicador. Pero no puedo deshacerme de ArrayResize() como si se tratara de un array dinámico de búfer indicador cuyo tamaño debe ser controlado por el propio terminal y que no debe ser redimensionado manualmente:

https://www.mql5.com/ru/docs/series/bufferdirection:

Vamos a https://www.mql5.com/ru/docs/array/arrayisdynamic, ejecutamos el código y de repente descubrimos que:

Al mismo tiempo:

Miro en el libro y veo un higo. ¿O hemos sido engañados todo este tiempo?

¿O tal vez es dinámico una vez (en la primera inicialización) y luego eso es todo?

La matriz del buffer es dinámica. En MQL, las matrices dinámicas tienen signos de objetos, por lo que entendí al trabajar con ellas (como en los lenguajes de ultra alto nivel). Pero si declaras un array dinámico como un buffer (usando SetIndexBuffer), esta área de memoria se reservará. Por eso la mayoría de las funciones estándar no pueden cambiar su tamaño. A veces utilizo matrices de objetos como topes indicadores. Y si lo hago, la memoria de dichas matrices se libera en el destructor del objeto. Así, se permite la liberación de la memoria del buffer indicador por parte de la propia aplicación(u objeto). Pero esto no significa que el array pueda ser liberado justo durante el funcionamiento del indicador. Todo debe hacerse con prudencia.

 

Por la tarde

Me podéis aconsejar, estoy intentando escribir un Expert Advisor, y cuando lo pruebo ocurre una cosa extraña...

Tengo una función

CalcAngleTrend(NormalizeDouble((a[0]-a[1]), MA_DIGITS));

double CalcAngleTrend(double d)
 {
  double a = (double) ((atan(d*pow(10,_Digits-2)))*(180/M_PI)*coefAngle);
Print("d: ", d);
  return(NormalizeDouble(a, ANGLE_DIGITS));
 }

¿Cuál es la situación, empiezo una instancia de la EA que se ejecuta en un gráfico, y ejecutar el segundo en el modo de depuración en el mismo gráfico con MT4
Los datos de entrada para la función es la misma, pero los datos de salida es diferente!!!? Yo no entiendo algo, parece...(

Это выдает запущеный вариант:

2022.01.25 15:01:12.880 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:12.880 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:12.880 USDJPY,M5: Angle Slow: +1.70580000
2022.01.25 15:01:12.880 USDJPY,M5: Angle Fast: -6.96560000

это в режиме отладки:

2022.01.25 15:01:14.330 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:14.330 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:14.330 USDJPY,M5: Angle Slow: +4.26450000
2022.01.25 15:01:14.330 USDJPY,M5: Angle Fast: -17.41390000

¡¡aconséjame en qué dirección buscar la información!!

PS: calculado la diferencia de exactamente 2,5 veces la salida
 
Владимир Казаков escribir un Expert Advisor, y cuando lo pruebo ocurre una cosa extraña...

Tengo una función

¿Cuál es la situación, ejecuto una instancia de la EA en un gráfico, y ejecutar el segundo en el modo de depuración en el mismo gráfico con MT4
Los datos de entrada para la función es la misma, pero los datos de salida es diferente!!!? Yo no entiendo algo, parece...(

¿puede decirme en qué dirección buscar la información?

PS: calculado la diferencia de exactamente 2,5 veces la salida

Se trata de la fórmula para calcular el ángulo. En el código se puede ver que para su cálculo se utiliza sólo una coordenada y algún coeficiente, cuya finalidad no está clara. ¿Qué es esto? Por favor, explique qué datos está utilizando para calcular el ángulo.