PrintFormat

Formatiert und druckt Symbolvorrat im Expertenjournal laut dem vorgegebenen Format.

void  PrintFormat(
   string format_string,   // Formatzeile
   ...                     // Werte einfacher Typen 
   );

Parameter

format_string

[in]  Formatzeile bestehl aus den normalen Symbolen und auch Formatspezifikation (wenn Argumente nach der Formatzeile stehen).

...

[in]  Jede Werte einfacher Typen, die durch Kommas getrennt werden. Die gesamte Anzahl der Parameter kann nicht mehr als 64 sein, einschliesslich die Formatzeile.

Rückgabewert

Zeile.

Hinweis

Im Strategie-Tester im Optimierungsmodus wird die PrintFormat()-Funktion nicht ausgeführt.

Anzahl, Reihenfolge und Art der Parameter muss exakt der Zusammensetzung der Qualifikanten entsprechen, sonst das Druckergebnis ist undefiniert. Statt der Funktion  PrintFormat() kann die Funktion printf() verwendet werden.

Wenn nach der Zeile Parameter stehen, muss diese Zeile Formatspezifikationen enthalten, die Ausgabeformat dieser Parameter bestimmen. Formatspezifikation beginnt mit Symbol (%).

Formatzeile wird von links nach rechts gelesen. Wenn die erste Formatspezifikation auftritt (wenn es gibt), wird der Wert des ersten Parameters nach der Formatzeile umgewandelt und laut der vorgegebenen Spezifikation ausgegeben. Die zweite Spezifikation ruft Umwandlung und Ausgabe des zweiten Parameters auf usw bis zum Ende der Formatzeile.

Formatspezifikation sieht so aus:        

          %[flags][width][.precision][{h | l | ll | I32 | I64}]type

Jedes Feld der Formatspezifikation ist entweder ein einfaches Symbol oder eine Zahl, die eine normale Formatoption bezeichnet. Die einfachste Formatspezifikation enthält nur Prozentzeichen (%) und Symbol, das  den Typ des Eingabeparameters (ZB %s) bestimmt. Wenn das Prozentzeichen in der Formatzeile ausgegeben werden muss, muss die Formatspezifikation  %%. verwendet werden.

flags

Flagge

Beschreibung

Default-Verhalten

– (minus)

Linksbuendige Ausrichtung innerhalb der vorgegebenen Breite

Rechtsbuendige Ausrichtung

+ (plus)

Ausgabe des Zeichens  + oder - für Werte der Zeichentypen

Zeichen wird ausgegeben, nur wenn der Wert negativ ist.

0 (Null)

Vor dem Ausgabewert werden Nullen innerhalb der vorgegebenen Breite zugesetzt. Wenn die Flagge 0 mit dem ganzzahligen Format (i, u, x, X, o, d) angegeben wird und Spezifikation der Genauigkeit vorgegeben wird  (ZB, %04.d),wird 0 ignoriert.

Nichts wird eingegeben

Space

Vor dem Ausgabewert wird Space gestellt, wenn der Wert ein positiver Zeichenwert ist.

Spaces werden nicht eingegeben

#

Beim Joint-Verwenden mit o, x oder X wird vor dem Ausgabewert 0, 0x oder 0X zugesetzt.

Nichts wird eingegeben

 

Beim Joint-Verwenden mit Format e, E, a oder A wird der Wert immer mit Dezimalpunkt ausgegeben.

Dezimalpunkt wird erst dann ausgegeben, wenn es einen Nicht-Null Bruchanteil gibt.

 

Beim Joint-Verwenden mit Format g oder G, bestimmt Flagge das Vorhandensein des Dezimalpunktes und beugt die Reduzierung der führenden Nullen vor.

Flagge # wird beim Joint-Verwenden mit Formaten c, d, i, u, s ignoriert.

Dezimalpunkt wird erst dann ausgegeben, wenn es einen Nicht-Null Bruchanteil gibt. Fuehrende Nullen werden reduziert.

width #

Eine nichtnegative Dezimalzahl, die minimale Anzahl der Ausgabesymbole des formatierten Wertes vorgibt. Wenn die Anzahl der Ausgabesymbole weniger als angegebene Breite ist, wird die entsprechende Anzahl der Spaces links und rechts abhängig von Ausrichtung zugesetzt (Flagge -). Beim Vorhandensein der Flagge Null, wird vor dem Ausgabewert die entsprechende Anzahl von Nullen zugesetzt. Wenn die Anzahl der Ausgabesymbole mehr als die vorgegebene Breite ist, wird der Ausgabewert nie reduziert.

