Fehler, Irrtümer, Fragen - Seite 313

 

Aus irgendeinem Grund kann ich den aktuellen Kontoprofit in der OnTester-Funktion nicht abrufen

So erhalte ich 0

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_PROFIT));

Und so komme ich zu meinem Gewinn:

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_BALANCE)-100000);

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
stringo:

Worüber streiten wir uns? w0 nicht setzen

PS Es wird sicher eine Nachricht geben (vielleicht ein paar Zeilen weiter unten)


Glory Ich stimme zu - all diese Argumente sind so zeitraubend, scheiß auf sie (Argumente). :)

Aber so, was ist auf dem Bein genannt - Sie, ich bin sicher, wissen alles selbst sehr gut, aber immer noch, wenn diese Funktion ist extern und nur durch Deklaration, gibt es solche Modifikatoren wie "const" und "in" und "out". Und vielleicht gibt es einen Fehler in dieser Funktion. Die Sache ist die - wenn es sich um einen rückgabefähigen Parameter handelt, wird eine Warnung ausgegeben, wenn er nicht zurückgegeben wird (wenn er über "return" zurückgegeben wird), und bei einer zweiten Form der Funktion, wenn ein rückgabefähiger Wert über einen Parameter zurückgegeben wird, sollte ebenfalls eine Warnung ausgegeben werden, da es sich um einen rückgabefähigen Wert handelt. Andernfalls wäre es unmöglich, wenn das Erfolgs-/Misserfolgsergebnis über einen Parameter zurückgegeben würde und der Wert selbst über return zurückgegeben würde. Und Erfolg oder kein Erfolg wird auch IMMER zurückgegeben. Mit anderen Worten - ( http://users.telenet.be/bart.demeyere/C++InOutParameters.html ) hier ist eine Lösung, die es schon seit langem gibt.


Aber das Gespräch im Allgemeinen, da habe ich nichts mitbekommen. IMHO, müssen Sie solche Fragen zu beantworten, wenn Sie nicht planen, etwas zu ändern kardinal in der aktuellen Umsetzung etwas wie dieses :) - Ja, es gibt ein solches Problem, es wird in den nächsten Versionen des Programms gelöst werden, jetzt haben wir den Code korrigiert, und wir sind nur noch dabei, Fehler zu beheben". Niemand (ich denke, selbst die Unzulänglichsten) wird beleidigt sein, aber es ist wichtig und notwendig, das Problem selbst zu lösen.


Also, ob es in dieser Version solche sehr (SEHR) nützlichen Modifikatoren in out und andere, sie erheblich erlauben, Fehler zu minimieren.


***

Es wird einen halben Tag dauern, den gesamten Schriftverkehr zu erledigen. Ich bin fertig. :)

 
Erm955:

Aus irgendeinem Grund kann ich den aktuellen Kontoprofit in der OnTester-Funktion nicht abrufen

So erhalte ich 0

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_PROFIT));

Und so komme ich zu meinem Gewinn:

double OnTester()
{
   return(AccountInfoDouble(ACCOUNT_BALANCE)-100000);


Deklarieren Sie eine globale Variable und weisen Sie ihr in OnInit() den aktuellen Saldowert zu.

In OnTester() wird der Gesamtgewinn auf der Grundlage der Ergebnisse aller abgeschlossenen Transaktionen berechnet:

Профит=ТекущийБбаланс - Начальный баланс

und geben sie in OnTester() aus.


Und was Sie jetzt zu erhalten versuchen, ist der aktuelle nicht fixierte Gewinn, der Null ist, wenn alle Positionen geschlossen sind.

 
Academic:


Glory Ich stimme zu - all diese Debatten sind so zeitaufwendig, dass man sich nicht damit befassen sollte (Debatten). :)

Wird es in dieser Version solche sehr (SEHR) nützlichen Modifikatoren in out und anderen geben, die es erlauben, Fehler zu minimieren.

"Worüber streiten wir uns?" - ist eine Redewendung aus meiner Kindheit, die bedeutet: "Worüber streiten wir uns?

DieÜbergabe eines Parameters per Referenz ist genau das, was inout bedeutet. Es gibt einfach Implementierungen, die sich der Kontrolle des Compilers entziehen.

In der Tat ist es recht einfach, den Ausführungsfluss durch die Eingabe von Funktionen zu analysieren (das Beispiel von Rashid). Wir haben uns bewusst gegen diesen Ansatz entschieden. Der eigentliche Grund war, dass sich dadurch unsere Kompilierungszeit erheblich verlängern würde. Deshalb haben wir den einfachsten Weg gewählt - die Anzeige einer Warnung. Ist es besser, eine solche Warnung nicht zu veröffentlichen? Ja, das sollten Sie. Wenn Sie die Initialisierung explizit vornehmen, wird keine Warnung ausgegeben.

Ich wiederhole auch, dass wir eine verkürzte Schätzung für logische Ausdrücke haben. Das bedeutet in Ihrem Fall, dass, wenn das erste ObjectGetDouble den Wert false zurückgibt (z.B. weil das Objekt plötzlich nicht mehr existiert), das zweite ObjectGetDouble nicht aufgerufen wird

Документация по MQL5: Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this
Документация по MQL5: Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this
  • www.mql5.com
Основы языка / Типы данных / Ссылки. Модификатор & и ключевое слово this - Документация по MQL5
 
stringo:

"Worüber streiten wir uns?" - ist eine Redewendung aus meiner Kindheit, die bedeutet: "Worüber streiten wir uns?

DieÜbergabe eines Parameters per Referenz ist genau das, was inout bedeutet. Es gibt einfach Implementierungen, die sich der Kontrolle des Compilers entziehen.

