Diskussion zum Artikel "Der Einsatz von MQL5 Standard Library Handelsklassen beim Schreiben eines Expert Advisors" - Seite 2

[Gelöscht]  
Trolls:

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!
 
-Alexey-:
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....

 
Trolls:

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

void  Name(string name)  { m_name=name; Refresh();}
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.
 
Trolls:

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

void OnTick()
  {
   my_symbol.Name(_Symbol);
   my_symbol.Refresh();
   Print(_Symbol," ",my_symbol.Bid());
  }

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

double  Bid()  const { return(m_tick.bid);}

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.

[Gelöscht]  
Wahrscheinlich können Sie den Code verbessern, indem Sie im letzten Teil vonRefresh () einen Aufruf von Refresh() hinzufügen. Dann werden alle Daten wirklich aktualisiert.....
 
Interesting:
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 trotzdem - das sind Patches auf der Ebene eines einzelnen Benutzers für seine Bedürfnisse.
[Gelöscht]  
Yedelkin:
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


 
Interesting:

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

Es gibt keinen Einwand dagegen. Eine normale Lösung für die Benutzer wäre jedoch eine klare und verständliche Beschreibung der verfügbaren Designs und ihrer Eigenschaften. Dann wird der Benutzer selbst herausfinden, wie er diese Konstrukte 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 :)
[Gelöscht]  
Yedelkin:
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....

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 

Ü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.