Globale Variable aus SymbolInfoTick-Funktion funktioniert nicht

Einloggen oder registrieren, um einen Kommentar zu schreiben
lindomatic
39
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:

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
Chris70
473
Chris70  
global deklarieren, dann in OnInit() Wert zuweisen
lindomatic
39
lindomatic  
Chris70:
global deklarieren, dann in OnInit() Wert zuweisen
Danke Chris70, ich hab's, super =)
amando
1984
amando  
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

Otto Pauser
1759
Otto Pauser  
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!
amando
1984
amando  
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?

Christian
2826
Christian  
amando:
basetick=tick.bid;
Otto Pauser
1759
Otto Pauser  
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()");
}
amando
1984
amando  
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 

Otto Pauser
1759
Otto Pauser  
amando:

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

Danke, freut mich das ich helfen konnte :)
lippmaje
844
lippmaje  

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.

12
Einloggen oder registrieren, um einen Kommentar zu schreiben