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
Para todas las barras el indicador se calcula una vez - es decir, puede ser un poco lento en el arranque en la historia agromáxima.
Posteriormente se recalcula un par de valores - todo debe funcionar :)
No hay que olvidar que los programadores son personas a las que les gusta saltar manualmente los plazos en su tiempo libre de programación. Y cada nuevo marco de tiempo es otra desinicialización e inicialización de la anatomía del indicador, todos los cálculos se realizarán de nuevo. Por lo tanto, ArrayInitialize() se activará cada vez, al saltar de un TF a otro. Si el indicador es complejo, con varios búferes que necesitan reiniciarse, los retrasos se acumulan, y ni siquiera hablo del desbordamiento de la memoria, que se asigna automáticamente.
¡Qué ingenuo soy! Siempre me encuentro con la confianza de que la inicialización en OnInit() es suficiente, y puedo despilfarrar con ella en esta fase, hundiendo mi cabeza en tareas más urgentes en OnCalculate(). Pero no, no lo hago. Por cierto, la escritura más o menos exitosa de indicadores complejos no me ha permitido entender claramente por qué ArrayInitialize() debe estar contenida exactamente en OnCalculate(), verificándola en cada tick, en lugar de la inicialización primaria y única en OnInit(). A través de mi experiencia, sólo he encontrado casos en los que rechazar de esta variante inmediatamente causó problemas, pero sobre esto voy a discutir más adelante. Por ahora me gustaría señalar que desde el punto de vista de la simple y obvia lógica humana (más que de la lógica del código) ArrayInitialize() en OnCalculate() parece muy reprobable, teniendo en cuenta que nunca me he encontrado con casos en los que
La primera vez que el programa se activa más de una vez - en el arranque inicial. Es decir, aparecen nuevos fractales y la condición es silenciosa. Entonces, ¿qué diablos hace en OnCalculate()?Soy aún más ingenuo en mi creencia de que
Se supone que estoy obligado a heredar automáticamente esas matrices de limpieza y el efecto del algoritmo económico del Fractals.mq5 original, que también está ahí, pero en una forma ligeramente diferente. Pero - ¡¡¡una y otra vez no!!! Tuve que pensarlo dos veces y crear mi propio código copiando del indicador, cuyo mango uso. Recuerdo cómo analicé el código de los indicadores por primera vez y me quedé sorprendido al comparar Fractals.mq5 y el ejemplo de iFractals de la Ayuda, y me di cuenta de que el segundo código era mayor que el primero (incluso después de abreviarlo mucho). No lo sé. Lánzame todos los sombreros, pero los programadores realmente esperan enchufar algo en su código en una línea refiriéndose a toda una biblioteca, clase o algo más voluminoso allí, pero aquí...
Ahora revelaré la esencia del problema que mencioné antes. Adjunto el código del indicador iFractals simplificado a los fractales superiores. En el ejemplo inicial, el búfer se llena para toda la historia. Cambiemos la situación copiando sólo una parte de la historia. Comentemos la asignación de los valores copiados para el primer cálculo, y establezcamos nuestro propio valor más pequeño:
values_to_copy=100; // то же, что amountAhora saltemos en los marcos temporales y horroricémonos con los artefactos fractales que han aparecido. No se me ocurrió nada mejor que copiar automáticamente el bloque de código no heredado de limpieza de matrices de Fractals.mq5 para limpiar esa parte de la historia en la que los fractales no son necesarios: Ahora todo(¡¡¡con mucha redundancia!!!) se limpia perfectamente, y al mismo tiempo Print() muestra cuándo y cuántas veces funcionará la reinicialización, además de mostrar el tamaño del buffer. Podemos ver que no son 100, sino mucho más. Si necesito limpiar el polvo de una mesa, limpio el polvo de la mesa en lugar de limpiar todo el piso. ¿O el truco consiste en convencerme a toda costa de que los excesos de memoria y tiempo no son nada, de que se puede encontrar una forma de resolver el problema indirectamente y de ignorar el flagrante devorador de recursos que escapa a mi control?Un fx, algún tamaño tendrá que ser fijado... Por qué hacer un bucle curvo con límites diferentes, cuando se puede hacer un bucle directo con los mismos límites)
De lo contrario, el indicador se basará en muletas.
Sinceramente, no quería ser una carga, pero entendía de antemano que los simpatizantes escarbarían en todo el código. Es como en la anécdota de Chapay y Petka, cuando Vasili Ivanovich regresó, pidió una pala - resultó estar rota - el caballo fue enterrado - el pueblo fue atacado por los blancos mientras Chapay estaba fuera. Consciente de que lo más probable es que no aparezcan los que quieran entrar en detalles del código de otras personas, sólo puedo referirme a la salida del indicador, que (aparte de los frenos y otras deficiencias) será finalmente: https://www.mql5.com/ru/forum/1111/page577#comment_119227. Y ahora piense en ello y diga, ¿es razonable pensar que todo es sencillo allí y sugerir soluciones aparentemente obvias?
No en vano simplifico y limito el código antes de pedir algo en alguna parte concreta. Por eso te pido que te limites sólo a eso, y que no exhales todo el caballo, a no ser que haya un aficionado...
En realidad, el cuarto búfer -especial- es en principio más largo que los tres primeros (igual de largo), y gracias a SetIndexBuffer() ¡se extiende por todo el historial! Si ampliamos los límites del bucle hasta el cuarto búfer y al mismo tiempo redimensionamos las tres primeras matrices hasta él, entonces al menos el número de elementos del bucle aumentará, lo que incrementará el tiempo estimado de lectura del segmento de elementos del búfer completamente a la izquierda. Esto es sólo la punta del iceberg de los problemas que surgirán con esta variante del algoritmo. Además, se necesitará más tiempo para reiniciar otros búferes porque su tamaño es mayor ahora. El cuarto array especial no se puede rellenar explícitamente con EMPTY_VALUE en el resto, ya que el indicador tiene una severa transposición de fractales de otros timeframes según un determinado algoritmo, donde no hay correspondencia entre los índices de los tres primeros buffers y el cuarto buffer...
//y los valores EMPTY_VALUE se asignan a los elementos 0 y 1 de las matrices, mm... y en las tres últimas barras)
¿Cómo es eso? ¿Por qué no todos? No entiendo esto. ¿Puede explicarlo? En realidad, no me refiero a asignar sólo valores reales (efectivos), sino al inevitable barrido de todo el buffer. ArrayInitialize(), así como muchas otras funciones de array, se basan en un bucle que está implícito para los programadores finales de MQL.
La pregunta sobre exceso de memoria sigue siendo válida, y los desarrolladores deberían pensar en introducir un parámetro adicional enArrayInitialize() que especifique el número y, mejor aún, los límites de reinicialización del buffer.
P.D.: Supongo que puedo adivinar por qué ArrayInitialize() en OnInit() no es eficiente aquí. Los búferes son dinámicos, cambian de tamaño, y en OnInit() se inicializan con valores sólo una vez y para la longitud actual, sin conocer aún los tamaños reales de los búferes en OnCalculate().
El indicador del visualizador no funciona:
En el terminal en línea, funciona bien:
Inserto las siguientes líneas en el código del Asesor Experto
Pongo estos tres indicadores en un gráfico limpio y guardo la plantilla como Asesor Experto. La foto está en línea en mi post anterior.
Estoy ejecutando el Asesor Experto en el visualizador.
1. Mostrar la plantilla guardada
2. Intente ejecutar la visualización sin la plantilla (es decir, borre previamente el archivo tpl correspondiente). En la última versión, 555, los indicadores personalizados añadidos automáticamente deberían mostrarse correctamente.
Todo funciona. Gracias.
Se ha eliminado la plantilla. En experto en OnInit() prescrito:
Envío del archivo *.tpl
Ahora lo he intentado de nuevo con la plantilla - no funciona. Quitando la plantilla - funciona.
x100intraday:
Ahora piénsalo y dime, ¿merece la pena creer que todo allí es sencillo y sugerir soluciones aparentemente obvias?
todos los genios son simples.
No pude hacer el resto. La anécdota de la pregunta en el foro, cómo quitar las amígdalas me recuerda :)
No estoy seguro de cómo hacerlo... No estoy seguro de cómo hacerlo.
todos los genios son simples.
No pude hacer el resto. La anécdota de la pregunta en el foro, cómo quitar las amígdalas me recuerda :)
El ejemplo de los fractales de los indicadores ortodoxos imho limitada. tal vez le ayudará ...
Siguiente código:
Salidas:
2011.12.05 22:01:28 RectLabel (EURUSD,H1) pos = {12, 176314750}
2011.12.05 22:01:28 RectLabel (EURUSD,H1) other = {123, 456}
Entonces, la lista de inicialización no funcionó, hay basura en la estructura. ¿Es un error o no?
Desconecté dos agentes de la nube y siguen conectándose a los servidores de la nube cada 30 segundos.
MO 0 Red 00:00:17 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
LK 0 Red 00:00:47 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
RG 0 Red 00:01:17 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
Red NS 0 00:01:48 conectada a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
RO 0 Red 00:02:18 conectada a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
OK 0 Red 00:02:48 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
Red MG 0 00:03:18 conectada a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
DR 0 Red 00:03:48 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
DN 0 Red 00:04:18 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
EJ 0 Red 00:04:48 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
GF 0 Red 00:05:18 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
RR 0 Red 00:05:48 conectada a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
NN 0 Red 00:06:18 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
KJ 0 Red 00:06:48 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
QF 0 Red 00:07:18 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
HQ 0 Red 00:07:48 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
PM 0 Red 00:08:18 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
QI 0 Red 00:08:48 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
KE 0 Red 00:09:18 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
NQ 0 Red 00:09:51 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
OM 0 Red 00:10:18 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
RI 0 Red 00:10:48 conectada a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
LE 0 Red 00:11:18 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
EP 0 Red 00:11:48 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
IL 0 Red 00:12:18 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
HH 0 Red 00:12:48 conectado a 2.agentes.mql5.com (a través de un servidor proxy 192.168.0. )
FD 0 Red 00:13:18 conectado a 2.agentes.mql5.com (a través de un servidor proxy)
Desconecté dos agentes de la nube y siguen conectándose a los servidores de la nube cada 30 segundos.
Vamos a servicedesk.
Por favor, especifique cómo se ha desconectado exactamente. ¿Has borrado (congelado) los servicios? Por favor, adjunte los registros de los agentes problemáticos.
La configuración del proxy en sus registros es algo extraña. ¿Escribiste la configuración del proxy en la configuración de tu agente? Por favor, adjunte el archivo common.ini de su gestor de agentes a la solicitud.