Antwort

höchste und niedrigste Werte im Bereich ermitteln

3 Antworten

mikeyc

Kunde, bbp_participant, Gemeinschaft, 877 Antworten.

Profil besuchen

vor 8 Jahren #114474

Hallo Mark und Team,

 

Ich habe ein paar interessante Strategien gefunden, die alle auf den Funktionen HighestInRange und LowestInRange in SQ basieren. Wenn man sich den generierten MQ4-Code anschaut, gibt es dafür zwei Funktionen, die die Start- und Endstunde und -minuten nehmen, um den höchsten Preis in diesem Zeitbereich und den niedrigsten Preis in diesem Zeitbereich zurückzugeben.

 

Allerdings scheint die Logik dort etwas seltsam. Warum 100 Balken? Wenn ich auf M1 Zeitrahmen, die weniger als 2 Stunden, um einen Balken, der eine mögliche 24-Stunden-Periode abdeckt zu finden ist?

 

Außerdem ist es sehr langsam. Warum nicht eine Kombination aus iBarShift, iHighest und iLowest verwenden, um den Höchst- und Tiefstwert zwischen zwei Zeitpunkten zu ermitteln?

double getHighestInRange(int fromHour, int fromMinute, int toHour, int toMinute) {
   int indexTo = -1;
   int indexFrom = -1;
   int i;

   // Index des Balkens für timeTo finden
   for(i=1; i<=100; i++) {
      if(timeIsBiggerOrEqual(Time[i], toHour, toMinute) && timeIsLower(Time[i+1], toHour, toMinute)) {
         indexTo = i;
         break;
      }
   }

   if(indexTo == -1) {
      Log("Nicht gefunden indexTo");
      return(-1);
   }

   // Index des Balkens für timeFrom finden
   for(i=1; i<=100; i++) {
      if(i <= indexTo) continue;

      if(timeIsBiggerOrEqual(Time[i], fromHour, fromMinute) && timeIsLower(Time[i+1], fromHour, fromMinute)) {
         indexAus = i;
         break;
      }
   }

   if(indexFrom == -1) {
      Log("Nicht gefunden indexFrom");
      return(0);
   }

   double Wert = -10000.0;

   for(i=indexTo; i<=indexFrom; i++) {
      Wert = MathMax(Wert, iHigh(NULL, 0, i));
   }

   return(value);
}

Ich habe versucht, diese und die anderen erforderlichen Funktionen in einen Indikator einzubauen, aber die Ergebnisse waren nicht sinnvoll.

 

Ich bin etwas verwirrt, ob und wie sie funktionieren.

 

Danke,

 

Mike

0

mikeyc

Kunde, bbp_participant, Gemeinschaft, 877 Antworten.

Profil besuchen

vor 8 Jahren #134210

Bei näherer Betrachtung sehe ich folgende Probleme:

 

  1. In SQ, wenn die Strategie den HighestInRange/LowestInRange verwendet, dauert es 10x länger, die Strategie zu verarbeiten als eine, die diesen Baustein nicht verwendet.
  2. Die exportierte Strategie in MQL (für MetaTrader) funktioniert nicht in niedrigeren Zeitrahmen (z.B. M5), da sie nur 100 Balken in der Zeit zurück sucht.
  3. Wenn Sie den Code ändern, um eine größere Zahl als 100 zu haben, ist er im MT4 sehr langsam, im Backtester kriecht er sogar auf einem sehr schnellen Rechner.

Ich kann verstehen, warum der Code so sucht, wie er es tut (z. B. um Lücken am Wochenende zu schließen), aber er ist sehr ineffizient.

 

Ich versuche, eine viel schnellere Version zu schreiben.

0

mikeyc

Kunde, bbp_participant, Gemeinschaft, 877 Antworten.

Profil besuchen

vor 7 Jahren #138963

Ist sonst niemandem aufgefallen, wie langsam SQ ist, wenn man HighestInRange und/oder LowestInRange auswählt?

 

Für SQ4 würde ich vorschlagen, die Ausgabe dieser Bausteine einmal zu Beginn des ersten Durchlaufs zu berechnen, wobei die Ergebnisse für jede mögliche Stunde und Minute für jeden Balken im Speicher gehalten werden. Die Berechnung bei jeder Iteration ist sehr langsam und RAM ist billig und schnell.

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

vor 7 Jahren #138972

Hallo, ich glaube, Marks hat die Art und Weise, wie der Blockcode implementiert ist, überarbeitet, um die "Plugin"-Funktion in der neuen Version verfügbar zu machen. Ich werde die Leistung mit SQ4 überprüfen, wenn sie veröffentlicht wird.

0

Ansicht von 3 Antworten - 1 bis 3 (von insgesamt 3)