Wenn als Breite Sternchen (*) angegeben wird, muss in der Liste der übertragenen Parameter der Wert des Typs int an der entsprechenden Stelle sein, der für Breiteangabe des Ausgabewertes verwendet wird.  

precision #

Eine nichtnegative Dezimalzahl, die Genauigkeit der Ausgabe bestimmt - Anzahl der Dezimalzeichen. Zum Unterschied von Spezifikation der Länge kann Spezifikation der Genauigkeit einen Teil des Bruchwertes mit Aufrundung oder ohne Aufrundung reduzieren.  

für verschiedene Typen (type) des Formats wird Spezifikation der Genauigkeit verschieden verwendet.

Typen

Beschreibung

Default-Verhalten

a, A

Spezifikation der Genauigkeit zeigt Anzahl der Dezimalzeichen  

Default-Genauigkeit  – 6.

c, C

nicht verwendet

 

d, i, u, o, x, X

Zeigt minimale Zahl der ausgegebenen Ziffern. Wenn die Anzahl der Ziffern im vorgegebenen Parameter weniger als die angegebene Genauigkeit ist, wird der Ausgabewert  links durch Nullen ergaenzt, Der Ausgabewert wird nicht reduziert, wenn die Anzahl der Ausgabeziffern mehr als die angegebene Genauigkeit ist.

Default-Genauigkeit  – 1.

e, E, f

Gibt die Anzahl der Dezimalzeichen an, die letzte Ausgabeziffer wird ausgerundet.

Default-Genauigkeit – 6. Wenn die Genauigkeit 0 angegeben wird oder der Bruchteil fehlt, wird der Dezimalpunkt nicht ausgegeben

g, G

Gibt die maximale Anzahl der bedeutsamen Ziffern an

Es wird 6 bedeutsame Ziffern ausgegeben.

s

Gibt die Anzahl der Ausgabezeilensymbole an. Wenn die Zeilenlaenge mehr als der Wert der Genauigkeit ist, wird sie bei der Ausgabe reduziert.  

