Bibliotheken: iBarShift - Seite 3

 
angevoyageur:

Danke, ich muss meinen Code auch korrigieren, wenn exact true ist, da ich diesen Parameter missverstanden habe. Englisch Dokumentation für iBarShift ist falsch.

Ich denke, das ist auch mein Fehler, iBarShift sollte Bar zurückgeben, die angegebene Zeit enthalten (nicht mit genauen offenen Zeit).

Könnte ich Ihre Funktion in meiner Bibliothek verwenden (natürlich mit Ihren Urheberrechten)? Wenn es schneller und korrekt ist, warum sollte ich das Rad neu erfinden?)

 
komposter:

Ich denke, das ist auch mein Fehler, iBarShift sollte Bar zurückgeben, die angegebene Zeit enthalten (nicht mit genauen offenen Zeit).

Könnte ich Ihre Funktion in meiner Bibliothek verwenden (mit Ihren Urheberrechten, natürlich)? Wenn sie schneller und korrekt ist, warum sollte ich das Rad neu erfinden?)

Ja, natürlich.
 
Der korrigierte Code, der den Parameter "exact" gut berücksichtigt, wurde veröffentlicht.
 
angevoyageur:

Danke, ich muss meinen Code auch korrigieren, wenn exact true ist, da ich diesen Parameter missverstanden habe. Die englische Dokumentation für iBarShift ist falsch.

Der mql5-Fehler betrifft die Funktion Bars(), ich habe ihn dem Service Desk gemeldet.

Anscheinend ist der Bars()-Fehler jetzt in Build 880 korrigiert.
 
Build 880 behebt den Fehler bei Bars(), und alles funktioniert jetzt gut.
 
angevoyageur:
Build 880 behebt den Fehler bei Bars(), und alles funktioniert jetzt gut.
 

auf m2 mit m1 die Werte bei trudy, aus irgendeinem Grund haben Werte nicht -1, und bei Null bar gibt es eine Rückkehr zum 1. bar.

 

Die Funktion ist an mindestens zwei Stellen schief:

1) if(time>LastBar)

return(0);

Wenn exact=true, sollte die Logik -1 zurückgeben, wenn die Zeit nicht explizit zum letzten Balken gehört, d.h. wenn time>LastBar+PeriodSeconds(timeframe).

2) if(CopyTime(symbol,timeframe,time,1,checkcandle)==1)

...

return(-1);

Auch hier gilt: Wenn exact=false, sollte der nächstgelegene Balken zurückgegeben werden, in diesem Fall Bars(symbol,timeframe)-1.

 

Ich glaube, es gibt einen kleinen Fehler in Ihrem Code:

//--- wenn die Zeit > LastBar ist, wird immer 0 zurückgegeben
   if(time>LastBar)
      return(0);

Wenn der letzte Tick einen neuen Balken 'eröffnet', dann wird if(time>LastBar) zu false - weil jetzt time == LastBar

Und später landen wir hier:

 if(checkcandle[0]==time)
         return(shift-1);

Und nun ist shift == 0, was -1 statt 0 ergibt!

Ich denke also, dass dies:

//--- wenn die Zeit > LastBar ist, wird immer 0 zurückgegeben
   if(time>LastBar)
      return(0);

sollte geändert werden in

//--- wenn die Zeit > LastBar ist, wird immer 0 zurückgegeben
   if(time>=LastBar)
      return(0);

Calli

 
Carl Schreiber:

Ich glaube, es gibt einen kleinen Fehler in Ihrem Code:

Wenn der letzte Tick einen neuen Balken "öffnet", dann wird if(time>LastBar) zu false - weil jetzt time == LastBar

Nicht sicher, was Sie meinen? Ich denke, dass 'letzter Tick' irrelevant ist. Wenn Sie die Funktion verwenden, ist entweder time=LastBar oder nicht.

Und später landen wir hier:

Und jetzt shift == 0 , was -1 statt 0 ergibt!

wenn time==Lastbar dann shift=1 und nicht 0. Es gibt also keinen Fehler (shift kommt von Bars(), was die Anzahl der Bars ist, deshalb geben wir 'shift-1' zurück).

Ich denke also, dass dies:

sollte geändert werden in

Calli

Deine Korrektur würde auch funktionieren, aber der Fall 'time==LastBar' wird wie ein "normaler" Fall verarbeitet.

Die Anweisung

 if(time>LastBar)

wurde als Fehlerbehebung hinzugefügt, wenn die Zeit größer als die Zeit des aktuellen Balkens 0 ist.