Mi enfoque. El núcleo es el motor. - página 124
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
Porque en lugar de OrderOpenPrice poner OrderOpenTime()
Sí. Me confundí. :)
Tengo que admitir que me sorprendieron un poco los resultados de la prueba.
Por eso quería que lo hicieras todo tú, no dar soluciones prefabricadas, que son como guisantes contra la pared.
He oído hablar de los punteros a las funciones. Pero tengo muy pocas funciones. Es por esto que no tengo espacio y necesito usar OOP.
Tengo un concepto de desarrollo diferente. Creo que el funcionamiento de los bloques multifuncionales holísticos es más eficiente que el de los grandes complejos de pequeñas funciones.
Más prometedor, desde el punto de vista del desarrollo de mecanismos.
Esa es mi opinión...
Tengo varios bloques grandes. Para aplicar la POO, hay que descomponerlas en pequeñas funciones, organizarlas en clases, y luego, utilizar punteros y otras cosas.
Pero no podré hacerlo. Simplemente porque pienso de forma diferente.
El concepto de OOP no coincide con las peculiaridades de mi forma de pensar, y no puedo expandirme en él. Esa es la razón.
Ten en cuenta, Nikolai, que en el tema del desarrollo programático no tengo ningún problema. Todo se desarrolla muy rápidamente.
Al mismo tiempo, los mecanismos funcionan bien.
Ahora domino las uniones, y veo su aplicación en una tarea particular, - escribir cadenas en un recurso.
Intentaré comprobar la velocidad y la carga de la CPU en el EA de prueba y publicaré el resultado.
Si es bueno, reconstruiré la comunicación entre el motor y el EA, haciéndolo sobre los recursos.
Para utilizar los recursos para pasar cadenas de longitud indefinida, estas cadenas deben escribirse en una matriz de caracteres.
Sin embargo, parece que su tamaño sólo se declara dentro de la unión y no cambia después.
He probado a redimensionar el array de char desde la unión, a través de ArrayResize, pero no tiene efecto.
Parece que el tamaño de la matriz char debe ser establecido de antemano. Y debe ser de tamaño máximo.
Aquí está el código:
Ahora está claro que hay que conocer de antemano el tamaño de la matrizchar en la unión. PorqueArrayResize(u.Char,StrSize) no lo cambia.
Así que tenemos que establecer el tamaño del array igual a la longitud de la cadena máxima...
Buenas noticias. Todo funciona bien.
La cadena se escribe en el recurso y es leída por otro EA en un gráfico diferente.
El procesador no está sometido a ninguna carga. La carga sólo se produce al llamar a la Alerta que imprime la cadena.
Aquí está el código de los Asesores Expertos:
1. Expert Advisor formando la cadena y escribiéndola en un recurso.
Un asesor leyendo una línea de un recurso en otro gráfico:
Utilizará recursos para la comunicación. El único inconveniente es que hay que establecer el tamaño máximo de la matriz de caracteres en la unión. Pero, no es necesario pensar en el tamaño de la cadena y el número de objetos MT.
Este método es más lento que el método de enlace de objetos MT, pero está bien.
Tienes una teoría interesante, aunque no coincide del todo con los resultados de mis experimentos, que publicaré a continuación.
Como muestra la prueba, es la inicialización de la matriz de píxeles lo que más carga la CPU.
Comprueba el EA de prueba a continuación.
Vuelve a leer la tarea:
Vasiliy Sokolov:
Peter, esta es la tarea. Hacer un panel que muestre las aperturas de órdenes actuales en MT4. No es necesario hacer una copia completa del panel del sistema, basta con hacer una simple tabla con las propiedades básicas de las órdenes abiertas: precio abierto, dirección, beneficio. El resto depende de ti. Lo principal es que cuando una orden se cierra, su indicación en la tabla también desaparece. Y viceversa, aparecería en esta tabla cuando se abra un nuevo pedido.
Aquí puede ver las dos operaciones necesarias de redibujado cuando la tabla cambia en la pantalla: 1. al cerrar una operación y 2. al abrir una operación. ¿Por qué redibujar los píxeles en el resto del tiempo?
¿Está resolviendo algún otro problema?
Vuelve a leer el problema:
Vasiliy Sokolov:
Aquí vemos dos operaciones de redibujado necesarias cuando la tabla cambia en la pantalla: 1. al cerrar una operación y 2. al abrir una operación. ¿Por qué redibujar los píxeles en otros momentos?
¿Está resolviendo algún otro problema?
Bueno, están redibujados exactamente como tú dices.
La carga del procesador aparece durante la animación:
Hay una reinicialización constante de los valores de la matriz de píxeles. Cada 16 milisegundos. Esto carga el procesador hasta un 40%.
Estaba tratando de averiguar cuál es exactamente la carga. Pensé que era guardar un recurso o leerlo. Resultó que era la reinicialización del array en el bucle de dibujo.
También resultó que una llamada constante de ObjectSetInteger(0, "MT object",OBJPROP_SELECTED,1); (cada 16 ms) también carga el procesador. En un 10% aproximadamente.
Utilizo esta llamada para decirle a otro EA que lea el recurso con los datos de la animación.
En total, obtiene +~50% de carga de la CPU durante la animación.