In der Tat ist es recht einfach, den Ausführungsfluss durch die Eingabe von Funktionen zu analysieren (das Beispiel von Rashid). Wir haben uns bewusst gegen diesen Ansatz entschieden. Der eigentliche Grund war, dass sich dadurch unsere Kompilierungszeit erheblich verlängern würde. Deshalb haben wir den einfachsten Weg gewählt - die Anzeige einer Warnung. Ist es besser, eine solche Warnung nicht zu veröffentlichen? Ja, das sollten Sie. Wenn Sie die Initialisierung explizit vornehmen, wird keine Warnung ausgegeben.

Ich wiederhole auch, dass wir eine verkürzte Schätzung für logische Ausdrücke haben. Das bedeutet in Ihrem Fall, dass, wenn das erste ObjectGetDouble false zurückgibt (z.B. weil das Objekt, wie Sie von außen bemerken, plötzlich nicht mehr existiert), das zweite ObjectGetDouble nicht aufgerufen wird


Richtig, er wird nicht aufgerufen - das ist Standardverhalten in C-Code.

Modifikatoren in und out können zusätzlich zu Referenzen sein. Und standardmäßig sind sie immer für Referenzen ein- und ausgegangen. Aber ich kann einen Verweis mit in-Modifikator übergeben, was bedeutet, dass der Parameter dieser Funktion immer Input ist und das Schreiben in sie ist nicht möglich, auch wenn es durch Verweis übergeben wird. Haben Sie das gelesen? http://users.telenet.be/bart.demeyere/C++InOutParameters.html


in: Parameter wird gelesen (Warnung, wenn nicht in jedem Zweig gelesen*)
(in: Parameter wird gelesen (Warnung, wenn nirgends gelesen)
out: Parameter wird geschrieben (Warnung, wenn er nicht in jeder Verzweigung geschrieben wird*)
(out): Parameter kann beschrieben werden (Warnung, wenn nirgends geschrieben wird)
in ohne out: Parameter kann nicht beschrieben werden
out ohne in: Der Parameter kann nicht gelesen werden, bevor in ihn geschrieben wird.
*in jeder Verzweigung: in allen möglichen normalen Flüssen durch die Funktion (beide Verzweigungen in einer if-Anweisung, alle Verzweigungen in einer case-Anweisung,... ), aber nicht, wenn eine Ausnahme ausgelöst wird. Dies ist die gleiche Einschränkung wie bei einer return-Anweisung, nämlich dass es kein undefiniertes Verhalten geben darf.


Und vor allem die Einführung der Schlüsselwörter in und out kann uns helfen, einige Probleme bereits zur Kompilierungszeit zu finden. Und wollen wir nicht alle so schnell wie möglich Fehler finden?

 

Es gibt einen Const-Modifikator. Bei der Übergabe einer Konstantenreferenz wird der Parameter in ausdrücklich ohne out angenommen. Wir werden definitiv keine zusätzlichen Entitäten in, out, inout einführen.

 
stringo:

Es gibt einen Const-Modifikator. Die Übergabe einer Konstantenreferenz impliziert explizit einen In-Parameter ohne Out-Parameter. Wir werden definitiv keine zusätzlichen Entitäten in, out, inout einführen.

Wenn Sie nicht wollen, dann wollen Sie nicht. Aber Sie müssen sich darüber im Klaren sein, dass Sie dann keine anständige Optimierung erhalten werden. Und wenn es in diesem Beispiel OUT gegeben hätte, wäre die Warnung nicht ausgegeben worden. Aber alles umsonst - IMHO - es dauert zwar drei Minuten, aber es gibt viel weniger Fehler. Und wenn Sie es nicht benutzen wollen, benutzen Sie es nicht. Dann ist alles so, wie es immer ist. Genau wie jetzt. :)


Wie kann man nur OUT ohne IN machen? Das heißt, es wird immer etwas zurückgegeben, wie bei einer Funktionsrückgabe.

 

Die Entwickler.

1. Ich gehe davon aus, dass der Spread für die wichtigsten Paare seit Mai 1993, d.h. seit etwa 930 Wochenstäben, in die Höhe getrieben wurde.

Und in der tiefen Geschichte wurden die Bars auf der Basis von Tagen gebaut.

Daher kann der Expert Advisor genau ab Mai 1993 getestet werden (wenn wir einen TF nicht kleiner als D1 verwenden)?

Können wir beim GBPUSD tiefer als bis zum 9. Mai 1993 blicken (so wie es beim EURUSD umgesetzt wird)?
 

Hallo.

Können Sie bitte erklären, warum bei der manuellen Erstellung eines"Graphic Tag"-Objekts die angegebene bmp-Datei für die Ein- und Ausschaltzustände nicht vorhanden ist?

Hier ist der Code:

ObjectCreate(....);

.......

ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 0, "Images\on.bmp");
ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 1, "Images\off.bmp");

Das Etikett wird völlig korrekt erstellt, an der angegebenen Position, mit den angegebenen Farben usw., aber "Images\on.bmp" und "Images\off.bmp" sind nicht angegeben. Wenn in der MT5-Benutzeroberfläche
klicken Sie auf die Liste der Objekte und setzen Sie diese Dateien manuell für die Markierung, sie werden dann gesetzt. Aber warum tut ObjectSetString das nicht?

Was meinen Sie dazu?

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
MathX:

Was meinen Sie dazu?

Versuchen Sie

ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 0, "\\Images\\on.bmp");
ObjectSetString(0, "ColorLabel", OBJPROP_BMPFILE, 1, "\\Images\\off.bmp");


Änderungen an der Bescheinigung werden in Kürze folgen.