Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3824
Beiträge: 36909
Benutzer: 6.083
Aktive Benutzer: 494
Links: 80
Wir begrüßen unseren neuesten Benutzer: Wombat
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 4 Stunden
- Wombat
vor 19 Stunden
- idur
vor einem Tag
- DarthTrade...
vor einem Tag
- Eren
vor 2 Tagen
- Rene1504

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 44
Gesamt: 46
Team: 0
Team:  
Benutzer:  fxnoob, Stier
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 10.07.14
Gesperrter Benutzer
 
Registriert seit: Jan 2014
Beiträge: 8
Mimicri20z befindet sich auf einem aufstrebenden Ast
Standard 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;
}
  #2 (permalink)  
Alt 10.07.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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

Das sind 1000ms Verzögerung.

traderdoc
  #3 (permalink)  
Alt 10.07.14
Gesperrter Benutzer
 
Registriert seit: Jan 2014
Beiträge: 8
Mimicri20z befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
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?
  #4 (permalink)  
Alt 10.07.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ja, warum nicht?
  #5 (permalink)  
Alt 10.07.14
Gesperrter Benutzer
 
Registriert seit: Jan 2014
Beiträge: 8
Mimicri20z befindet sich auf einem aufstrebenden Ast
Standard

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
  #6 (permalink)  
Alt 10.07.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
  #7 (permalink)  
Alt 10.07.14
Benutzerbild von fxdaytrader
Premium Mitglied
 
Registriert seit: Dec 2013
Ort: hier und dort
Beiträge: 433
fxdaytrader befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
krank im Kopf aber sonst ganz nett
build 509 mql4 editor download
  #8 (permalink)  
Alt 11.07.14
Gesperrter Benutzer
 
Registriert seit: Jan 2014
Beiträge: 8
Mimicri20z befindet sich auf einem aufstrebenden Ast
Standard

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.
  #9 (permalink)  
Alt 11.07.14
Benutzerbild von fxdaytrader
Premium Mitglied
 
Registriert seit: Dec 2013
Ort: hier und dort
Beiträge: 433
fxdaytrader befindet sich auf einem aufstrebenden Ast
Standard

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));
}
__________________
krank im Kopf aber sonst ganz nett
build 509 mql4 editor download
  #10 (permalink)  
Alt 11.07.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.875
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
Thema geschlossen

Lesezeichen

Stichworte
delay, delay alert, mql4, programmierung, programmierung metatrader, verzögerung, verzögerung alert


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +1. Es ist jetzt 15:56 Uhr.



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