Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Computer Uhrzeit in Indikator einbauen (http://www.expert-advisor.com/forum/showthread.php?t=6069)

AVT 29.03.18 21:20

Computer Uhrzeit in Indikator einbauen
 
Ich habe ein kleines Dashboard für manuelles Trading, daß mir die genaue Spreadangabe zeigt (der Broker zeigt "nur" gerundete Werte, die natürlich nicht so genau sind) und - momentan ein Candle countdown. Um den Countdown geht es. Ich würde ihn gerne ersetzen durch eine hh:mm:ss Anzeige ersetzen, die (wie meine Computeruhrzeit) einfach gleichmäßig die Zeit rauf-/runterzählt.
Der Candle Countdown beruht ja auf einem Time-Vergleich, der wiederum abhängig ist, ob ein neuer Tick kam, und das führt manchmal dazu, daß die Zählung mal kurz stehenbleibt und dann das versäumte schnell überspringt.

Ich müßte also irgendwie auf irgendeine Windowsfunktion zugreifen, nur auf welche und wie (oh Gott, hoffentlich ist das nicht eine Treppe zu hoch für mich).
Wenn das einfach ist, wäre ich für Hinweise dankbar - wenn nicht, fliegt der Countdown einfach wieder raus und ich sehe eben wie bisher auf die Computeruhr. Danke. AVT

traderdoc 29.03.18 21:27

EventSetTimer(1);
in die OniInit-Funktion

EventKillTimer();
in die OnDeinit-Funktion

und in der
void OnTimer()-Funktion

wird aller reingeschrieben, was in diesem o.g. Fall jede Sekunde berechnet oder angezeigt werden soll.

Es gibt auch noch einen
EventSetMillisecondTimer()

Wie es der Name schon sagt!

traderdoc

AVT 29.03.18 22:43

Zitat:

Zitat von traderdoc (Beitrag 40842)
EventSetTimer(1);
in die OniInit-Funktion
EventKillTimer();
in die OnDeinit-Funktion

und in der
void OnTimer()-Funktion

wird aller reingeschrieben, was in diesem o.g. Fall jede Sekunde berechnet oder angezeigt werden soll.

Wie es der Name schon sagt!

:) Erst mal vielen Dank traderdoc für die Antwort, das bringt mich schon ein Stück näher, klingt relativ einfach. Ich muß darüber erst mal nachlesen und -denken, weil ich mit Timer noch nicht gearbeitet habe. Und ein "mal eben im Code ersetzt" nicht auf Anhieb klappte, aber ich versuche es hinzukriegen. AVT

AVT 30.03.18 11:57

Hallo traderdoc, meine Lösung sieht jetzt so aus:
Code:

int OnInit()
{
  // == check user inputs before we continue
  // == last: for real clock values
  EventSetTimer(1); // 1 means every second
  return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
  // == 1. kill real time clock
  EventKillTimer();
  // == 2. delete all created objects
  for (int counter=-1;counter<19;counter++) ObjectDelete(indNames+(string)counter);
  // == 3. print code why we were deinitialized
  Print(__FUNCTION__," DeInit reason code = ",reason);
}
int OnCalculate (const int rates_total, // + more stuff
                const int& spread[])
{
  if (ShowInfo)
  {
      int C1end=70, C2end=10;        // (C)olumn 1|2 end    : right pixel end of column 1 and 2
      int Hpls=0;                    // (H)orizontal (pl)u(s): used as Hpls*1 *2 for each new line
      if    (FontSize==10) Hpls=12;
      else if(FontSize==9)  Hpls=11;
      else if(FontSize==8)  Hpls=10; 
     
      if (ObjectFind(indNames+"0") ==-1)
      {  // fixed objects in the first column
        FuncCreateObject("1",C1end+HoriLeftShift,VerticalShift+Hpls*1,"local :",FontSize,FontName,normalColor,0); 
      }
  } //== if (ShowInfo)
  //== return the value of prev_calculated for next call
  return(rates_total);
}
void OnTimer()
{
  int C1end=70, C2end=10;        // (C)olumn 1|2 end   
  int Hpls=0;                    // (H)orizontal (pl)u(s)
  if    (FontSize==10) Hpls=12;
  else if(FontSize==9)  Hpls=11;
  else if(FontSize==8)  Hpls=10;
     
  datetime LocalTime=TimeLocal();                          // = JJJJ.MM.DD hh:mm:ss
  string TimeString=TimeToString(LocalTime,TIME_SECONDS ) ; // = hh:mm:ss
  FuncCreateObject("11",C2end+HoriLeftShift,VerticalShift+Hpls*1, // name+positon
                    TimeString,FontSize,FontName,CounterColor      // text+format
                  ); 
}
// FuncCreateObject is userdefined function

Ist das so schon ok oder kann man da noch was verbessern? Was mich ein bißchen stört ist die Wiederholung der Positionsbedingungen C1end,C2end,Hpls. Vielleicht sollten die besser in der FuncCreateObject() stehen.
Aber die Uhrzeit ist jetzt perfekt! :cool: Danke noch mal für die Hilfestellung, war gar nicht so schwer. AVT

Adlerauge 01.04.18 00:48

...hier ist auch noch was in der Art:
https://www.mql5.com/en/code/12804
Der zählt die verbleibende Zeit der Kerze runter.

AVT 03.04.18 10:01

Zitat:

Zitat von Adlerauge (Beitrag 40860)
...hier ist auch noch was in der Art:
https://www.mql5.com/en/code/12804
Der zählt die verbleibende Zeit der Kerze runter.

:) Vielen Dank Adlerauge, bin grade dabei, den Code zu lesen und zu sehen, ob es besser ist, das auf der Basis zu machen. AVT


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:58 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum