Fehler, Irrtümer, Fragen - Seite 2729

 
Alexey Viktorov:

Dies ist keine Funktion von mql5, sondern nur ein Versuch, Ordnung zu schaffen.

Ordnung gewöhnt ist, wenn der Compiler gibt eine Warnung (oder Fehler). Umwandlung von ganzen Zahlen in Brüche gibt 0 - das ist Unsinn, nicht Ordnung. 90% der alten Codes wird so brechen.

und man beachte, dass die Arbeitsvariante immer noch mit int arbeitet! d.h. das Problem ist nicht die Typkonvertierung beim Ersetzungsschritt, sondern beim Berechnungsschritt

ADDED: Umstellung auf MQ-demo, Aktualisierung des Arbeitsterminals. Es hat dieses Problem nicht.

 
Kompilierungsfehler
class A {  
public:
        static int i;
} a; //Error: unresolved static variable 'A::i'
int A::i = 0;
 
Igor Zakharov:

Bestellung ist, wenn der Compiler gibt eine Warnung (oder Fehler). Umwandlung von ganzen Zahlen in Brüche gibt 0 - das ist Unsinn, nicht Ordnung. dies ist, wie 90% der alten Codes brechen.

und man beachte, dass die Arbeitsvariante immer noch mit int arbeitet! d.h. das Problem ist nicht die Typkonvertierung beim Ersetzungsschritt, sondern beim Berechnungsschritt

ADDED: Umstellung auf MQ-demo, Aktualisierung des Arbeitsterminals. Es hat dieses Problem nicht.

Ist die fehlende Hervorhebung der möglichen Optionen in diesem Fall nicht verdächtig?

   ObjectSetDouble (0,name,OBJPROP_ANGLE,dir// тут должен появиться список вариантов переменных double
 
Fehler bei der Ausführung
class A {  
public:
         A() { i = ++ii; printf( "%d", i ); }
        ~A() {           printf( "%d", i ); }
        int i;
        static int ii;
};
int A::ii = 0;
A a[ 2 ];
void OnStart() {}

  • Das Ergebnis in MQL: 1212
  • und in C++: 1221
 
Alexey Viktorov:

Ist die fehlende Hervorhebung der möglichen Optionen in diesem Fall nicht verdächtig?

:)

 
Igor Zakharov:

:)

Ja... Seltsam, vor einiger Zeit waren die Variablen des falschen Typs noch nicht hervorgehoben. Vielleicht haben sie es absichtlich korrigiert oder werden auf diesen Dialog aufmerksam und korrigieren es wieder. Wie auch immer, wenn die Funktion den Variablentyp double erfordert, sollte double verwendet werden.

 
Das war schon immer ein Fehler.
#define  MACRO( X, Y )
MACRO( 1, 2, 3) //Warning: too many arguments for function-like macro 'MACRO'
Warum eine Warnung? Vor allem, weil sie immer in zu großer Zahl auftreten und man manchmal nicht aufpasst.
 
Alexey Viktorov:

Ja... Seltsam, vor einiger Zeit wurden Variablen eines unangemessenen Typs nicht hervorgehoben. Vielleicht haben sie es absichtlich korrigiert oder werden auf diesen Dialog aufmerksam und korrigieren es wieder. Wenn die Funktion jedoch den Variablentyp double verlangt, sollte double verwendet werden.

Alexej, ich habe bemerkt, dass du Links zur Dokumentation magst, ich habe einen für dich :)

https://www.mql5.com/ru/docs/basis/types/casting

int zu double ist eine gültige implizite Umwandlung ohne Datenverlust. legitim.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 

Frage zur Funktionsweise des Strategieprüfers.

Ich führe den Test durch. Der Expert Advisor eröffnet eine Position mit SL und TP. Dann rollt er und die Position wird geschlossen, ohne dass sie wieder geöffnet wird.

Was ist das? Ein Fehler? Ich habe das Testgerät schon seit einiger Zeit nicht mehr benutzt, und es hatte keine derartigen Probleme. Nachfolgend finden Sie das Protokoll des Testers. Wir sehen, dass die Position nach dem Rollover eröffnet und geschlossen wurde, und dann steht irgendwie geschrieben, dass sie über BUY eröffnet wurde. Ich fügte in den Tester den Befehl

PositionSelect(_Symbol), um zu prüfen, ob es nach dem Rollover offene Positionen gibt, ist das Ergebnis immer das gleiche - keine offenen Positionen.


2020.04.28 18:14:14.609 2014.01.09 05:00:00 Sofortkauf 1,00 AUDUSD bei 0,88800 sl: 0,88450 tp: 0,89200 (0,88750 / 0,88800 / 0,88750)

2020.04.28 18:14:14.609 2014.01.09 05:00:00 deal #8 buy 1.00 AUDUSD at 0.88800 done (based on order #8)

2020.04.28 18:14:14.610 2014.01.09 05:00:00 Geschäft abgeschlossen [#8 buy 1.00 AUDUSD at 0.88800

2020.04.28 18:14:14.610 2014.01.09 05:00:00 Auftrag ausgeführt Kauf 1,00 zu 0,88800 [#8 Kauf 1,00 AUDUSD zu 0,88800


2020.04.28 18:14:24.169 2014.01.09 23:59:59 deal #9 sell 1.00 AUDUSD at 0.88980 done (based on order #9)

2020.04.28 18:14:24.169 2014.01.09 23:59:59 rollover deal done [#9 sell 1.00 AUDUSD at 0.88980

2020.04.28 18:14:24.170 2014.01.09 23:59:59 deal #10 buy 0.00 AUDUSD at 0.8899950 done (based on order #10)

2020.04.28 18:14:24.170 2014.01.09 23:59:59 rollover deal done [#10 buy 0.00 AUDUSD at 0.8899950]


 
Igor Zakharov:

Alexej, ich habe bemerkt, dass du Links zur Dokumentation magst, ich habe einen für dich :)

https://www.mql5.com/ru/docs/basis/types/casting

int zu double ist eine gültige implizite Umwandlung ohne Datenverlust. legitim.

Ich verlinke auf die Dokumentation, damit ich die Dokumentation nicht im Beitrag neu schreiben muss und damit sich die Leute daran gewöhnen, die Dokumentation zu lesen. Ich kann mir vorstellen, dass es hier im Forum Leute gab, die nicht wussten, dass es diese Dokumentation überhaupt gibt. Was mich persönlich betrifft, so habe ich ein solches Bild in der Dokumentation gesehen, aber ich habe nicht versucht, es gründlich zu verstehen. Die Gewohnheit, Variablen des Typs zu verwenden, den die Funktion erfordert, reicht mir aus. Als letztes Mittel werde ich die Umwandlung in den richtigen Typ erzwingen.

Grund der Beschwerde: