Hilfe beim Turtle-Trade-Sequenz

 

Hallo Zusammen,

ich habe einen EA, indem ich die Turtle-Stategie anwenden möchte.

Ich möchte praktisch nur erkennen, sobald ein Trendwechsel im Turtle stattfindet.

So an sich funktioniert es eigentlich, wie ich es programmiert habe. Aber der Strategietester geht extremst langsam, wenn ich diese Funktion einschalte.

Ich habe den ganzen Code schon nach Fehlern abgesucht und auch schon Schritt für Schritt einzelne Funktionen ausgeklammert. Dabei komme ich immer wieder zu dem Schluss, dass es an der folgenden Sequenz liegen muss...

 //+------------------------------------------------------------------+
 //|=========================TURTLE-POWER=============================|
 //+------------------------------------------------------------------+
 if(Turtle_Power) {
  e=0;
  string Turtlerichtung = "";
  double   B_Turtle_now   = iCustom(NULL,0,iTurtle,period,Timeframe,6,e);
  double   B_Turtle_prev  = iCustom(NULL,0,iTurtle,period,Timeframe,6,e+1);
  double   B_Turtle_preprev  = iCustom(NULL,0,iTurtle,period,Timeframe,6,e+2);

  while ((B_Turtle_now == 1 && B_Turtle_prev == 1) || (B_Turtle_now == 0 && B_Turtle_prev == 0)) {         
   e++;
   for(f=1;f<Bars-1;f++){ 
    Turtle_now   = iCustom(NULL,0,iTurtle,period,Timeframe,6,f);
    Turtle_prev  = iCustom(NULL,0,iTurtle,period,Timeframe,6,f+1);
    Turtle_after = iCustom(NULL,0,iTurtle,period,Timeframe,6,f-1);
    //LONG
    if (Turtle_now == 0 && Turtle_prev == 1 && Turtle_after == 0) {
     Range_Start_Day = TimeDay(iTime(NULL,0,f));
     Range_Start_Hour = TimeHour(iTime(NULL,0,f));
     Range_Start_Minute = TimeMinute(iTime(NULL,0,f));
     CrossShift = f; 
     Turtlerichtung = "UP-Trend";
    break;  
    }  
    //SHORT
    if (Turtle_now == 1 && Turtle_prev == 0 && Turtle_after == 1) {
     Range_Start_Day = TimeDay(iTime(NULL,0,f));
     Range_Start_Hour = TimeHour(iTime(NULL,0,f));
     Range_Start_Minute = TimeMinute(iTime(NULL,0,f));
     CrossShift = f; 
     Turtlerichtung = "DOWN-Trend";
    break;  
    }
   }
   if (e>=Bars-1) break; 
  }
 }   


Wie ihr seht, lese ich einfach einen Indikator dafür aus. Also die while-Schleife scheint richtig zu sein. Denn wenn ich nur die for-Schleife ausklammere und den Tester starte, läuft er relativ schnell, wenn ich den 'Schieber auf 32 also voll aufdrehe. Aber sobald die for-Schleife mitläuft, geht der Tester sehr langsam - eigentlich fast genau wie in echtzeit-ticks.


Hat einer ne Idee, was da los ist? Denn wie gesagt, eigentlich funktioniert es. Nur der Tester macht etwas blöd :-/

Ich habe die gleiche Funktion parallel auch mit einem gleitendem Durchschnitt am laufen und da funktioniert diese Logik!

 

Hast Du mal nachgeschaut, wie viele Turtle Trader EAs es gibt?

Erst suchen! Es gibt fast nix, was nicht schon für Mt4/5 programmiert wurde!
Und aus Vielem aus der CodeBase oder den Artikeln kann man sich seinen Teil 'rauskopieren!

Wenn ich auf Englisch stelle und dann "Turtle" eingebe sehe ich 41 Seiten a 10 Treffer!

 

kopieren kann jeder. Und wenn ich nach "Turtle EA mt4" suche, kommen grade mal 2 Seiten mit denen ich so eigentlich nichts anfangen kann.

Außerdem funktioniert es ja. Es ist wohl nur ein kleiner Fehler in der Logik, welcher mir den Tester lahm legt.

Hatte nur gehofft, dass man mir hier helfen könnte :-(

 
Shurka:

kopieren kann jeder. Und wenn ich nach "Turtle EA mt4" suche, kommen grade mal 2 Seiten mit denen ich so eigentlich nichts anfangen kann.

Außerdem funktioniert es ja. Es ist wohl nur ein kleiner Fehler in der Logik, welcher mir den Tester lahm legt.

Hatte nur gehofft, dass man mir hier helfen könnte :-(

Ich denke, daß du in der for-Schleife immer ALLE Kerzen durchgehst, und das bei jedem Tick. Kann es daran liegen?
 

hm, ok. Aber wie sollte es denn anders aussehen?

Ich kenne es nur so :-(

 
Shurka:

hm, ok. Aber wie sollte es denn anders aussehen?

Ich kenne es nur so :-(

Der Programmteil ist aus dem grösseren Zusammenhang gerissen, da kann ich dir nur bedingt helfen, ausserdem ist es mql4.

In mql5 wäre das für mich leichter. Schau dir in den vielen Beispielen an, wie das gemacht wird.
Meistens ist eine Variable mit der Bezeichnung 'limit' im Spiel.

 

was ich aber grade festgestellt habe...


Habe mir die Variable "e" per comment anzeigen lassen. Und e hat komischwerweise 1001 als anfangswert beim testen!