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; } |
if(dClose < dLastClose) {
// down if (!bTestMode){ Alert ("down"); ... Sleep(1000); //HIER ZWISCHEN x Sekunden DELAY ... Alert ("downdel"); Folgefunktion; } Das sind 1000ms Verzögerung. traderdoc |
Zitat:
|
Ja, warum nicht?
|
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:
|
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 |
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 |
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. |
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)); } |
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 |
Danke Euch allen!
fxtrader, klar habe ich Deinen Post gelesen. Ich probiere es und melde mich, wenn der Metatrader wieder tickt. Gruß und schönes Wochenende |
Liste der Anhänge anzeigen (Anzahl: 1)
Mit mt4ticker sollte es auch am WE ticken können :) -> https://fx1.net/mt4ticker.php
Ach ja, ich denke Du mußt dann nur localtime wählen weil die serverzeit am Wochenende nicht aktualisiert wird ...:cool: |
Zitat:
Code:
static datetime memtime; |
static datetime memtime;
int verzogerung = 10; // 10sec if(dClose<dLastClose) { if(!bTestMode) { Alert("down"); memtime=TimeCurrent(); } } if(TimeCurrent() - memtime > verzogerung) Alert ("downdel"); Das wäre nur eine Lösung, sofern die Aufgabe bestünde, dass ab!! einer Verzögerungszeit der zweite Alert kommen soll. Soll der zweite Alert aber genau mit!! einer bestimmten Verzögerungszeit kommen, dann wird die o.g. Lösung zu ungenau, weil erst mit einem neuen Tick der zweite Alert ausgegeben wird. Und zwischen den Ticks kann auch mal 1 Minute! vergehen, so dass dann der zweite Alert viel später kommt als erwartet. traderdoc |
Zitat:
Code:
uint memtime; Oder bool EventSetMillisecondTimer( int milliseconds ); |
Zitat:
//| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- } //+------------------------------------------------------------------+ |
Alle Zeitangaben in WEZ +2. Es ist jetzt 10:50 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