Analog zu iBarShift - Seite 10

 
Aleksey Vyazmikin:

Sie meinen, es wird am Montag gezeigt? Das ist es, was ich brauche... :)

Ja, das ist ein seltsames Verhalten für eine Standardfunktion. Schließlich geht es hier um die Anpassung von Werten an ihre "Referenz".

Die Standardfunktion iBarShift von MQL4 gibt die Nummer des linken Balkens zurück (d.h. in diesem Fall Samstag), und iBarShift3 gibt die Nummer des rechten Balkens zurück (d.h. Montag), wenn die angeforderte Zeit am Loch ankommt, was logischer ist.

 
Nikolai Semko:

Ja, das ist wirklich ein seltsames Verhalten für eine Standardfunktion. Schließlich geht es genau um die Anpassung von Werten an den "Benchmark".

Die Standardfunktion iBarShift von MQL4 gibt, wenn die angeforderte Zeit das Loch trifft, die linke Taktnummer zurück (d.h. in diesem Fall Samstag), und iBarShift3 gibt die rechte Taktnummer vom Loch zurück (d.h. Montag), was mehr Sinn macht.

Und was wird passieren, wenn wir jetzt im Loch sind (Echtzeit) und erwarten, dass wir Informationen über die Bar erhalten, welcher Index wird uns angeboten werden? Ich nehme an, es wird "1" in MQL4 sein, während für den dritten Algorithmus wird es "0" sein, oder nicht?

Ich glaube, die MQL4-Funktion hat die Botschaft "nicht nach vorne schauen", was bis zu einem gewissen Grad stimmt - es hängt alles von der Aufgabe ab.

 

Nikolai Semko :

...

Ich habe nur eine Beschwerde über Ihre Option: Sie ist sehr kompliziert und langsam.

Als ich es (vor 4 Jahren) veröffentlicht habe, war das Hauptziel die Genauigkeit (wieder), weil alle anderen Versionen, die ich gefunden habe, falsch waren (verglichen mit der mql4-Version).

Ich weiß, dass es schneller gehen kann.

Versuchen Sie, das Gegenteil zu beweisen. Finden Sie eine einzige Kombination von Parametern, bei der Ihre und meine Funktion unterschiedliche Werte anzeigen.

In den meisten Fällen liefert die Funktion das falsche Ergebnis.

Aber ich habe den letzten Parameter nicht genau darin implementiert, weil ich nicht verstehe, warum er benötigt wird. Ich persönlich habe es nie gebraucht.

Die Anforderung ist, NUR die mql4-Version zu haben.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Analog zu iBarShift

Alain Verleyen, 2018.04.05 00:18

Eigentlich zeigt es nur das Gegenteil, meine Version ist die einzige, die korrekt ist. (Und das ursprüngliche iBarShift1 aus diesem Code ist korrekt).

Meine Version wurde als eigenständige Funktion konzipiert, genau wie mql4 iBarShift .


PS: Ist es notwendig, die englische Version zu posten oder ist die russische Übersetzung korrekt?

 
vladevgeniy:
Warum probieren Sie nicht meine Funktion aus? Dort gibt es eine Lösung, die den Beginn und das Ende von Takten zeitlich anpasst. Es scheint alles richtig zu berechnen. Und sie ist schneller als die Version 3 Ihrer schnellsten Version. Oder ist die Branche wichtiger?) Oder liegt auch hier ein Fehler vor?) Ich benutze es schon seit langem....

Wo ist sie, Ihre Funktion, um sie auszuprobieren?

 
Aleksey Vyazmikin:

Und was passiert, wenn wir uns jetzt in einem Loch befinden (Echtzeit) und erwarten, dass wir Informationen über einen Balken erhalten, welcher Index wird uns dann angeboten? Ich nehme an, es wird "1" in MQL4 sein, während für den dritten Algorithmus wird es "0" sein, oder nicht?

Ich glaube, die MQL4-Funktion hat die Botschaft "nicht in die Zukunft schauen", was bis zu einem gewissen Grad stimmt - es hängt alles vom Problem ab.

Nein. Die erste ist Null. In Echtzeit funktioniert es auf die gleiche Weise.

 
Aleksey Vyazmikin:

Und wo ist sie, Ihre Funktion, um sie auszuprobieren?

Es steht am Ende von Seite 7).

int iBarShift(string symbol, ENUM_TIMEFRAMES timeframe, datetime time){
datetime t1 = TimeCurrent()+10000000;
int ps = PeriodSeconds(timeframe);
double div = time/(double)ps;
double mant = div - MathFloor(div);
int ret = Bars(symbol, timeframe, (datetime)(time-(ps*mant)), t1)-1;
return(ret);
}

Das könnte bequemer sein.

 
vladevgeniy:
Warum probieren Sie nicht meine Funktion aus? Ich habe eine Lösung, die den Beginn und das Ende von Takten zeitlich ausgleicht. Es scheint alles richtig zu berechnen. Und sie ist schneller als die 3. Version Ihrer schnellsten Version. Oder ist die Branche wichtiger?) Oder liegt auch hier ein Fehler vor?) Ich benutze es schon seit langem....

Das ist witzig ))))

Hier ist Ihre Funktion:

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   datetime t1=TimeCurrent()+10000000;
   int ps=PeriodSeconds(timeframe);
   double div=time/(double)ps;
   double mant=div-MathFloor(div);
   int ret=Bars(symbol,timeframe,(datetime)(time-(ps*mant)),t1)-1;
   return(ret);
  }

Da Sie einige mathematische Operatoren nicht kennen, wie z. B. % - der Rest der Division

Lassen Sie uns Ihre Funktion etwas vereinfachen.

Es hat funktioniert:

int iBarShift4(string symbol,ENUM_TIMEFRAMES timeframe,datetime time)
  {
   time-=time%PeriodSeconds(timeframe);
   return(Bars(symbol,timeframe,time,UINT_MAX)-1);
  }

Und hier ist meine Funktion:

int iBarShift1(const string Symb,const ENUM_TIMEFRAMES TimeFrame,datetime time)
  {
   return(Bars(Symb,TimeFrame,time+1,UINT_MAX));
  }

Sehr ähnlich. Wirklich?

Nur Ihre macht alles ganz falsch und ist dabei langsamer.

Sie können es mit diesem Skript in MQL4 ausprobieren.

Dateien:
 
Nikolai Semko:

Nein. Die erste ist Null. In Echtzeit funktioniert es genauso.

OK - nur ein Algorithmus, der mir heute "-1" für zukünftige Daten anzeigt....

 
Nikolai Semko:

Das ist witzig ))))


Ja, es gibt Ungereimtheiten.) Ich werde es ausgraben.

 
vladevgeniy:

Nun, ja, es gibt Widersprüche). Ich werde es ausgraben.

Ich habe mich auch schon im Kreis gedreht. Erst jetzt habe ich die kürzeste Lösung herausgefunden.