Disfunktiuonaler Fehler im Skript EA - Seite 2

 
Aber genau das: "weil das Vortages-low über der Eröffnung lag. " ist nicht programmiert.
 

Hallo Carl,

lass mich das kurz rekapitulieren. Der Code agiert aktuell:

- Feststellung des Vortageshoch/Vortagestief

- Einmaliger round-Trade (Long und/oder Short) wird ausgelöst, wenn Vortageshoch/Vortagestief erreicht wird

Somit ist auch eine Gap-Eröffnung z.B. nach oben ein Überschreiten des Vortageshochs und führt zum Trade.

Ich müsste demnach etwas ergänzen, was zusätzlich aussagt:

- Wenn Vortageshoch niedriger als Eröffnung, dann keine keine long-trades

- Wenn Vortagestief höher als Eröffnung, dann keine short-trades


Bin ich da in der Schlussfolgerung richtig? Wenn ja, hast Du einen einfachen Codierungsvorschlag für diese Bedingung?

 

Ich müsste demnach etwas ergänzen, was zusätzlich aussagt:

- Wenn Vortageshoch niedriger als Eröffnung, dann keine keine long-trades

- Wenn Vortagestief höher als Eröffnung, dann keine short-trades

Bin ich da in der Schlussfolgerung richtig? Wenn ja, hast Du einen einfachen Codierungsvorschlag für diese Bedingung?

Wie ich schon sagte mit:

   static MqlRates D1[];

   if (isNewDay) { 
      if ( CopyRates(_Symbol,PERIOD_D1,TimeCurrent(),3,D1) <3) return;
   }

hättest Du in Array D1[] alle Werte op, hi, lo von heute, gestern und vorgestern, damit kannst Du genau das prüfen, was Du beschrieben hast

 

Hallo Carl,


hat zwar gedauert, aber ich habe 2 Regeln mit untergebracht, die das Gap-Problem offenbar gelöst haben. Wenn ich mir das so anschaue, ist das für den Zeitaufwand ziemlich wenig:

   // Check master rule 1: If previous day's high < current day's open, don't do a long trade
    double todayOpen = iOpen(NULL, PERIOD_D1, 0);
    double prevDayHigh = iHigh(NULL, PERIOD_D1, 1);
    if (prevDayHigh < todayOpen) {
        allow_buy_today = false;
    }

    // Check master rule 2: If previous day's low > current day's open, don't do a short trade
    double prevDayLow = iLow(NULL, PERIOD_D1, 1);
    if (prevDayLow > todayOpen) {
        allow_sell_today = false;
    }

Verbleibt noch die Regel, vor Handelsschluss alle Positionen glattzustellen. Bisher war ich in der Umsetzung immer noch nicht erfolgreich.

Erster Ansatz war, nach Empfang der ersten Ticks soundsoviel Sekunden zu addieren und dann glattzustellen. Bin damit gescheitert. Dann wollte ich direkt die Zielzeit feststellen und daraufhin schließen. Ging irgendwie auch nicht.

 

Der Forex-Markt eröffnet So 17:00 NYer Zeit und schließt Fr. 17:00, das sind also 5*24*60*60 = 432000 Sekunden. Also Anfangt der aktuellen Woche:

#define  BoW(t) ((t)-((t-172800)%604800 - 86400))           // Begin of Week.. Su 00:00:00: 604800=168h=7*24; 172800=35.5h; 86400=24h

und dann 432000 dazu addieren und 1,2, oder Minuten abziehen - die letzte Sekunde würde ich nicht nehmen.

 

Hallo Carl,

ich brauche das jeden Tag, wenn ich overnight vermeiden will. Der vielversprechenste Ansatz aus meiner Sicht war:

#include <Tools\DateTime.mqh>
.
.
input double lots = 1.0;
input int slippage = 5;
.
.
.
// Check if current time is 18:59:30
if(TimeHour(TimeCurrent()) == 18 && TimeMinute(TimeCurrent()) == 59 && TimeSeconds(TimeCurrent()) == 30)
	{
      // Loop through all orders and close them
      for(int i = OrdersTotal() - 1; i >= 0; i--)
      {
         ulong orderTicket = OrderGetTicket(i);
         OrderClose(orderTicket, lots, Bid, slippage);
      }
   }

Hat sich aber schon beim Zeitcheck festgefressen und ich habe keine Ahnung, warum:

'TimeHour' - undeclared identifier

'TimeCurrent' - some operator expected

'(' - unbalanced left parenthesis

'==' - operand expected

'TimeMinute' - undeclared identifier

'TimeCurrent' - some operator expected

expression has no effect

'TimeSeconds' - undeclared identifier

'TimeCurrent' - some operator expected

expression has no effect

')' - unexpected token

expression has no effect

 

Damit:

if(TimeHour(TimeCurrent()) == 18 && TimeMinute(TimeCurrent()) == 59 && TimeSeconds(TimeCurrent()) == 30)

kommst Du nie in das if wenn es zB. in der Sekunde 30 gerade mal keinen Tick gibt.

Weißt Du wie viel Zeit Du hättest sparen können, wenn Du ein wenig suchst?

Hier ist zB. ein Artikel über den Handel in der Nacht, der natürlich die Zeit definieren muss für Anfang und Ende des Handels: Lesen, verstehen, kopieren einfügen, anpassen und prüfen:

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

Dauert vermutlich weniger als 1 Stunde!

Wie Zuverlässig ist Nacht-Trading?
Wie Zuverlässig ist Nacht-Trading?
  • www.mql5.com
Der Artikel behandelt die Besonderheiten des flachen Nacht-Trading auf Cross-Währungspaare. Er erklärt wo Sie Gewinne erwarten können, und warum große Verluste nicht unwahrscheinlich sind. Außerdem beinhaltet der Artikel auch ein Beispiel des für Nacht-Trading entwickelten Expert Advisor und spricht über die praktische Anwendung dieser Strategie.
 

Hallo Carl,


das nehme ich dankend an und setz mich damit auseinander.

Mal unabhängig von der Problematik, ob es einen tick in der Sekunde gibt (dann wäre ich im Test auf die Nase gefallen), warum schmeißt der code ansich Fehler?

 
Leuchtfeuer #:

Mal unabhängig von der Problematik, ob es einen tick in der Sekunde gibt (dann wäre ich im Test auf die Nase gefallen), warum schmeißt der code ansich Fehler?

Weil Dein Code Fehler hat, die nicht kompiliert werden können. Es werden Zeile und Stelle der Zeile angegeben...

Grund der Beschwerde: