Errores, fallos, preguntas - página 2445

 
fxsaber:

No, es ex5 el que obtiene el hash en opt. Por esta razón, la recompilación restablece la caché del probador.

Entonces los desarrolladores no ayudarán, escribe tu propio analizador de código.

 
fxsaber:

No, es ex5 el que obtiene el hash en opt. Esta es la razón por la que la recompilación restablece la caché del probador.

No exactamente.

No todas las recompilaciones del Asesor Experto resetean la caché del probador.

Si el Asesor Experto tiene componentes dependientes: bibliotecas, indicadores personalizados, y/o dll, los hash de esos componentes se mezclan con el hash del Asesor Experto.

Cómo se calcula el hash de la EA y dónde se almacena en ella es uno de los secretos tecnológicos.

Por eso te dije enseguida: "No".

 
fxsaber:

de hecho:

  1. ponemos el archivo mql en un array uchar
  2. borrar comentarios //... и /* ... */
  3. eliminar todos los espacios, tabulaciones, saltos de línea, incluso todos los paréntesis y comillas
  4. de lo que queda leer el hash

La primera aproximación funcionará bien.

Por supuesto, si cambias el nombre de la variable (función) o añades una nueva variable sin usar, cambias el orden, etc., el hash cambiará, aunque la lógica no. Controlar estas cosas ya es mega complicado. Es como escribir tu propio enlazador.

 
Slava:

Cómo se considera el hash del EA, dónde se almacena en el mismo, es uno de los secretos tecnológicos.

Por eso te dije enseguida: "No".

La cuestión es que no se pidió un hash MD5. Necesitas cualquier hash del código nativo. Por ejemplo, la suma de uno de cada tres bytes.

Si esta suma es diferente, entonces con una gran probabilidad, el Asesor Experto (lógica - código nativo) ha cambiado.


Es decir, ¡simplemente! Desgraciadamente, por el momento no existe este mecanismo.

 
Nikolai Semko:

Controlar estas cosas ya es mega complicado. Es como escribir tu propio enlazador.

Por eso hablo de una solución sencilla.

 

¿Tienen los desarrolladores algo que decir sobre este tema?

https://smart-lab.ru/blog/535490.php

Черный вторник для одного трейдера в Открытии
Черный вторник для одного трейдера в Открытии
  • smart-lab.ru
Привет коллегам по цеху. Поднимите пожалуйста пост в топ, если не затруднит. Случилась одна неожиданная история, как говорится прилетело откуда не ждал. Сегодня ночью на NLMK-9.19 некто, пожелавший остаться неизвестным (на данный момент), слил или перелил 420000 рублей по четырем маркет сделкам 100,35,20,10 контрактов на счете в Открытии...
 
fxsaber:

Por eso hablo de una solución sencilla.

Pues entonces necesitas un argumento competente para MQ.
¿Para qué sirve? ¿Cómo y en qué casos puede mejorar las capacidades de mql? Y no sólo para satisfacer un capricho personal.
Personalmente no me queda claro en este momento por qué el programa necesita saber que ha sido cambiado. ¿En qué tareas puede ser útil? Si incluso se necesita para algo, entonces obtener el hash de mql-code después de borrar lo "superfluo" es suficiente. Y realmente no se necesitan más de 20 líneas de código.

Es más, aunque MQ se preste a dar dicho hash para uso público, sigue cambiando dicho hash no garantiza que la lógica haya sido cambiada. Por ejemplo, al cambiar la secuencia de algo.

 

Accidentalmente actualizado - no funciona de nuevo - error de compilación:

#define  MACRO1
#define  MACRO2(x, y)    y
#define  MACRO3          MACRO2(&, MACRO1)
class A {};
void f( A* ) { Print( 1 ); }
void f( A& ) { Print( 2 ); }
void OnStart()
{
        A a;
        f( MACRO3 a ); //Error: '&' - operand expected
}

Antes estaba bien (construcción 1961)

 

Aquí también - ahora (build 2025) hay un error:

#define  MACRO1( x )
#define  MACRO2          MACRO1( y ) void
#import "any.dll"
        MACRO2 f(); //Error: '(' - expressions are not allowed on a global scope
#import

Y antes (construcción 1961) estaba bien

 

Ayúdame a resolver este problema. ¿Cómo puedo conseguir que se transmitan los caracteres normales en lugar de los que tengo ahora?