Fehler, Irrtümer, Fragen - Seite 2445

 
fxsaber:

Nein, es ist ex5, das den Hash in opt erhält. Aus diesem Grund wird bei der Neukompilierung der Cache des Testers zurückgesetzt.

Dann werden Entwickler nicht helfen, schreiben Sie Ihren eigenen Code-Analysator.

 
fxsaber:

Nein, es ist der Hash von ex5, der in opt eingeht. Dies ist der Grund, warum die Neukompilierung den Cache des Testers zurücksetzt.

Nicht ganz.

Nicht bei jeder Neukompilierung von Expert Advisor wird der Cache des Testers zurückgesetzt.

Wenn der Expert Advisor abhängige Komponenten hat: Bibliotheken, benutzerdefinierte Indikatoren und/oder DLL, werden die Hashes dieser Komponenten mit dem Hash des Expert Advisors vermischt.

Wie der EA-Hash berechnet wird und wo er im EA gespeichert ist, gehört zu den technischen Geheimnissen.

Deshalb habe ich Ihnen auch gleich gesagt: "Nein".

 
fxsaber:

in der Tat:

  1. wir legen die mql-Datei in ein uchar-Array
  2. Kommentare löschen //... и /* ... */
  3. alle Leerzeichen, Tabulatoren, Zeilenvorschübe und sogar alle Klammern und Anführungszeichen entfernen
  4. aus dem, was übrig ist, die Raute lesen

Die erste Annäherung wird gut funktionieren.

Wenn Sie den Namen der Variablen (Funktion) ändern oder eine neue, nicht verwendete Variable hinzufügen, die Reihenfolge ändern usw., ändert sich natürlich der Hash, nicht aber die Logik. Die Kontrolle dieser Dinge ist bereits mega kompliziert. Es ist, als würde man seinen eigenen Linker schreiben.

 
Slava:

Wie der Hash des EA berücksichtigt wird, wo er im EA gespeichert wird, ist eines der technischen Geheimnisse.

Deshalb habe ich Ihnen auch gleich gesagt: "Nein".

Der Punkt ist, dass es keine Aufforderung zur Angabe eines MD5-Hashes gab. Sie benötigen einen beliebigen Hash des nativen Codes. Zum Beispiel die Summe von jedem dritten Byte.

Wenn diese Summe anders ist, dann hat sich mit großer Wahrscheinlichkeit der Expert Advisor (Logik - nativer Code) geändert.


D.h., ganz einfach! Leider gibt es zur Zeit keinen solchen Mechanismus.

 
Nikolai Semko:

Die Kontrolle dieser Dinge ist bereits mega kompliziert. Es ist, als würde man seinen eigenen Linker schreiben.

Deshalb spreche ich von einer einfachen Lösung.

 

Haben die Entwickler etwas zu diesem Thema zu sagen?

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

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

Deshalb spreche ich von einer einfachen Lösung.

Dann brauchen Sie eine kompetente Argumentation für das MQ.
Wozu dient es? Wie und in welchen Fällen kann es die Fähigkeiten von mql verbessern? Und das nicht nur, um eine persönliche Laune zu befriedigen.
Mir persönlich ist im Moment nicht klar, warum das Programm wissen muss, dass es geändert wurde. Bei welchen Aufgaben kann sie nützlich sein? Wenn es überhaupt für etwas gebraucht wird, dann reicht es aus, den Hash von mql-code zu erhalten , nachdem man "überflüssig" gelöscht hat. Und es sind wirklich nicht mehr als 20 Zeilen Code nötig.

Mehr noch, selbst wenn MQ mitmacht und einen solchen Hash für den öffentlichen Gebrauch freigibt, garantiert ein solcher Hash nicht, dass die Logik geändert wurde. Zum Beispiel, wenn man die Reihenfolge von etwas ändert.

 

Versehentlich aktualisiert - es funktioniert wieder nicht - Kompilierungsfehler:

#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
}

Vorher war es in Ordnung (Baujahr 1961)

 

Auch hier - jetzt (Build 2025) - gibt es einen Fehler:

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

Und vorher (Baujahr 1961) war es in Ordnung

 

Helfen Sie mir, dieses Problem zu lösen: Wie kann ich erreichen, dass normale Zeichen anstelle der aktuellen Zeichen übertragen werden?