Wie man einen neuen Balken erkennt - Seite 2

 
Ian Harris:

Hallo oneillj,

Ich dachte, ich hätte schon geantwortet, aber es scheint im Internet-Äther verschwunden zu sein.

Das von Ihnen gelieferte Codefragment ist so ziemlich das, worüber ich mich ursprünglich beschwert habe. Warum so komplex? Ich dachte mir, dass es einen einfacheren Weg geben muss. Ich habe mir diesen ausgedacht, der zu funktionieren scheint. Bitte korrigieren Sie mich, wenn ich falsch liege. (Ich habe auch versucht, BarsCalculated zu verwenden, aber es war immer gleich Bars, so dass der Test immer als falsch ausgewertet wurde).

static int LetzteBarZahl = 0;
if (Balken(_Symbol, _Periode) > LastBarCount)
LastBarCount = Bars(_Symbol, _Period);
sonst
zurückgeben;

;-) Ian

Ich stimme völlig zu, dass wir etwas so einfach wie möglich brauchen.

Leider scheint dieser Code bei mir in MQL5 nicht zu funktionieren.

 
RoboSpider:
Leider scheint das in MQL5 nicht zu funktionieren.

Balken wären ohnehin ein schlechter Weg, um einen neuen Balken zu erkennen.

Der einzige zuverlässige Weg, einen neuen Balken zu erkennen, ist die Zeit. Nicht das Volumen, nicht die Preise, nicht die Balken.

static datetime LastBar = 0;
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
  {
   printf("New bar: %s",TimeToString(ThisBar));
   LastBar = ThisBar;
  }
 
honest_knave:

Balken wären ohnehin ein schlechter Weg, um einen neuen Balken zu erkennen.

Der einzige zuverlässige Weg, einen neuen Balken zu erkennen, ist die Zeit. Nicht Volumen, nicht Preise, nicht Balken.

static datetime LastBar = 0;
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
  {
   printf("New bar: %s",TimeToString(ThisBar));
   LastBar = ThisBar;
  }
Du bist mein Held!
 
honest_knave Bars wäre ohnehin ein schlechter Weg, um einen neuen Bar zu erkennen. Der einzige zuverlässige Weg, um einen neuen Balken zu erkennen, ist die Verwendung der Zeit. Nicht Volumen, nicht Preise, nicht Balken.
  1. Bars ist unzuverlässig (ein Refresh/Reconnect kann die Anzahl der Bars auf dem Chart ändern), Volumen ist unzuverlässig (Miss Ticks), Preis ist unzuverlässig (doppelte Preise und Der == Operand. - MQL4 forum.) Verwenden Sie immer Zeit. Neue Kerze - MQL4 Forum
 
honest_knave:

Balken wären ohnehin ein schlechter Weg, um einen neuen Balken zu erkennen.

Der einzige zuverlässige Weg, einen neuen Balken zu erkennen, ist die Zeit. Nicht das Volumen, nicht die Preise, nicht die Balken.

static datetime LastBar = 0;
datetime ThisBar = (datetime)SeriesInfoInteger(_Symbol,PERIOD_CURRENT,SERIES_LASTBAR_DATE);
if(LastBar != ThisBar)
  {
   printf("New bar: %s",TimeToString(ThisBar));
   LastBar = ThisBar;
  }

Nur zur Information, ich habe die folgende Notiz in meinen Referenzen :

//-- Manchmal geben SeriesInfoInteger mit SERIES_LASTBAR_DATE einen Fehler zurück,

Das ist schon lange her und ich benutze/teste diese Funktion schon seit Jahren nicht mehr, also ist es vielleicht nicht mehr der Fall. Aber wenn man sie zur Erkennung eines neuen Taktes verwenden will, ist es wahrscheinlich besser, das zu überprüfen ;-)

 
Alain Verleyen:

Nur zur Information, ich habe den folgenden Hinweis in meinen Referenzen :

//-- Manchmal gibt SeriesInfoInteger mit SERIES_LASTBAR_DATE einen Fehler zurück,

Das ist schon lange her und ich benutze/teste diese Funktion schon seit Jahren nicht mehr, also ist es vielleicht nicht mehr der Fall. Aber wenn man sie benutzen will, um einen neuen Takt zu erkennen, ist es wahrscheinlich besser, das zu überprüfen ;-)

Das ist sehr kryptisch, Alain! Welche Art von Fehlern?

In diesem Fall sollte man bei Gürtel'n'Klammern entweder SeriesInfoInteger >0 und/oder ResetLastError vor dem Aufruf prüfen und dann _LastError nach dem Aufruf prüfen.

Oder holen Sie sich die Zeitquelle woanders, z.B. time[], wenn in OnCalculate, oder CopyTime etc etc.

 

Warum nicht einfach etwas wie dieses verwenden:

   static datetime prevTime=0;
          datetime lastTime[1];
          if (CopyTime(_Symbol,_Period,0,1,lastTime)==1 && prevTime!=lastTime[0])
          {
               prevTime=lastTime[0];
              
               // ...
          }
Es sollte in allen Fällen funktionieren (selbst wenn ein Fehler mit CopyTime() auftritt, wird eine Falle vermieden)
 
honest_knave:

Das ist sehr kryptisch, Alain! Welche Art von Fehlern?

In diesem Fall sollten Sie bei Gürtel und geschweiften Klammern entweder SeriesInfoInteger >0 und/oder ResetLastError vor dem Aufruf prüfen und dann _LastError nach dem Aufruf prüfen.

Oder holen Sie sich die Zeitquelle woanders, z.B. time[], wenn in OnCalculate, oder CopyTime etc etc.

Ich will damit nur sagen, dass SeriesInfoInteger(), als ich es vor Jahren benutzt habe, nicht wirklich zuverlässig war. Es bleibt Ihnen überlassen, was Sie mit diesen Informationen machen :-D
 
Alain Verleyen:
Ich will damit nur sagen, dass SeriesInfoInteger(), als ich es vor Jahren benutzte, nicht wirklich zuverlässig war. Es bleibt Ihnen überlassen, was Sie mit dieser Information anfangen :-D

Nicht viel TBH - Ich brauche nicht zu erkennen, eine neue Bar in MT5 Aber danke für den Austausch - Ich werde es im Hinterkopf für die Zukunft.

Ich habe nur versucht, etwas zu vereinfachen, das die Leute anscheinend zu kompliziert machen.

Dennoch bleibt das Prinzip bestehen: Zeit nutzen. Caveat: Wählen Sie Ihre Methode zur Zeitbeschaffung auf eigene Gefahr, wenn Sie Alains unvollständige historische Notizen berücksichtigen (wie sieht es übrigens mit XP Service Pack 1 aus?)

 
honest_knave:

Nicht viel TBH - Ich brauche nicht zu erkennen, eine neue Bar in MT5 Aber danke für den Austausch - Ich werde es im Auge behalten für die Zukunft.

Ich habe nur versucht, etwas zu vereinfachen, das die Leute anscheinend zu kompliziert gemacht haben.

Das Prinzip bleibt jedoch bestehen: die Zeit nutzen. Caveat: Wählen Sie Ihre Methode, die Zeit zu erhalten, auf eigene Gefahr, angesichts der unvollständigen historischen Notizen von Alain (wie sieht es übrigens mit XP Service Pack 1 aus?)