die ganze Zeile wird ausgegeben  

 

   PrintFormat("1. %s"_Symbol);
   PrintFormat("2. %.3s"_Symbol);
   int length=4;
   PrintFormat("3. %.*s"length_Symbol);
   /*
   1EURUSD
   2EUR
   3EURU
   /

h | l | ll | I32 | I64

Spezifikation der Laengedimensionen, die als Parameter übertragen werden.

Typ des Parameters

Das verwendete Praefix

Joint-Spezifikator des Typs

int

l (kleiner L)

d, i, o, x, or X

uint

l (kleiner L)

o, u, x, or X

long

ll (zwei kleine L)

d, i, o, x, or X

short

h

d, i, o, x, or X

ushort

h

o, u, x, or X

int

I32

d, i, o, x, or X

uint

I32

o, u, x, or X

long

I64

d, i, o, x, or X

ulong

I64

o, u, x, or X

type #

Spezifikator des Typs ist ein einziges obligatorische Feld für formatierte Ausgabe.

Symbol

Typ

Ausgabeformat

c

int

Symbol des Typs short (Unicode)

C

int

Symbol des Typs char (ANSI)

d

int

Zeichendezimalganzzahl

i

int

Zeichendezimalganzzahl

o

int

Zeichenlose Oktalganzzahl

u

int

Zeichenlose Dezimalganzzahl

x

int

Zeichenlose hexadezimalganzzahl mit "abcdef" Verwendung

X

int

Zeichenlose hexadezimalganzzahl mit "ABCDEF" Verwendung

e

double

Realwert in Format [ – ]d.dddd e [sign]ddd, wo d – eine Dezimalzahl, dddd – eine oder mehrere Dezimalzahlen, ddd – dreistellige Zahl, die Exponentengroesse bestimmt, Zeichen – plus oder minus

E

double

Dem Format e, gleich unter Ausschluss, dass Exponentenzeichen mit einem Grossbuchstaben anfaengt  (E statt e)

f

double

Realwert in Format [ – ]dddd.dddd, wo dddd – eine oder mehrere Dezimalziffern. Anzahl der ausgegebenen Dezimalzeichen hängt von der Größe der Zahl ab. Anzahl der Dezimalzeichen hängt von der erforderlichen Genauigkeit ab.

g

double

Realwert, der im Format f oder e ausgegeben wird, abhängig davon, welches Format kompakter ist.

G

double

Realwert der im Format f oder e ausgegeben wird, abhängig davon, welche Ausgabe kompakter ist.

a

double

Realwert in Format  [−]0xh.hhhh p±dd, wo h.hhhh – mantissa in Form der hexadezimaler Ziffern mit Verwendung von  "abcdef", dd – eine oder mehrere Ziffern einer Exponente. Anzahl der Dezimalzeichen wird durch Spezifikation der Genauigkeit bestimmt.

A

double

Realwert in Format [−]0xh.hhhh P±dd, wo h.hhhh – mantissa in Form von hexadezimaler Ziffern mit Verwendung von "ABCDEF", dd – eine oder mehrere Ziffern einer Exponente. Anzahl der Dezimalzeichen wird durch Spezifikation der Genauigkeit bestimmt.

s

string

Zeilenausgabe

Anstatt der Funktion PrintFormat() kann die Funktion printf() verwendet werden.

Beispiel:

void OnStart()
  {
//--- Name des Handelservers
   string server=AccountInfoString(ACCOUNT_SERVER);
//--- Kontonummer
   int login=(int)AccountInfoInteger(ACCOUNT_LOGIN);
//--- Ausgabe von long
   long leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
   PrintFormat("%s %d: Hebel = 1:%I64d",
               server,login,leverage);
//--- Währung der Einlage
   string currency=AccountInfoString(ACCOUNT_CURRENCY);               
//--- Ausgabe von double mit 2 Ziffern nach dem Dezimalkomma
   double equity=AccountInfoDouble(ACCOUNT_EQUITY);
   PrintFormat("%s %d: eigene Mittel auf dem Konto = %.2f %s",
               server,login,equity,currency);
//--- Ausgabe von double mit dem Vorzeichen +/-
   double profit=AccountInfoDouble(ACCOUNT_PROFIT);
   PrintFormat("%s %d: aktuelles Ergebnis nach offenen Positionen = %+.2f %s",
               server,login,profit,currency);
//--- Ausgabe von double mit einer variablen Anzahl von Ziffern nach dem Dezimalkomma
   double point_value=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
   string format_string=StringFormat("%%s: der Wert eines Punktes  = %%.%df",_Digits);
   PrintFormat(format_string,_Symbol,point_value);
//--- Ausgabe von int
   int spread=(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
   PrintFormat("%s: aktueller Spread in Punkten = %d ",
               _Symbol,spread);
//--- Ausgabe von double im wissenschaftlichen Format mit einem Gleitkomma und 17 Stellen 
   PrintFormat("DBL_MAX = %.17e",DBL_MAX);   
//--- Ausgabe von double im wissenschaftlichen Format mit einem Gleitkomma und 17 Stellen
   PrintFormat("EMPTY_VALUE = %.17e",EMPTY_VALUE);  
//--- Ausgabe mithilfe von PrintFormat() mit standardmäßiger Genauigkeit
   PrintFormat("PrintFormat(EMPTY_VALUE) = %e",EMPTY_VALUE);
//--- Einfache Ausgabe via Print()
   Print("Print(EMPTY_VALUE) = ",EMPTY_VALUE);
/* Ergebnis der Ausführung
   MetaQuotes-Demo 1889998: Hebel = 1:100
   MetaQuotes-Demo 1889998: eigene Mittel auf dem Konto = 22139.86 USD
   MetaQuotes-Demo 1889998: aktuelles Ergebniss nach offenen Postionen = +174.00 USD
   EURUSD: Wert eines Punktes  = 0.00001
   EURUSD: aktueller Spread in Punkten = 12 
   DBL_MAX = 1.79769313486231570e+308
   EMPTY_VALUE = 1.79769313486231570e+308
   PrintFormat(EMPTY_VALUE) = 1.797693e+308
   Print(EMPTY_VALUE) = 1.797693134862316e+308
*/   
  }

Sehen Sie auch

StringFormat, DoubleToString, Realtypen (double, float)