Diskussion zum Artikel "Der Einsatz von MQL5 Standard Library Handelsklassen beim Schreiben eines Expert Advisors" - Seite 2
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Was mache ich falsch, warum wird das Angebot nicht gedruckt?
Hier ist das Log der Arbeit
2011.01.31 20:20:18 00 (EURUSD,M1) EURUSD 0
Hier ist der Code
Verwenden Sie \my_symbol.RefreshRates();\ anstelle von \my_symbol.Refresh();\. Dann funktioniert es!
Vielen Dank!
Dies ist wahrscheinlich eine Frage für die Entwickler oder die Person, die die Hilfe schreibt.
Der Artikel sagt
mysymbol.Refresh()
Wird verwendet, um alle Daten für ein Symbol. Wenn Sie einen neuen Symbolnamen für eine Klasse angeben, wird diese Funktion automatisch aufgerufen.
mysymbol.RefreshRates()
Wird zur Aktualisierung von Kursen verwendet. Wenn ein neues Symbol gesetzt wird, wird diese Funktion automatisch aufgerufen.
1. Es stellt sich heraus, dass nicht alle Daten ?
2. Was ist der Unterschied zwischen dem Angeben eines neuen Symbols und dem Setzen eines neuen Symbols ?
3. Ich verstehe das Wort "automatisch" nicht. Ich scheine ein Symbol mit dem Befehl my_symbol.Name(_Symbol) gesetzt zu haben, aber die Aktualisierung ist nicht erfolgt....
In dem Artikel heißt es
mysymbol.Refresh()
Dient zur Aktualisierung alle Daten für ein Symbol. Wenn ein neuer Symbolname für eine Klasse angegeben wird, wird diese Funktion automatisch aufgerufen.
mysymbol.RefreshRates()
Dient zur Aktualisierung von Kursen. Wenn ein neues Symbol gesetzt wird, wird diese Funktion automatisch aufgerufen.
1. Es stellt sich heraus, dass nicht alle Daten ?
2. Was ist der Unterschied zwischen dem Angeben eines neuen Zeichens und dem Setzen eines neuen Zeichens?
3. Ich verstehe das Wort "automatisch" nicht. Ich scheine das Symbol mit dem Befehl my_symbol.Name(_Symbol) gesetzt zu haben, aber die Aktualisierung ist nicht erfolgt....
Der seltene Moment, in dem man nicht auf eine Antwort des Verfassers des Artikels oder des Autors des Nachschlagewerks warten muss :) Ein Blick in den Quellcode genügt, um zu sehen, dass RefreshRates() die Funktion SymbolInfoTick() vollständig dupliziert , die "die aktuellen Preise für das angegebene Symbol in einer Variablen vom Typ MqlTick zurückgibt". Wenn die Autoren also sagen, dass es um die Aktualisierung von Kursen geht, meinen sie eigentlich die Aktualisierung von Werten einer Variablen vom Typ MqlTick.
2. Es gibt eine solche Zeile im Quellcode
Das bedeutet, dass beim Aufruf der Funktion Name() nur die Funktion Refresh() automatisch aktiviert wird. Ich habe keine Informationen über die automatische Aktivierung der RefreshRates()-Funktion beim Aufruf der Name()-Funktion gefunden. Es stellt sich also heraus, dass "ab heute" eine Änderung eines Symbols für die Name()-Funktion nicht automatisch die RefreshRates()-Funktion aktiviert. Wir müssen die Werte der Variablen vom Typ MqlTick ("refresh quotes") selbständig und zwangsweise aktualisieren.Was mache ich falsch, warum wird das Gebot nicht gedruckt? Hier ist das Arbeitsprotokoll 2011.01.31 20:20:18 00 (EURUSD,M1) EURUSD 0
Hier ist der Code
Hier ist die Antwort, warum der Bid-Wert als Null gedruckt wird. Der Quellcode zeigt, dass die Bid()-Funktion durch die folgende Zeile beschrieben wird
Der Wert der Funktion Bid() ist also an den Wert eines der Elemente einer Variablen vom Typ MqlTick gebunden. Und diese Variable wird nicht automatisch aktualisiert, wenn ein Symbol geändert wird, sondern durch einen zusätzlichen Aufruf der Funktion RefreshRates(). In Ihrem Code wird die Funktion Refresh() aufgerufen - und zwar zweimal (wenn man den Körper der Funktion Name() berücksichtigt) - und die Funktion RefreshRates() wird nicht einmal aufgerufen.
Vielleicht können Sie den Code verbessern, indem Sie denRefreshRates ()-Aufruf im letzten Teil vonRefresh() hinzufügen. Dann werden alle Daten wirklich aktualisiert.....
Ich habe den RefreshRates()-Aufruf zur Funktion Name() hinzugefügt . Aber dennoch - dies sind Patches auf der Ebene eines einzelnen Benutzers für seine Bedürfnisse.
Aber wenn die Entwickler Refresh() an anderen Stellen einbauen (nach eigenem Ermessen), wird es für die meisten Benutzer eine normale Lösung sein.
Wenn wir sagen, dass Refresh alle Daten aktualisiert, dann sollten auch wirklich alle Daten aktualisiert werden. IMHO
Aber wenn die Entwickler es in Refresh() und an anderen Stellen (nach eigenem Ermessen) einbauen, wird es für die meisten Benutzer eine normale Lösung sein.
Wenn wir sagen, dass Refresh alle Daten aktualisiert, dann sollten auch wirklich alle Daten aktualisiert werden. IMHO
Dagegen ist nichts einzuwenden. Aber dennoch wäre die normale Lösung für die Benutzer eine klare und verständliche Beschreibung der verfügbaren Konstruktionen und ihrer Eigenschaften. Dann wird der Benutzer selbst herausfinden, wie er diese Konstruktionen verwenden kann. Und da eine solche Lösung aus verschiedenen Gründen schwer zu erreichen ist, werden diejenigen, die sich selbst und anderen zusätzliche Fragen stellen, vorankommen :)
Ich weiß es nicht, ich benutze die Standardbibliothek nur zu Studienzwecken. Ich schreibe alle meine Projekte auf meinen eigenen Komponenten.
Ich werde warten, bis die Konstruktoren bequemer gemacht werden, dann werde ich die Standardbibliothek ganz aufgeben....
Übrigens habe ich herausgefunden, dass die Klasse CHistoryOrderInfo ein paar Zeilen wie diese enthält
return(FormatType(str,Type())); ... FormatType(type,Type())Aber die Funktion Type() ist in der Klasse nicht vorhanden.