Características del lenguaje mql5, sutilezas y técnicas - página 130
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Gracias. Utilizar la función ArraySwap no se me habría ocurrido.
Entiendo que su función funcionará tanto al aumentar como al disminuir el tamaño, es decir, como un análogo completo de ArrayResize.
¿No es mejor llamar simplemente a la función estándar ArrayResize cuando se amplía un array, en lugar de llamar a las tres funcionesArraySwap,ArrayResize,ArrayCopy?
p.s He probado tu versión y la mía con dos copias al reducir el array MqlTick de 1.000.000 a 500.0000. Su versión lo hace en 22 milésimas de segundo. El mío lo hace en 37-38.¿No es mejor llamar simplemente a la función estándar ArrayResize cuando se amplía un array que llamar a tres funcionesArraySwap,ArrayResize,ArrayCopy
Lo pensé, pero no lo hice, porque en realidad hay más sutilezas. Por eso decidí quedarme con la versión lacónica.
Una de las sutilezas es esta. Si tomas un array de estructuras con constructores/destructores, ArrayResize los llamará en cualquier dirección en una cantidad igual a la diferencia de valores.
Pero aplicar ArrayCopy es llamar a todos los constructores. La eliminación de ArrayTmp es una llamada a todos los destructores. Así que ArrayResize2 no es realmente ArrayResize.
Tras la optimización, verá lo siguiente
Si desactiva el Asesor Experto en modo marco y lo ejecuta en modo estándar, mostrará los mismos datos que obtuvo durante la optimización.
Este enfoque le permite volver a los resultados de la optimización muchas veces.
SZY En el gráfico que se abre en la Terminal para el modo frame, no se puede ejecutar ningún Asesor Experto. Por lo tanto, si desea ejecutarlo en modo estándar, deberá hacerlo en un gráfico que no haya sido abierto por marcos.
fxsaber:
extern теперь является жестко заданным макросом
En consecuencia, no siempre será posible hacer que el código de MT5 mq4 funcione sin cambios.
No hay cambios en la documentación. ¿Puede explicar esto con más detalle?
No hay ningún cambio en la documentación. ¿Puede explicar esto con más detalle?
Dicho código
siempre generará una advertencia. Estoy siendo un poco duro con lo de "imposible". Es posible anularlo, por lo que siempre se colgará un aviso en estas situaciones.
Uno de los matices es este. Si tomas un array de estructuras con constructores/destructores, entonces ArrayResize en cualquier dirección los llama en un número igual a la diferencia de valores.
Pero aplicar ArrayCopy es llamar a todos los constructores. La eliminación de ArrayTmp es una llamada a todos los destructores. Así que ArrayResize2 no es realmente ArrayResize.
Entonces probablemente sería más correcto llamarlo ArrayReallocate, aunque no le veo ningún sentido a esa recopilación forzada. Frenado innecesario.
Liberar memoria es la única razón.