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)
-   -   Zeitprozente (http://www.expert-advisor.com/forum/showthread.php?t=6566)

AVT 01.01.20 18:43

Zeitprozente
 
Ich habe Probleme mit Zeitprozenten. Nehmen wir an ich habe ein bestimmte Zeitspanne, die schon vergangen ist, und ich will jetzt wissen, wann in der Zukunft z.B. die Hälfte, dieselbe Zeitspanne oder 1,5 mal dieser Zeitspanne vergangen sind - dann kann ich das für jeden beliebigen Wert über Prozente ausrechnen. Dummerweise gibt es dabei
- entweder irgendwas, was im MT nirgends dokumentiert ist
- oder eine Art "Berechnungsgrenze", die nicht überschritten werden kann
- oder irgendwas im Code stimmt nicht
Code dazu:
Code:

datetime CalcTimePercent(double PercLevel, datetime HundredVal, datetime ZeroVal)
{
  datetime result= 0;
  double  multi = PercLevel*0.01;        //z.B. für 50%: 50.0*0.01=0.5

        // Zeitsekunden sind immer positiv und müssen sehr groß sein
  ulong The100Time, The0Time, TimeDiff;
  The100Time=HundredVal;                  //neuerer Zeitpunkt als Sekunden seit 1.Jan. 1970
  The0Time  =ZeroVal;                    //älterer Zeitpunkt als Sekunden seit 1.Jan. 1970
  TimeDiff  =(The100Time-The0Time);      //Sekunden zwischen neurerem und älterem Zeitpunkt
       
  ulong DiffVal=(ulong)MathRound( TimeDiff*multi );  //runden weil ulong integer ist
  result=(datetime)(HundredVal+DiffVal);            //neuere Zeit + die %Sekunden

  return( result );
}

Die Werte, die der Funktion übergeben werden:
- Prozentzahl als externe Variable
- Zeiten sind die Anfangs- und Endzeit einer Trendlinie
Mit dem ausgebenen Resultat wird zu diesem Zeitpunkt eine vertitkale Linie erstellt.
Das Problem dabei zeigt sich zum Beispiel im m1-Chart: dort sind die Linien (als beste Prüfung habe ich die 3 Werte 100%, 200% und 300% genommen, weil es da gar keine Diskussionen um den Wert gibt) korrekt, solange die Trendlinie nicht länger als 155 Bars (inklusiv) ist. Wird die Trendlinie länger (also im m1 mehr als 9300 Sekunden Differenz zwischen älterer und neuerer Zeit), dann werden die Ergebnis-Vertikalen immer abenteurlicher.
Hat jemand eine Idee? AVT

MA-EA 03.01.20 00:25

:confused:

Bayreuther 03.01.20 20:00

Die Übergabe von datetime an ulong sollte Du so schreiben.

HTML-Code:

The100Time = (ulong)HundredVal;
The0Time    = (ulong)ZeroVal;

Viele Grüße

AVT 08.01.20 12:48

Zitat:

Zitat von Bayreuther (Beitrag 43216)
Die Übergabe von datetime an ulong sollte Du so schreiben.

Super, danke Dir, das war der Trick, wäre ich nie drauf gekommen :D:D:D. AVT


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 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