Diskussion zum Artikel "Strukturen in MQL5 und Methoden zum Drucken deren Daten"

 

Neuer Artikel Strukturen in MQL5 und Methoden zum Drucken deren Daten :

In diesem Artikel werden wir uns die Strukturen von MqlDateTime, MqlTick, MqlRates und MqlBookInfo ansehen sowie die Methoden zum Drucken von deren Daten. Um alle Felder einer Struktur auszudrucken, gibt es die Standardfunktion ArrayPrint(), die die im Array enthaltenen Daten mit dem Typ der behandelten Struktur in einem praktischen Tabellenformat anzeigt.

Die Strukturen MqlParam und MqlTradeRequest übermitteln technische Informationen zur Erstellung von Indikatoren und zum Senden von Handelsaufträgen an den Server. Wir füllen die erforderlichen Felder der Strukturen entsprechend dem gewünschten Ergebnis der Datenübermittlung in der ausgefüllten Struktur aus. Mit anderen Worten, diese Strukturen müssen nicht unbedingt die Daten ausgeben, die den Feldern dieser Strukturen von einem Programmierer zugewiesen wurden.
Die übrigen Strukturen liefern jedoch Abfrageergebnisse, und jedes Feld wird entweder vom Terminal-Subsystem oder vom Handelsserver ausgefüllt. Das Abrufen von Daten aus diesen Strukturen, das Analysieren von programmatisch gefüllten Feldern von Strukturen oder das Ausdrucken in ein Protokoll für eine anschließende manuelle Analyse ist sehr praktisch und notwendig, um sowohl programmatische Entscheidungen zu treffen als auch den Ort eines logischen Fehlers zu verstehen und zu finden.


Um alle Felder einer Struktur auszudrucken, gibt es die Standardfunktion ArrayPrint(), die die im Array enthaltenen Daten mit dem Typ der behandelten Struktur in einem praktischen Tabellenformat anzeigt. Aber manchmal müssen wir die Daten aus der Struktur in einem anderen Format ausgeben, das vielleicht bequemer ist als eine tabellarische Darstellung. So kann es beispielsweise erforderlich sein, alle Felder der Struktur in einer Zeile anzuzeigen - mit Überschriften und entsprechenden Daten. Dies kann sich bei der Analyse großer Datenmengen als vorteilhaft erweisen. Gleichzeitig benötigen wir manchmal eine detailliertere Ansicht - mit einer Beschreibung der Strukturfelder und einer anderen Darstellung der entsprechenden Daten.

Autor: Artyom Trishkin

 
Ich kann diesen Autor schon am Titel des Artikels erkennen :)))))
 

Wenn diese Artikel zu einer Serie werden, ist das einfach großartig!!!!

Wie sehr habe ich solche Artikel vor etwa vier Jahren vermisst, als ich anfing, das Schreiben von Code zu lernen.

Und jetzt finde ich immer noch Dinge in ihnen, die ich noch nicht wusste.

Besonders der letzte Artikel über StringFormat und PrintFormat ist sehr informativ, wenn man bedenkt, dass die Hilfe zu diesen Funktionen sehr dürftig ist.

Vielen Dank an den Autor für die interessanten und notwendigen Artikel!

StringFormat(). Обзор, готовые примеры использования
StringFormat(). Обзор, готовые примеры использования
  • www.mql5.com
Статья является продолжением обзора функции PrintFormat(). Рассмотрим вкратце форматирование строк при помощи StringFormat() и их дальнейшее использование в программе. Напишем шаблоны для вывода информации о символе в журнал терминала. Статья будет полезна как новичкам, так и уже опытным разработчикам.
 
Sehr guter Artikel. Wo ist die mqh-Datei, die wir herunterladen können?
 
Zhongquan Jiang # :
Sehr guter Artikel. Wo finden wir die mqh-Datei zum Herunterladen?

Dateien sind dem Artikel nicht beigefügt, da er als eine Art erweiterte Referenzinformation konzipiert wurde. Sie können die Codes aus dem Artikel einfach per Copy-Paste in den Code-Editor von MetaEditor übernehmen.

 
Artyom Trishkin #:

Dem Artikel sind keine Dateien beigefügt, da er als eine Art erweiterte Referenzinformation konzipiert wurde. Sie können die Codes aus dem Artikel einfach per Copy-Paste in den Code-Editor von MetaEditor übernehmen.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

MT5 in Fremdwährung

Vladimir Karputov, 2016.10.15 08:38 AM

Bitte schreiben Sie auf Russisch in den russischen Teil des Forums.

 
die Funktion MqlRatesPrint fehlt in diesem Artikel
 
Fokus24 #:
Die Funktion MqlRatesPrint ist in diesem Artikel nicht enthalten

Ich habe sie wohl vergessen. Danke!

//+------------------------------------------------------------------+
//| Protokolliert die Beschreibung aller Felder der MqlRates-Struktur |
//+------------------------------------------------------------------+
void MqlRatesPrint(const string symbol,const ENUM_TIMEFRAMES timeframe,const MqlRates &rates,
                   const bool short_entry=true,const uint header_width=0,const uint indent=0,int index=WRONG_VALUE)
  {
//--- Deklarieren Sie eine Variable zum Speichern des Ergebnisses
   string res="";
//--- Abrufen der Anzahl der Dezimalstellen und des Stringwerts des Zeitrahmens
   int dg=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   string tf=StringSubstr(EnumToString(timeframe==PERIOD_CURRENT ? Period() : timeframe),7);
   string num=(index==WRONG_VALUE ? ":" : StringFormat("[%ld]:",index));
//--- Wenn kurze Aufzeichnung - Ausgabe von Taktdaten in das Protokoll im Format Symbol TF[index]: Zeit, O, H, L, C, S, V/VR
   if(short_entry)
     {
      res=StringFormat("%s %s%s %s, O: %.*f, H: %.*f, L: %.*f, C: %.*f, S: %2ld, V: %5lld, RV: %lld",
                       symbol,tf,num,(string)rates.time,dg,rates.open,dg,rates.high,dg,rates.low,dg,rates.close,rates.spread,rates.tick_volume,rates.real_volume);
      Print(res);
     }
   /* Beispielausgabe:
 GBPUSD H1: 2023.07.21 08:00:00, O: 1.28794, H: 1.28848, L: 1.28772, C: 1.28772, S: 4, V: 448, RV: 0
 */
//--- Ansonsten.
   else
     {
      //--- eine Zeichenkette erstellen, die alle Daten der Struktur mit Einrückung und angegebener Breite des Kopffelds beschreibt
      res=StringFormat("%s %s%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",symbol,tf,num,
                       MqlRatesTime(rates,header_width,indent),
                       MqlRatesOpen(symbol,rates,header_width,indent),
                       MqlRatesHigh(symbol,rates,header_width,indent),
                       MqlRatesLow(symbol,rates,header_width,indent),
                       MqlRatesClose(symbol,rates,header_width,indent),
                       MqlRatesTickVolume(rates,header_width,indent),
                       MqlRatesSpread(rates,header_width,indent),
                       MqlRatesRealVolume(rates,header_width,indent)
                      );
      //--- Ausgabe der empfangenen Zeichenfolge in das Logbuch
      Print(res);
     }
   /* Beispielausgabe (wenn Last nicht null ist):
 Zeit: 2023.07.20 14:42:33
 Bid: 1.28958
 Ask: 1.28962
 Letzter: 1.28947
 Volumen: 33
 Zeit msc: 2023.07.20 14:42:33.401
 Flags: BID|ASK
 Volumen Real: 33.45
 
 Beispielausgabe (wenn Last Null ist):
 Zeit: 2023.07.20 14:42:33
 Bid: 1.28958
 Ask: 1.28962
 Zeit msc: 2023.07.20 14:42:33.401
 Flags: BID|ASK
 */
  }
//+------------------------------------------------------------------+
 

Ich schlage vor, die Funktionalität zu vervollständigen.


string GetPrintSource( const string Source );

Gibt die Quelle der Druckfunktion durch die Quelle der Struktur zurück.

 
fxsaber #:

Ich schlage vor, die Funktionalität zu erweitern.


Gibt die Quelle der Druckfunktion durch die Quelle der Struktur zurück.

Können Sie mir ein Beispiel geben? Ich verstehe es nicht.

 
Artyom Trishkin #:

Kann ich ein Beispiel bekommen? Ich verstehe das nicht.

string GetPrintSource( const string Source )
{
  return("string ToString( const STRUCT &Data ) { return(\"i = \" + (string)Data.i); }");
}

void OnStart()
{
  Print(GetPrintSource("struct STRUCT { int i; };"));
}
Ich habe hier etwas Ähnliches gemacht, aber mit Eingaben.
CheckInputs - нахождение аварийных проходов при Оптимизации советника
CheckInputs - нахождение аварийных проходов при Оптимизации советника
  • www.mql5.com
Во время Оптимизации советника некоторые проходы могут завершаться аварийно. Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий Новая версия платформы MetaTrader 5