Fehler, Irrtümer, Fragen - Seite 1405

 
Tapochun:
Können Sie mir bitte sagen, welche Spread-Werte an das Spread[]-Array übergeben werden, wenn OnCalculate() im Indikator aufgerufen wird? Höchst-/Mindest-/Durchschnittswerte pro Kerze?
Diejenigen, die das Terminal vom Server empfängt.
 

Es stellt sich die Frage nach der Reihenfolge, in der die .dll geladen wird. Wenn erklärt

#import "Test1.dll" //1
#import "Test2.dll" //2
#import

werden sie in umgekehrter Reihenfolge geladen, d.h. "Test2.dll" zuerst. Es scheint, dass es keinen Unterschied macht. Es stellte sich heraus, dass es einen Unterschied macht und in einigen Fällen (.dll erfordert eine bestimmte Reihenfolge des Ladens) schlägt es fehl: Sappot lädt 'Test1.dll'.
Es stellt sich
die Frage, ob die Lastreihenfolge auf direkt geändert werden soll, was aus der Sicht des Codes logischer wäre, oder ob sichergestellt werden soll, dass diese Reihenfolge in Zukunft nicht mehr geändert wird (so dass ein an die umgekehrte Reihenfolge angepasster Code nicht plötzlich nicht mehr funktioniert). Im Moment müssen wir den Code an die umgekehrte Reihenfolge anpassen.

 

Build 1191. Kompilierungsfehler: Fehler bei der Codegenerierung


Ich weiß nicht einmal, wo ich nach dem Grund dafür suchen soll. Aber in Build 1162 ist alles in Ordnung.

 
A100:

Build 1191. Kompilierungsfehler: Fehler bei der Codegenerierung


Ich weiß nicht einmal, wo ich nach dem Grund dafür suchen soll. Aber in Build 1162 ist alles in Ordnung.

Bitte senden Sie den Code an servicedesk.
 
Alexander:
Bitte senden Sie den Code an servicedesk.

Es ist sehr verstreut - ich werde versuchen, alles in eine Datei zu packen.

Anderer Code - beachten Sie die Zeit - er ist wahrscheinlich 20 Mal größer

 
Ilyas:

Bislang sind zwei Fälle bekannt:
1) In der Operation bool &= (boolscher Ausdruck)
2) Ein zusätzliches Komma in Initialisierungssequenzen: val={ {...},{...}, }

Hier ist der erste Fall - ich habe sehr viele solcher Operationen in meinem Code. Ich hatte vorher keine Probleme, als ich den 1159-Build hatte. Wann können wir mit Korrekturen rechnen?

 

Fehler bei der Codegenerierung

Ich habe den Quellcode an servicedesk geschickt: #1332553

 
Alexander:
Bitte senden Sie den Code an servicedesk.

Code-Erstellungsfehler


//build 1191
class A {};
class B : public A {};
void f( A& a ) {}
B *h() { return new B; }
void OnStart()
{
        f( h() );
}

Bitte passen Sie auf, dass Sie nicht so enden, wie ich es in der Tasche beschrieben habe. Wenn Sie es ohne * machen können, wie es jetzt funktioniert und vorher im folgenden Beispiel funktioniert hat

//build 1191
class A {};
void f( A& a ) {}
A *h() { return new A; }
void OnStart()
{
        f(  h() ); //нормально
        f( *h() ); //нормально
}
Bitte tun Sie das, wenn nicht - vielleicht ist es sinnvoll, alles zurückzusetzen, bevor Sie die Innovation nutzen

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

A100, 2015.08.26 10:35

In der Tat bieten Sie einen einfachen und unkomplizierten Einstieg

a = (b + c) - d*e + f;
durch
*a = (*b + *c) - *d**e + *f;
ersetzen. Und wofür ist das gut? Damit Sie schreiben können
bool c = *a == *b;

während eine spezielle Funktion verwendet werden kann, um Zeiger auf Gleichheit zu vergleichen, und alle anderen arithmetischen Operationen (Addition, Subtraktion, Multiplikation usw.) mit Zeigern an sich keine Bedeutung haben und nur unter dem Gesichtspunkt interessant sind, sie überladen zu können.

Nur wenn Sie eine mathematische Basis- und eine abgeleitete Klasse erstellen, mehrere (statt einer oder zwei) arithmetische Operationen neu definieren, sie virtuell machen und dann komplexe Ausdrücke (nicht nur a = b + c) auf ihrer Grundlage testen - nur so kommen Sie dem Verständnis näher, dass jetzt alles OPTIMAL gemacht wird. In der Zwischenzeit argumentieren Sie auf einer Einstiegsebene.

Wenn man den Vergleich von Gleichheitszeigern in eine separate Funktion auslagert, bleibt nur noch ein(!) Engpass übrig

class A {};

A *a = b; //однозначно присвоение указателю значения
a = b;    //неоднозначно
was allerdings auch als Zuweisung und nicht als operator=()-Aufruf behandelt werden sollte, da es derzeit keine andere Syntax für die Zuweisung eines Wertes an einen Zeiger gibt, während a.operator=( b ) auch explizit aufgerufen werden kann
 
A100:


Anderer Code - achten Sie auf die Zeit - er muss um das 20-fache gewachsen sein

Dies ist ein neuer Optimierungscompiler für MQL5 (MQL4 hat ihn nicht).

Sie müssen für besseren Zielcode mit längerer Kompilierungszeit bezahlen. Einige lange Funktionen, die aus Hunderten von Zeilen bestehen, sind sehr schwer zu optimieren.

 
Renat Fatkhullin:

So funktioniert der neue optimierende Compiler für MQL5 (in MQL4 ist er nicht vorhanden).

Für einen besseren Zielcode müssen Sie eine längere Kompilierungszeit in Kauf nehmen. Einige lange Funktionen, die aus Hunderten von Zeilen bestehen, sind sehr hartnäckig in der Optimierung.

Ist das wirklich notwendig? Ist der Preis für diesen "hochwertigen Code" nicht zu hoch? Die Kompiliergeschwindigkeit dutzendfach zu verlangsamen, um einen relativ geringen Leistungsgewinn zu erzielen... Dies gilt umso mehr, als dieser Gewinn in vielen Fällen nicht sehr wichtig ist und die Verlängerung der Kompilierungszeit eine Qual für den Programmierer darstellt.

Wäre es nicht besser, die Kompilierungsoptionen "Debug" und "Release" zu schaffen?