Fehler, Irrtümer, Fragen - Seite 2021

 

Den Käfer spielen

  1. Gehen Sie zu Metaquotes-Demo.
  2. Nur AUDJPY befindet sich in der Marktübersicht und öffnet seinen Chart.
  3. Laden Sie das Terminal neu und warten Sie auf eine vollwertige Verbindung - die Angebote kommen.
  4. Führen Sie das Skript auf dem Diagramm aus

void OnStart()
{  
  for (int i = 0; i < 5; i++)
    Print(SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE));
}


Das Ergebnis lautet wie folgt

2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0
2017.10.05 09:02:27.460 Test6 (AUDJPY,M1)       0.0


Neustart.

2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851
2017.10.05 09:02:32.028 Test6 (AUDJPY,M1)       0.8868393047179851


D.h.SYMBOL_TRADE_TICK_VALUE gibt beim ersten Durchlauf Nullen zurück, wenn Sleep() nicht verwendet wird;


HI Zum Thema des unsichtbaren Symbols in Market Watch. Wenn Sie versuchen, den USDJPY-Chart vor dem Start des Skripts zu öffnen (drücken Sie die Eingabetaste und geben Sie "USDJPY" ein), wird es nicht funktionieren. Wenn das Skript ausgeführt wurde, funktioniert es. Die Marktbeobachtung hat sich jedoch nicht geändert.

 
fxsaber:

Den Käfer spielen

  1. Gehen Sie zu Metaquotes-Demo.
  2. Nur AUDJPY befindet sich in der Marktübersicht und öffnet seinen Chart.
  3. Laden Sie das Terminal neu und warten Sie auf eine vollwertige Verbindung - die Angebote kommen.
  4. Führen Sie das Skript auf dem Diagramm aus


Das Ergebnis lautet wie folgt


Neustart.


D.h.SYMBOL_TRADE_TICK_VALUE gibt beim ersten Durchlauf Nullen zurück, wenn Sleep() nicht verwendet wird;


HI Zum Thema des unsichtbaren Symbols in Market Watch. Wenn Sie versuchen, den USDJPY-Chart zu öffnen (drücken Sie die Eingabetaste und geben Sie "USDJPY" ein), bevor Sie das Skript starten, wird es nicht funktionieren. Wenn das Skript ausgeführt wurde, funktioniert es. Die Marktbeobachtung hat sich jedoch nicht geändert.

Fügen Sie diese Schleife an den Anfang des Skripts

   for(int i = 0; i < SymbolsTotal(true); i++)
     Print(SymbolName(i, true));

Und sehen Sie, wie viele Symbole gedruckt werden.

Beim ersten Durchlauf werden beim Zugriff auf AUDJPY nur AUDUSD und USDJPY zur Marktübersicht hinzugefügt und erst beim zweiten Durchlauf erhalten diese Paare die Symboleigenschaft. Das ist es, was in meinem Fall das Problem mit OrderCalcMargin verursacht.

 
fxsaber:

Darüber wurde schon oft geschrieben. Aus irgendeinem Grund korrigieren sie es nicht.

Ich habe eine Antwort von der Servicestelle erhalten. Sie werden es in Ordnung bringen.
 

Hallo zusammen!

Hilfe für eine Anfängerin, bitte.

Die Funktion zur Ermittlung des Preismaximums wird ausgeführt. Wie ist es möglich, die BAR NUMBER mit einem bestimmten Höchstpreis zu berechnen und an den Code zurückzugeben?

 
Alexey Viktorov:

Fügen Sie am Anfang des Skripts eine Schleife wie diese ein

Und sehen Sie, wie viele Zeichen gedruckt werden.

Beim ersten Durchlauf werden beim Zugriff auf AUDJPY nur AUDUSD und USDJPY zur Marktübersicht hinzugefügt, und erst beim zweiten Durchlauf erhalten diese Paare die Symboleigenschaft. Das ist es, was in meinem Fall das Problem mit OrderCalcMargin verursacht.

Ich denke, das wird schon klappen, wie das geht.

Anatoli Kazharski:
Ich habe die Antwort vom Service Desk erhalten. Sie werden es in Ordnung bringen.

Ich danke Ihnen.

 

Bezüglich des Fehlers "rund um" OrderCalcMargin() wurde eine Anwendung auf die SR gemacht

 
Kirill Belousov:

Es ist schwer, sicher zu sein, wenn es einendirekten Widerspruch in der MQL4/5-Hilfe gibt:

...Bitte denken Sie daran, dass die Parameter in der Funktion rückwärts übergeben werden, d.h. der letzte Parameter wird zuerst berechnet und übergeben, dann der vorletzte, usw. Der Parameter, der nach der öffnenden Klammer an erster Stelle steht, wird berechnet und der Reihe nach übergeben.


..
.Beachten Sie, dassdie Reihenfolge der Ausdrücke x1,..., xn garantiert ist.

Worin liegt hier der Widerspruch? Sie ist rückwärts gerichtet und das war's. Es gibt keine umgekehrte Aussage.
 
Alexey Navoykov:
Worin besteht der Widerspruch? Es ist rückwärts gerichtet und das war's. Es gibt keine gegenteilige Aussage.

- Diese beiden Empfehlungen sind in getrennten Abschnitten der Hilfe enthalten.

Wenn Sie lesen unter

"Aufruf einer Funktion mit Argumenten x1, x2,..., xn"

dieReihenfolge der Ausdrücke x1,....,xn ist garantiert, an welche Reihenfolge denken Sie?

Über die Reihenfolge x1,...,xn oder über die Reihenfolge xn,....,x1 ?

 
Kirill Belousov:

- Diese beiden Empfehlungen sind in getrennten Abschnitten der Hilfe enthalten.

Wenn Sie lesen unter

"Aufruf einer Funktion mit Argumenten x1, x2,..., xn"

dieReihenfolge der Ausdrücke x1,....,xn ist garantiert, an welche Reihenfolge denken Sie?

Die Reihenfolge x1,...,xn oder die Reihenfolge xn,....,x1 ?

Ja, Sie haben Recht, es ist verwirrend.

Ich halte es jedoch für eine schlechte Praxis, die Logik des eigenen Algorithmus auf eine bestimmte Reihenfolge der Argumente festzulegen. Dies gilt umso mehr, wenn diese Berechnungen von rechts nach links das Verständnis des Codes verwirren. Deshalb sollten Sie es nur an einigen unkritischen Stellen wie dem Ausdruck anwenden.

 
Kirill Belousov:

Die Reihenfolge der Berechnungsausdrücke in Print() ist von rechts nach links. Irgendwie... Tschüss... Ich habe es auch vorher überprüft :)

MQL5-Referenz\Sprachliche Grundlagen\Operationenund Ausdrücke\Andere Operationen

Funktionsaufruf mit Argumenten x1, x2,..., xn

Bitte beachten Sie, dass die Reihenfolge der Ausdrücke x1,..., xn garantiert ist.

Es demonstriert einmal mehr die Nützlichkeit des C++-Schlüsselworts inline (es gab hier eine Meinung, dass es angeblich veraltet ist).
Inline bedeutet unter anderem, dass der Programmierer die Reihenfolge der Berechnung von Funktionsparametern nicht verwendet, und wenn der Compiler beschließt, eine Inline-Funktion inline zu machen, kann der Compiler die Vorwärtsreihenfolge der Berechnung als effizienter verwenden (die umgekehrte Reihenfolge der Berechnung ist offensichtlich nur für aufrufbare Funktionen effizient).
Gleichzeitig sollte der Compiler, wenn er beschließt, eine Nicht-Inline-Funktion einzubetten, die (allgemeine) umgekehrte Reihenfolge der Auswertung verwenden, auch wenn dies zu einem Effizienzverlust führt (weil der Programmierer diese Reihenfolge angenommen hat, ohne die Funktion als Inline-Funktion deklariert zu haben)

inline wäre auch in MQL angebracht, wo die Berechnungsreihenfolge nicht explizit kontrolliert werden kann