Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Verzögerung für einen Alert (http://www.expert-advisor.com/forum/showthread.php?t=3756)

Mimicri20z 10.07.14 18:52

Verzögerung für einen Alert
 
Hi,

ich habe schon im Internet und der Suche geschaut, jedoch nichts passendes gefunden und zwar möchte ich in einem IF Bereich einen Delay einfügen zwischen dem "down" Alert und dem "downdel" alert.
Kann mir da jemand helfen?

Danke


if(dClose < dLastClose) {
// down
if (!bTestMode){
Alert ("down");
...
HIER ZWISCHEN x Sekunden DELAY
...
Alert ("downdel");
Folgefunktion;
}

traderdoc 10.07.14 19:16

if(dClose < dLastClose) {
// down
if (!bTestMode){
Alert ("down");
...
Sleep(1000); //HIER ZWISCHEN x Sekunden DELAY
...
Alert ("downdel");
Folgefunktion;
}

Das sind 1000ms Verzögerung.

traderdoc

Mimicri20z 10.07.14 19:35

Zitat:

Zitat von traderdoc (Beitrag 26726)
if(dClose < dLastClose) {
// down
if (!bTestMode){
Alert ("down");
...
Sleep(1000); //HIER ZWISCHEN x Sekunden DELAY
...
Alert ("downdel");
Folgefunktion;
}

Das sind 1000ms Verzögerung.

traderdoc

Hey, Danke, geht Sleep denn in einem normalen mql File?

traderdoc 10.07.14 19:55

Ja, warum nicht?

Mimicri20z 10.07.14 20:02

also bei mir geschieht da leider nichts, die beiden Alerts kommen unmittelbar hintereinander. Das ist leider mein Problem.

Danke schonmal für die Mühe!

Zitat:

Note

The Sleep() function can't be called for custom indicators, because indicators are executed in the interface thread and must not slow down it. The function has the built-in check of EA halt flag every 0.1 seconds.
Sleep - MQL4 Documentation

traderdoc 10.07.14 20:33

Hatte ich etwas von einem Indikator überlesen?

Na dann halt über eine Schleife:

for (int i = 0; i<=100000000; i++) {}

oder

i = 0;
while(i<100000000) {i++;}

Die Zahl mußt Du dann an Deine Verhältnisse anpassen.

traderdoc

fxdaytrader 10.07.14 22:53

Ich denke Du mußt die Uhrzeiten abgleichen und prüfen ob Zeitraum xyz verstrichen ist.
Auszug aus einem mal von mir zusammengestrickten alerttimer indicator:

if ( (UseLocalTime && (TimeLocal()-startuptime) >= (minutestosleep * 60)) || (!UseLocalTime && (TimeCurrent()-startuptime) >= (minutestosleep * 60)) ) ALERT

Mimicri20z 11.07.14 23:26

Ja danke schonmal bis hierher. Mit der For oder While Schleife geht es leider definitiv nicht. Scheinbar befindet sich die Routine komplett in einem Tick.
Und ich benötige halt eine Verzögerung zwischen den beiden Alerts.
Also der erste soll kommen, dann eine Pause und dann der zweite (unterschiedliche).

Mal sehen wie ich da weiterkomme. Ideen sind willkommen.

fxdaytrader 11.07.14 23:37

ja, hast Du meinen vorherigen Beitrag überhaupt gelesen?

hier der code, auszugsweise:

extern bool EnableTimer = TRUE;

extern bool AlertAfterMinutes = FALSE;
extern double MinutesToWait = 5.00;

extern bool AlertOnCertainTime = TRUE;
extern int AlertHour = 14;
extern int AlertMinute = 25;
extern string sep0="...";
extern string ult = "true:LocalTime, false:ServerTime";
extern bool UseLocalTime = TRUE;//true:TimeLocal(), false:TimeCurrent()
extern string sep1="...";
extern bool PopupAlerts = TRUE;
extern bool EmailAlerts = FALSE;
extern bool PushNotificationAlerts = FALSE;
extern bool SoundAlerts = TRUE;//FALSE;
extern string SoundFileName = "news.wav";
extern string sep2="...";
extern bool ShowUserInfo = TRUE;
string domainname;
int startuptime=0;
bool AlertDone=FALSE;

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init() {
Print(" *** init "+iName+", © 2014 Marc (fxdaytrader) *** http://ForexBaron.net");
IndicatorShortName(iName);

if (UseLocalTime) startuptime = TimeLocal();
else if (!UseLocalTime) startuptime = TimeCurrent();
//----
return(0);
}

int start() {
if (ShowUserInfo) DisplayUserInfo();
if (EnableTimer) {
if (!AlertDone) if (IsSleepPeriodOver(MinutesToWait)) AlertDone=TRUE;//finished
}//if (EnableTimer) {

return(0);
}

bool IsSleepPeriodOver(double minutestosleep) {
int TradingHourTime;
if (UseLocalTime) TradingHourTime = TimeLocal();
else if (!UseLocalTime) TradingHourTime = TimeCurrent();
int alerttime;

/////////////////////////
if (AlertOnCertainTime) {

if (TimeHour(TradingHourTime)==AlertHour && TimeMinute(TradingHourTime)==AlertMinute) {
//GlobalVariableSet(globalvarName1,TimeDay(TradingHo urTime));
doAlerts("It is "+AlertHour+":"+AlertMinute+" now",SoundFileName);
return(true);
}
}//if (AlertOnCertainTime) {

/////////////////////////
if (AlertAfterMinutes) {

if ( (UseLocalTime && (TimeLocal()-startuptime) >= (minutestosleep * 60)) || (!UseLocalTime && (TimeCurrent()-startuptime) >= (minutestosleep * 60)) ) {
//GlobalVariableSet(globalvarName2,TimeDay(TradingHo urTime));
doAlerts(minutestosleep+" minutes are over now",SoundFileName);
return(true);
}
}//if (AlertAfterMinutes) {

//TIME NOT OVER, so return(false):
return(false);
}

void doAlerts(string msg,string SoundFile) {
msg=iName+" Alert: "+msg;//+", bid = "+DoubleToStr(MarketInfo(Symbol(),MODE_BID),Digits )+", servertime: "+TimeToStr(TimeCurrent());
string emailsubject="MT4 alert on acc. "+AccountNumber()+", "+WindowExpertName()+" - "+iName+" Alert";
if (PopupAlerts) Alert(msg);
if (EmailAlerts) SendMail(emailsubject,msg);
if (PushNotificationAlerts) SendNotification(msg);
if (SoundAlerts) PlaySound(SoundFile);
}//void doAlerts(string msg,string SoundFile) {

string bool2txt(int lbool) {
if (lbool==true) return("yes");
if (lbool==false) return("no");
return("%");
}

void DisplayUserInfo() {
int TradingHourTime;
if (UseLocalTime) TradingHourTime = TimeLocal();
else if (!UseLocalTime) TradingHourTime = TimeCurrent();
Comment ("\n"+iName+", © 2014 Marc (fxdaytrader) *** "+domainname+"\n"+
" EnableTimer="+bool2txt(EnableTimer)+", UseLocalTime="+bool2txt(UseLocalTime)+", AlertAfterMinutes("+DoubleToStr(MinutesToWait,2)+" )="+bool2txt(AlertAfterMinutes)+", AlertOnCertainTime("+AlertHour+":"+AlertMinute+")= "+bool2txt(AlertOnCertainTime)+"\n"+
" ALERTS DONE="+bool2txt(AlertDone)+", current time (local time="+bool2txt(UseLocalTime)+")="+TimeToStr(Tradi ngHourTime));
}

traderdoc 11.07.14 23:39

Mit so einer Schleife kannst Du an jeder Stelle des Programms eine Verzögerung erreichen. Die Zahl muß nur groß genug sein, je schneller der Professor ist.

traderdoc


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum