Zeit-Enumeration über 0Uhr Problem optimieren (EA mit 2 Zeitfenstern (Signal&Trading) Wie zeiteffizient gestalten?? - Seite 3

Einloggen oder registrieren, um einen Kommentar zu schreiben
Bayne
312
Bayne  

Danke dir vielmals :)


Wird heute nachmittag getestet.

2fragen:

Ich sehe gerade: Es wird momentan die OnInit() kein zweites Mal aufgerufen... Wie mache ich denn nun eine Schaltung "Daychanged, die dann wechselt, wenn checkTimeBegin ist? (Und anschließend genau einmal Oninit() aufruft, bis sie das nächste Mal zu checkTimeBeginn aufgerufen wird (nochmals: das ist das Ziel des threads)


kurze frage zu seite davor: @OttoPauser hat das NOT beim ersten if (!InTimeRange) lieber weggemacht, macht es nicht mehr sinn es da zulassen, da die Calculation dann stattfinden würde, wenn die Phase & dessen Highs/Lows komplett sind? (Sonst macht er das doch mittendrin und man bekommt nicht die letzten Bars mit in die Berechnung)

Oder mache ich gerade einen gedankenfehler?
Bayne
312
Bayne  
Otto Pauser:

Ich denke ich habe den Fehler gefunden

Verschiebt den Start um einen Tag nach hinten (in die Vergangenheit).

Richtig ist:

Das Ende muss einen Tag in die Zukunft verschoben werden.

Bei der Vorstellung der Zeitgeraden ist mir das klar geworden.

100% Sicher dass es richtig ist? (Dann wäre die Ränge doch "geteilt" oder? Bzw muss doch eigentlich über die letzte Nacht gehen oder?

Carl Schreiber
Moderator
7661
Carl Schreiber  
Bayne:

Danke dir vielmals :)

2fragen:

Ich sehe gerade: Es wird momentan die OnInit() kein zweites Mal aufgerufen... Wie mache ich denn nun eine Schaltung "Daychanged, die dann wechselt, wenn checkTimeBegin ist? (Und anschließend genau einmal Oninit() aufruft, bis sie das nächste Mal zu checkTimeBeginn aufgerufen wird (nochmals: das ist das Ziel des threads)


kurze frage zu seite davor: @OttoPauser hat das NOT beim ersten if (!InTimeRange) lieber weggemacht, macht es nicht mehr sinn es da zulassen, da die Calculation dann stattfinden würde, wenn die Phase & dessen Highs/Lows komplett sind? (Sonst macht er das doch mittendrin und man bekommt nicht die letzten Bars mit in die Berechnung)

Oder mache ich gerade einen gedankenfehler?
  1. Der Tageswechsel interessiert doch nicht!(?) Es gibt doch nur CheckTime, TradeTime, WaitTime und irgendwo innerhalb eines der 'Times' ist der Tageswechsel.
Otto Pauser
1368
Otto Pauser  

Ich überarbeite das ganze nochmal, das war alles zu unüberlegt, bzw. sieht man erst in der praktischen Anwendung was man wirklich benötigt.

Frage: zu welchem Zeitpunkt genau sollen die pending Orders gelöscht, und zu welchem Zeipunkt sollen neue gestzt werden?

Ich denke man wird da wohl zu OOP wechseln müssen um Ereignise wie OnRangeStart() bzw. OnRangeEnd() realisieren zu können.

Ich bleib da dran, weil ich es ja auch selber brauchen kann. Den Code stell ich dann hier rein.

Christian
2468
Christian  

Ist doch schon fertig Otto, zu mindest für oop.

Bischen anpassen und gut

https://www.mql5.com/de/articles/3395


Gruß

Cross-Plattform Expert Advisor: Zeitfilter
Cross-Plattform Expert Advisor: Zeitfilter
  • www.mql5.com
Einführung Ziele Basisklasse Die Klassen und Typen der Zeitfilter Der Container für die Zeitfilter Subfilter (CTimeFilter) Beispiel Schlussfolgerung Einführung Das Filtern der Zeit wird verwendet, wenn eine besondere Zeitspanne definiert wurde, und ein Expert Advisor prüfen muss, ob ein bestimmter Zeitpunkt in diese Zeitspanne fällt. Bestimmte...
Bayne
312
Bayne  
Otto Pauser:

Ich überarbeite das ganze nochmal, das war alles zu unüberlegt, bzw. sieht man erst in der praktischen Anwendung was man wirklich benötigt.

Frage: zu welchem Zeitpunkt genau sollen die pending Orders gelöscht, und zu welchem Zeipunkt sollen neue gestzt werden?

Ich denke man wird da wohl zu OOP wechseln müssen um Ereignise wie OnRangeStart() bzw. OnRangeEnd() realisieren zu können.

Ich bleib da dran, weil ich es ja auch selber brauchen kann. Den Code stell ich dann hier rein.

Das ganze soll weiterhin mql4 tauglich sein.

Die Antwort:
Zur TradeTimeBegin() sollen die offenen Orders gelöscht werden.(falls es dabei zu Problemen mit den neu zu setzenden Ordern kommen könnte, lieber zur TradeTimeBegin)

Zur ChecktimeBegin sollen alte High/LowWerte gelöscht werden, sodass nach der Checkphase, wieder daraus der Höchstkurs genommen werden kann.
Christian
2468
Christian  

Die Sargnägel für mt4 sind schon bestellt Bayne ... :-)

Bist ganz schön fordernd dafür das du nicht programmieren kannst.

MT4 ist verschwendete Zeit ... meine Meinung.

Gruß

Otto Pauser
1368
Otto Pauser  
Christian:

Die Sargnägel für mt4 sind schon bestellt Bayne ... :-)

Bist ganz schön fordernd dafür das du nicht programmieren kannst.

MT4 ist verschwendete Zeit ... meine Meinung.

Gruß

Fordern tut er wirklich ganz schön, aber unter dem Aspekt, daß ich das in meiner Bibliothek auch gut gebrauchen kann .......

Ja, MT4 ist verschwendete Zeit aber in diesem Fall ist Abwärtskompatibilität leicht zu realisieren.

Ups, muss doch gleich das ganze unter MT4 testen.

Code kommt am Abend. Muss halt auch noch andere Dinge erledigen, man glaubt es kaum ;)

Carl Schreiber
Moderator
7661
Carl Schreiber  
Bayne:
Das ganze soll weiterhin mql4 tauglich sein.

Die Antwort:
Zur TradeTimeBegin() sollen die offenen Orders gelöscht werden.(falls es dabei zu Problemen mit den neu zu setzenden Ordern kommen könnte, lieber zur TradeTimeBegin)

Zur ChecktimeBegin sollen alte High/LowWerte gelöscht werden, sodass nach der Checkphase, wieder daraus der Höchstkurs genommen werden kann.

Wenn beides zu Beginn der WaitTime passiert, warrm dann noch einmal zum Tageswechsel?

Bayne
312
Bayne  

Zunächsteinmal möchte ich sagen, dass es mir Leid tut, wenn ich fordernd wirke, Ich möchte unbedingt eine Lösung finden und hoffe das euch das Problem genauso wie mich interessiert.

Carl Schreiber:

Wenn beides zu Beginn der WaitTime passiert, warrm dann noch einmal zum Tageswechsel?

Ich vestehe die Frage leider nicht ganz


Inzwischen ist mir ein relativ simpler alternativlösungsweg eingefallen, ich werde gleich sobald ich zuhause bin testen :)

void OnTick()
{
   if(DayChanged())
      OnInit();

   if(!InTimeRange(TimeCurrent(),checkTimeBegin,checkTimeEnd))
      if(!calculated)
         {calculated=Calculate();}
      if(calculated)
         {setpending=false;}
      if(!setpending)
         {DeleteAllOrders();}

   if(InTimeRange(TimeCurrent(),tradeTimeBegin,tradeTimeEnd)){
      if(!setpending)
         {setpending=SetPending();}
      if(setpending)
         {calculated=false;}
         }
}
EDIT: Leider auch vieeel zu langsam für den Tester
Einloggen oder registrieren, um einen Kommentar zu schreiben