Emulación de ticks de un EA/indicador - página 2

 
Meat:

Tu código, en primer lugar, no se limita a emular un tic, sino que obliga a que el gráfico se actualice con el historial correspondiente en cada tic. ¿Acaso miras a veces el archivo de registro? Cuando te apetezca, echa un vistazo a ver qué pasa ahí. Y estimar lo que habrá en un día más o menos. Por no hablar de la carga en su sistema y el canal de Internet.

Si en lugar de actualizar el gráfico en su código emulamos el tick, se producirán bucles (es decir, el indicador se pondrá en marcha sin parar) y, en consecuencia, el terminal se colgará.

¿Por qué tengo que actualizar sin cargar el historial? El refresco forzado del gráfico es una emulación de ticks.

Aquí está el registro después de 2500 ticks:

00:51:32 Check_UpdateChart EURUSD,M1: cargado con éxito
00:52:48 Check_UpdateChart EURUSD,M1: uninit reason 1
00:52:48 Check_UpdateChart EURUSD,M1: eliminado

No hay nada que cuelgue. La emulación está hecha para que el indicador haga un bucle. En otras palabras, se activa por sí mismo.
 
Zhunko:

¿Por qué hay que actualizar sin cargar el historial? Forzar la actualización del gráfico es una emulación de garrapatas.

Aquí está el registro después de 2500 ticks:

00:51:32 Check_UpdateChart EURUSD,M1: cargado con éxito
00:52:48 Check_UpdateChart EURUSD,M1: uninit reason 1
00:52:48 Check_UpdateChart EURUSD,M1: eliminado

No hay nada que cuelgue. La emulación está hecha para que el indicador haga un bucle. Es decir, se pone en marcha por sí mismo.


Pensé que lo había escrito claramente: "log log". Entonces, ¿por qué me enseñas el registro de expertos? Por lo visto, tenía razón, nunca miras ahí. No me extrañaría que tuvieras la mitad de tu disco duro lleno de estos registros :)

La actualización del historial y la emulación de los ticks son cosas diferentes. Los ticks entrantes desde el servidor no actualizan el historial (es decir, las barras anteriores). Si esto ocurriera, el terminal estaría desperdiciando mucho tráfico y recursos.

Por lo tanto, no está claro por qué necesita actualizarlo en cada tick, lo que pone a cero IndicatorCounted(), y por lo tanto requiere comprobar todo el historial en cada tick. Son muchos recursos desperdiciados.

 
Meat:

Los ticks entrantes del servidor no actualizan el historial (es decir, las barras anteriores). Si lo hicieran, el terminal consumiría mucho tráfico y recursos.

¿Pero qué hacer, si por ejemplo 1 barra = 2 ticks )))))? En mi caso las garrapatas actualizan el historial ?
 
IgorM:

colocado después de

Lo tengo en el registro:

23:39:01 test EURUSD,H1: cargado con éxito
23:39:01 test EURUSD,H1: PostMsgAddr =1977398342
23:39:01 test EURUSD,H1: inicializado
23:39:01 test EURUSD,H1: ciclo completado....

Sí, no está claro lo que pasa... Prueba esto entonces: En la sección de importación #import"user32.dll" añade una función:

CallWindowProcA(int lpPrevWndFunc[], int hWnd, int Msg, int wParam, int lParam);

Y al final de la función SetMyTimer añadir una línea: CallWindowProcA(code,0,0,0,0);

Y con algún indicador que funcione en paralelo comprobar si se genera un tick en este momento.

 
solar:
¿Y si tengo por ejemplo 1 barra = 2 ticks ))))) En mi caso las garrapatas actualizan el historial?
Por supuesto, el bar actual está siempre actualizado, pero estábamos hablando de la historia en general.
 
Meat:


Lo he escrito claramente: "el tronco". Entonces, ¿por qué me muestras el registro del Asesor Experto? Aparentemente tenía razón, nunca miras ahí - no me sorprende si la mitad de tu disco duro ya está lleno de estos registros :)

Y no confundas los conceptos. Laactualización de la historia y la emulación de ticks son cosas diferentes. Los ticks entrantes del servidor no actualizan el historial (es decir, las barras anteriores). Si lo hicieran, el terminal consumiría enormes cantidades de tráfico y recursos.

Por lo tanto, no está claro por qué necesita actualizarlo en cada tick, lo que pone a cero IndicatorCounted(), y por lo tanto requiere comprobar todo el historial en cada tick. Son muchos recursos desperdiciados.

El registro también está vacío, pero por alguna otra razón. Utilizo el limpiador de la consola después de cambiar el historial. Tengo mi propio registro.

El registro de MT4 no me molesta en absoluto. Metacquotes ha declarado en repetidas ocasiones que la tala de árboles es lo último que hay que hacer. No es una prioridad. No consume ningún recurso. Sólo hay que limpiarlo a tiempo, eso es todo.

En cuanto a IndicatorCounted()... No lo uso. Mis Indicadores son cajas vacías para sacar información del Asesor Experto. Creo que es perjudicial el uso de indicadores en MT4. Los hilos de la interfaz son lentos y trabajan 3 veces más lento que los Asesores Expertos.

Resaltar es, por supuesto, correcto, pero ¿merece la pena molestarse tanto en separar?

Aquí está el registro de las actualizaciones de 415:

03:00:44 Indicador personalizado Check_UpdateChart EURUSD,M1: cargado con éxito
03:00:46 HistoryCenter: sincronizar 'EURUSD1
03:00:46 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:47 HistoryCenter: sincronizar 'EURUSD1'
03:00:47 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:47 HistoryCenter: sincronizar 'EURUSD1'
03:00:47 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:48 HistoryCenter: sincronizar 'EURUSD1'
03:00:48 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:48 HistoryCenter: sincronizar 'EURUSD1'
03:00:49 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:49 HistoryCenter: sincronizar 'EURUSD1'
03:00:49 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:50 HistoryCenter: sincronizar 'EURUSD1'
03:00:50 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:51 HistoryCenter: sincronizar 'EURUSD1'
03:00:51 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:51 HistoryCenter: sincronizar 'EURUSD1'
03:00:52 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:52 HistoryCenter: sincronizar 'EURUSD1'
03:00:55 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:55 HistoryCenter: sincronizar 'EURUSD1'
03:00:55 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:55 HistoryCenter: sincronizar 'EURUSD1'
03:00:55 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:55 HistoryCenter: sincronizar 'EURUSD1'
03:00:56 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:00:56 HistoryCenter: sincronizar 'EURUSD1'
03:00:57 Indicador personalizado Check_UpdateChart EURUSD,M1: eliminado
03:00:59 HistoryCenter: 2 barras importadas en 'EURUSD1'
03:01:01 MetaTrader build 438 detenido

No me parece importante para probar el rendimiento del indicador durante el fin de semana. El registro se puede limpiar manualmente después del trabajo.

Pero es más fácil insertar una línea de código al final de start() que insertar su código. No tiene sentido complicarlo.

 

Tengo XP - parece que funciona - luego se bloquea el terminal ....

Ya sea en el código del indicador - o en el código del EA - o por sí mismo - el resultado es el mismo - el terminal se bloquea después de unos 15 - 50 segundos ...

Así que tienes algo mal...

pero no es una mala idea...

 

¿Hay alguna forma de hacerlo similar para un indicador?

¿Simplemente señalando con el cursor el punto en el que quiero ver la lectura del indicador (en ese momento)?

 

Zhunko, bueno, si todo es no estándar (su propio registro, su propia implementación de indicadores, etc.), entonces ¿por qué estás empezando toda esta conversación? En realidad estamos discutiendo el trabajo específicamente con MT4, no con nuestros propios desarrollos.

En mi primer post señalé específicamente que mi código será útil si la tarea es prescindir de los enlaces externos, es decir, implementar un Asesor Experto/indicador autosuficiente que utilice sólo las librerías del sistema. Y si estás utilizando tus propios desarrollos, entonces no es aplicable a ti.

Y en general, no entiendo por qué tengo que "limpiar manualmente el registro después del trabajo", si es más fácil no desordenarlo. Al fin y al cabo, por lo que he entendido, implementas tus desarrollos en DLL. Entonces qué te impide poner el mismo temporizador allí, como sugerí aquí. Pero por alguna razón prefieres todo tipo de bailes con pandereta y limpiar el registro. Mi código te molesta, mientras que a ti te da pereza limpiar el registro todos los días :)

 
elmucon:

Tengo XP - parece que funciona - luego se bloquea el terminal ....

Ya sea en el código del indicador - o en el código del EA - o por sí mismo - el resultado es el mismo - el terminal se bloquea después de unos 15 - 50 segundos ...

Así que tienes algo mal...

pero no es una mala idea...


Sí, tal vez sea un poco exagerado. No soy muy experto en ensamblador, así que no me juzgues con demasiada dureza :) Intentaré averiguar cuál es el problema.
Razón de la queja: