iBands Werte im Strategy Tester inkorrekt?

 

Hallo zusammen,

ich experimentiere aktuell mit Bollinger Bändern und ibands.


Dabei ist mir im Debugging beim StrategyTester folgendes aufgefallen:

Hier als Beispiel mit den Stunden-Bändern und Faktor 3.

Mir fiel auf, dass sich die Bänder im Strategy Tester - Chart von den ibands nicht mit denen des Indikators BTF_BB decken.

Im Livetest sind die Bändern von ibands und dem Indikator allerdings im Chart 1:1 identisch!


Dann fing ich an, eine eigene Methode für dieses Band zu schreiben. Und da komme ich allerdings erneut auf noch andere Abweichungen.

Was übersehe ich denn hier gerade?

Sind die Werte vom Strategy Tester bei den ibands nicht korrekt?

Danke im Voraus.

LG


Mit ibands:

ENUM_TIMEFRAMES timeframeHour = PERIOD_H1 ;
      	
double outsideBBUpHour[];

ArraySetAsSeries(outsideBBUpHour,true);

int bolBandsHandleoutsideHour = iBands(symbName, timeframeHour, 20, 0, 3, PRICE_CLOSE);

CopyBuffer(bolBandsHandleoutsideHour,1,0,5,outsideBBUpHour);

double bolVal = outsideBBUpHour[0];


Meine Kontrollmethode:

      MqlRates historyBars[];
      ArraySetAsSeries(historyBars,true);
      //Bar Analyse
      int copied=CopyRates(SmbName,timeframeHour,0,20,historyBars);

      if(copied<0)
        {
         Alert("Error copying bars/history data - error:",GetLastError(),"!!");
         ResetLastError();
        }

      
        double valueBollinger = GetBollinger(historyBars,3);


   //+------------------------------------------------------------------+
   //| GetBollinger                                                     |
   //+------------------------------------------------------------------+
double              GetBollinger(MqlRates& arr[], int factor)
     {
      double average = 0;
      int arrSize = ArraySize(arr);
      double closeVal[];
      ArrayResize(closeVal, arrSize);

      for(int arrCount=0; arrCount<ArraySize(arr); arrCount++)
        {
         closeVal[arrCount]=arr[arrCount].close;
         average = average+closeVal[arrCount];
        }
      average = average / ArraySize(arr);

      double deviation = MathStandardDeviation(closeVal);

      return average + (factor * deviation);
     }
 

Poste mal deinen gesamten code

wo hast du die Initialisierung von den bb?

wo steht dein copybuffer.

 

Der Tester ist konzipiert, mit maximaler Geschwindigkeit für einen Einzeltest und vor allem für die Optimierung.

Da die ganze Grafik eines visuellen Tests (auch der Debugger läuft im Prinzip im Tester) alles verlangsamt, hinkt die Grafik hinterher bzw. wird sie 'nur dann und wann' aktualisiert. Das, was Du siehst entspricht daher nicht immer dem aktuellen Stand der Situation.

Prüfe daher nicht die aktuellen Werte, sondern die vergangenen Werte. Mach zB. ein Print() der BB-Werte mit einem Zeitstempel der vorherigen Bar (da sollte sich nichts mehr ändern) bei einer neuen Bar und dann vergleiche diese Werte mit denen des Charts.

Aber lass diesen Test nicht zu lange laufen, sonst könnte die Datei zu groß werden.

Wie man eine Handelsstrategie in MetaTrader 5 schnell entwickeln und debuggen kann
Wie man eine Handelsstrategie in MetaTrader 5 schnell entwickeln und debuggen kann
  • www.mql5.com
Automatische Scalping-Systeme gelten zurecht als der Höhepunkt des algorithmischen Tradings, aber es ist auch am kompliziertesten, einen Code für diese Systeme zu schreiben. In diesem Artikel zeigen wir, wie man mithilfe von eingebauten Werkzeugen für Debugging und visuelles Testen Strategien entwickeln kann, die auf der Analyse eingehender...
Grund der Beschwerde: