Globale Variable aus SymbolInfoTick-Funktion funktioniert nicht

 

Hallo MQL5-Freunde,

ich möchte als Referenzwert einmalig einen Tick in eine Variable speichern; das muss ich als globale Variable machen, weil in OnTick der Wert mit jedem neuen Tick überschrieben würde.

Ich versuche es so:

MqlTick ask0;
double basetick;
basetick=SymbolInfoTick(Symbol(),ask0);
Print("basetick.bid: ", ask0.bid);

Im OnTick Bereich funktioniert das, aber global bekomme ich:

"basetick - unexpected Token, probably type is missing?

Kann ich die Funktion im globalen Bereich nicht verwenden?
Hier https://www.mql5.com/de/docs/marketinformation/symbolinfotick steht da nichts zu.

Vielen Dank & Grüße,

Christian

Dokumentation zu MQL5: Marktinformation erhalten / SymbolInfoTick
Dokumentation zu MQL5: Marktinformation erhalten / SymbolInfoTick
  • www.mql5.com
Marktinformation erhalten / SymbolInfoTick - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
global deklarieren, dann in OnInit() Wert zuweisen
 
Chris70:
global deklarieren, dann in OnInit() Wert zuweisen
Danke Chris70, ich hab's, super =)
 
lindomatic:

Hallo MQL5-Freunde,

ich möchte als Referenzwert einmalig einen Tick in eine Variable speichern; das muss ich als globale Variable machen, weil in OnTick der Wert mit jedem neuen Tick überschrieben würde.

Ich versuche es so:

Im OnTick Bereich funktioniert das, aber global bekomme ich:

"basetick - unexpected Token, probably type is missing?

Kann ich die Funktion im globalen Bereich nicht verwenden?
Hier https://www.mql5.com/de/docs/marketinformation/symbolinfotick steht da nichts zu.

Vielen Dank & Grüße,

Christian

btw, 

dein code, 

mit MqlTick speicherst du die aktuellen Tick daten

zur Vereinfachung des Codes

MqlTick tick;

basetick=tick.bid;
Print("basetick.bid: ", tick.bid);

SymbolInfoTick gibt dir nur true oder false zurück

 
amando:

btw, 

dein code, 

mit MqlTick speicherst du die aktuellen Tick daten

zur Vereinfachung des Codes

SymbolInfoTick gibt dir nur true oder false zurück

Was hast du da vereinfacht? Du hast den Code kaputt gemacht!
 
Otto Pauser:
Was hast du da vereinfacht? Du hast den Code kaputt gemacht!

Wieso? Symbolinfotick ist doch nur eine bool? Oder hab ich das in der doku falsch verstanden?

die verweist auf die MqlTick und gibt dir true oder false zurück 

falscher ansatz?

 
amando:
basetick=tick.bid;
 
amando:

Wieso? Symbolinfotick ist doch nur eine bool? Oder hab ich das in der doku falsch verstanden?

die verweist auf die MqlTick und gibt dir true oder false zurück 

falscher ansatz?

Ja, ganz falscher Ansatz. Auszug aus der doc:

bool  SymbolInfoTick( 
   string    symbol,     // symbol name 
   MqlTick&  tick        // reference to a structure 
   );

Wie du siehts wird der MqlTick per reference übergeben, damit dieser mit Werten befüllt werden kann.

Das boolsche Ergebnis sagt nur, ob das auch gelungen ist oder ein Fehler dabei aufgetreten ist.

Komplett sieht das dann so aus:

double ask, bid;

void OnTick()
{
   MqlTick tick;
   if(SymbolInfoTick(_Symbol,tick))
      {
         ask=tick.ask;
         bid=tick.bid;
      }
   else
      Print("*ERROR* in SymbolInfoTick()");
}
 
Otto Pauser:

Ja, ganz falscher Ansatz. Auszug aus der doc:

Wie du siehts wird der MqlTick per reference übergeben, damit dieser mit Werten befüllt werden kann.

Das boolsche Ergebnis sagt nur, ob das auch gelungen ist oder ein Fehler dabei aufgetreten ist.

Komplett sieht das dann so aus:

Danke von dir lerne ich immer gerne, das war mal wieder gut erklärt 

 
amando:

Danke von dir lerne ich immer gerne, das war mal wieder gut erklärt 

Danke, freut mich das ich helfen konnte :)
 

Es kann vorkommen, dass SymbolInfoTick und auch SymbolInfoDouble keinen gültigen Wert liefern, obwohl die OnTick getriggert wurde.

void OnTick()
 {
   MqlTick tick;
   bool ok=SymbolInfoTick(_Symbol,tick);
   double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   Print("bid: ",bid," tick.bid: ",tick.bid," ok: ",ok); // bid: 0.0 tick.bid: 0.0 ok: true
 }

Es trat bei mir bisher nur bei einem einzigen Broker auf, beim ersten Tick am Sessionanfang.

Grund der Beschwerde: