Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 5 > Programmierung MQL5
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL5 Hier gehts rund ums Programmieren in MQL5.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43267
Benutzer: 7.223
Aktive Benutzer: 74
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einer Woche
- Sundaytrad...
vor einer Woche
- TS_6
vor einer Woche
- Mane
vor 3 Wochen
- AlbertZiz
vor 3 Wochen
- michak

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 436
Gesamt: 436
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 13.02.24
Neues Mitglied
 
Registriert seit: Feb 2024
Beiträge: 8
murkel befindet sich auf einem aufstrebenden Ast
Standard EA berechnet zweiten Zeitstempel nicht zur gewünschten Zeit

Hallo zusammen,

ich habe meinen ersten EA geschrieben, bzw. bin dabei und komme bei folgendem Problem nicht weiter:

Der EA soll zum Beginn eines neuen Tages den Vortag, also die Kerze vom Vortag, nach bestimmten Kriterien untersuchen und das Ergebnis zunächst mal als Printausgabe im Journal darstellen. Das hat soweit zur vollsten Zufriedenheit geklappt. Ergebnis war stets um 00:05:00 entweder kein Signal oder Long oder Short oder warum kein Signal. Soweit so gut.

Nun möchte ich aber einen weitere Aktion zu einer anderen Zeit mir ausgeben - im Beispiel soll um 12:00 Uhr nur dann was im Journal ausgegeben werden, wenn am Vortag auch nur ein Signal vorhanden war. Hier liegt nun mein Problem:

Der EA läuft bis zum ersten Signal korrekt - sprich, wenn kein Signal, auch keine Ausgabe "12:00 Uhr". Ab dem ersten Signal kommt diese Ausgabe dann komplett durcheinander. Mal korrekt, mal nicht, und mal doppelt. Wo liegt der Fehler?

Hier der Code, der hoffentlich korrekt angezeigt wird und im Anhang ein Bild vom Journal-Ergebnis.

Code:
input ENUM_TIMEFRAMES TimeframeSignal = PERIOD_D1;  //Zeiteinheit Signal
input string TimeSignalApp = "12:00";  //Anwendungszeit Signal
input double MinWick = 1.5;  //Docht im Verhältnis zum Körper

bool noSignal, longSignal, shortSignal;
datetime timeSignal;
datetime timeSignalApp;

int OnInit(){

   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason){

}

void OnTick(){
   //---One-time calculation signal
   if(timeSignal != iTime(_Symbol,TimeframeSignal,0)){  //iTime = Zeitpunkt der Eröffnung einer Bar 
      calcSignal();
   }
   
   //---One-time calculation signal application
   if(timeSignalApp != StringToTime(TimeSignalApp)){
      calcSignalApp();
   }
   
   if(TimeCurrent() == timeSignalApp){
      if(shortSignal == true || longSignal == true){
         Print("12:00 Uhr");
      }
   }

   Comment("\nServerzeit: ",TimeCurrent());

}

void calcSignal(){
   timeSignal = iTime(_Symbol,TimeframeSignal,0);
   
   //---Candle 1
   double open1 = iOpen(_Symbol,TimeframeSignal,1);
   double high1 = iHigh(_Symbol,TimeframeSignal,1);
   double low1 = iLow(_Symbol,TimeframeSignal,1);
   double close1 = iClose(_Symbol,TimeframeSignal,1);
      
   double upperWick = high1 - MathMax(open1,close1);
   double lowerWick = MathMin(open1,close1) - low1;
   
   double candleBodySize = MathMax(open1,close1) - MathMin(open1,close1);
   
   double upperWickBodyRatio = upperWick / candleBodySize;
   double lowerWickBodyRatio = lowerWick / candleBodySize;
   
   //---Candle 2
   double open2 = iOpen(_Symbol,TimeframeSignal,2);
   double high2 = iHigh(_Symbol,TimeframeSignal,2);
   double low2 = iLow(_Symbol,TimeframeSignal,2);
   double close2 = iClose(_Symbol,TimeframeSignal,2);
   
   //---Volume
   long volumeCandle1 = iVolume(_Symbol,TimeframeSignal,1);
   long volumeCandle2 = iVolume(_Symbol,TimeframeSignal,2);
   
   //---Candle 3
   double open3 = iOpen(_Symbol,TimeframeSignal,3);
   double high3 = iHigh(_Symbol,TimeframeSignal,3);
   double low3 = iLow(_Symbol,TimeframeSignal,3);
   double close3 = iClose(_Symbol,TimeframeSignal,3);
   
   //---No Signal
   bool outsideBar = (high1 > high2 && low1 < low2); //first -> second candle
   bool insideBar1 = (high1 <= high2 && low1 >= low2); //first -> second candle
   bool insideBar2 = ((high1 <= high3 && low1 >= low3) && (high2 <= high3 && low2 >= low3)); //first -> third candle
   bool volume = volumeCandle1 > volumeCandle2; //lower volume

   if(outsideBar == true || insideBar1 == true || insideBar2 == true || volume != true){
      noSignal = true;
      Print("no signal (volume ",volume,", outsidebar ",outsideBar,", insidebar1 ",insideBar1," ,insideBar2 ",insideBar2,")");
      }else{
         noSignal = false;
   }
   
   //---Short Signal
   bool higherHigh = (high1 > high2 && low1 >= low2);
   bool upperWickLength = (upperWickBodyRatio >= MinWick);

   if(higherHigh == true){
      if(upperWickLength == true){
         shortSignal = true;
         Print("SHORT SIGNAL");
      }else{
         shortSignal = false;
         Print("no short signal - wick length to small");                
         }
   }
   
   //---Long Signal
   bool lowerLow = (low1 < low2 && high1 <= high2);
   bool lowerWickLength = (lowerWickBodyRatio >= MinWick);

   if(lowerLow == true){
      if(lowerWickLength == true){
         longSignal = true;
         Print("LONG SIGNAL");
      }else{
         longSignal = false;
         Print("no long signal - wick length to small");
         }
   }
}

void calcSignalApp(){
   timeSignalApp = StringToTime(TimeSignalApp);
   
}
Schon jetzt vielen Dank für eure Hilfe. :-)

murkel
Angehängte Grafiken
Dateityp: jpg Screenshot_1.jpg (180,7 KB, 4x aufgerufen)
Mit Zitat antworten
  #2 (permalink)  
Alt 14.02.24
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Die Crux liegt in dieser Zeile:

if(TimeCurrent() == timeSignalApp){

Denn hier wird gefordert, dass TimeCurrent auf die Sekunde genau timeSignalApp entspricht.
Nun kommt ein Tick z.B. um 11:59:59 und der nächste kommt 12:00:01.
Was macht der EA dann also - nichts!!!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt 27.02.24
Neues Mitglied
 
Registriert seit: Feb 2024
Beiträge: 8
murkel befindet sich auf einem aufstrebenden Ast
Standard

Dies ist nun mein dritter Versuch, mich bei traderdoc für seine Antwort zu bedanken. Die ersten beiden Versuche wurden leider nicht veröffentlicht.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
zwei zeitstempel


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 13:15 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------