Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Bitte beschreiben Sie, was Sie zu tun versuchen.
Entschuldigung für die Verwirrung.
Ich muss 3'EventSetMillisecondTimer' wie unten einstellen (Sie sagten, es funktioniert nicht...). Gibt es eine alternative Möglichkeit, bitte?
EventSetMillisecondTimer( 250 ); // 2nd will read in 250 | if won't read try next
EventSetMillisecondTimer( 1250 ); // 3rd will read in 1250 | if read then stop reading till next PERIOD_M5
Am besten.
Der Timer wird nur einmal in der Funktion OnInit() gesetzt.
Wenn Sie den Zähler neu initialisieren wollen, müssen Sie den alten Zähler zuerst löschen, was normalerweise mit der Funktion OnDeinit() geschieht.
Wie ich schon sagte, könnte man alternativ auch einen Zähler verwenden.
Wenn Sie den Code z.B. in einen 10 Millisekunden Timer setzen, wird der Code alle 10 Millisekunden ausgeführt.
Dies wird höchstwahrscheinlich Ihr Terminal einfrieren, weil es zu schnell ist.
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(1);// 1 second
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//--- increment counter
counter++;
//--- comment status on the chart
Comment(IntegerToString(counter));
//--- switch timer
switch(counter)
{
case 60:
Alert(" 1 Minute ");
// Do Something...
break;
case 300:
Alert(" 5 Minutes ");
// Do Something...
break;
case 900:
Alert(" 15 Minutes ");
// Do Something...
counter=0;// Reset counter on highest value.
break;
}
// end switch timer
if(counter>900)
{
counter=0;// Safety Mechanism
}
}
//+------------------------------------------------------------------+
Beachten Sie, dass die eine Minute nur einmal ausgelöst wird, also nicht jede Minute.
Der 5-Minuten-Trigger wird ebenfalls nur einmal nach den ersten fünf Minuten ausgelöst, also nicht bei der Zehn- und nicht bei der 15-Minuten-Marke.
Wenn Sie zum Beispiel jede Minute auslösen wollen, müssen Sie Code für 60 Sekunden, 120 Sekunden, 180 Sekunden usw. hinzufügen.
Die 15-Minuten-Marke wird alle 15 Minuten ausgelöst, da sie den Zähler auf Null setzt.
Welchen Mechanismus wollen Sie verwenden, welchen Code wollen Sie bei den Zeitintervallen auslösen?
Was wollen Sie erreichen?void OnTimer()
{
static int counter=0;
static int next1m=60;
static int next5m=300;
static int next15m=900;
//--- increment counter
counter++;
//--- comment status on the chart
Comment(IntegerToString(counter));
//--- timer
if(counter==next1m)
{
Alert(" 1 Minute ");
// Do Something...
next1m+=60;
}
if(counter==next5m)
{
Alert(" 5 Minutes ");
// Do Something...
next5m+=300;
}
if(counter==next15m)
{
Alert(" 15 Minutes ");
// Do Something...
counter=0;// Reset counter on highest value.
next1m=60;
next5m=300;
}
}
Sehr gut, Marco.
Sie könnten so etwas tun, um in jedem Zeitintervall auszulösen
Marco vd Heijden:
Welchen Mechanismus wollen Sie verwenden, welchen Code wollen Sie bei den Zeitintervallen auslösen?
Was versuchen Sie zu erreichen?Wieder einmal ein hervorragender Kommentar, vielen Dank, Mann.
//---
...mein Indikator funktioniert so, wie ich es wollte (/ will ).
Der Indikator funktioniert wie folgt:
Ich muss mein Anliegen mit einem Beispiel beschreiben:
Ich öffne den EURUSD-Chart und habe meinen Indikator an den Chart angehängt, und er funktioniert perfekt, so wie ich es will, er bewegt sich / zeigt die VLINE's nach vorne (sogar nach hinten), ich kann den ZEITRAUM PERIOD ändern und die Intervalle passen sich automatisch an diese PERIODs an (so wie ich es will).
Wo liegt das Problem mit meinem Indikator? // vielleicht ist es kein Problem, aber es dauert ein wenig mehr "irrelevant" Zeiten zu aktualisieren.
Wenn ich 'EventSetMillisecondTimer( 10 );' auswähle und dann TIMEFRAME PERIODs auf eine beliebige TIMEFRAME PERIODs ändere, sehe ich fast nicht, dass neue VLINEs in den Chart geladen werden (was ich will).
Vielen Dank für Ihre Kommentare - Marco & whroeder1
(ANMERKUNG: Ich benutze nicht 'switch operator' - weil Ihr #18 Kommentar besser ist als alles, was ich upgrade und daran arbeite - und es ist sehr nützlich für mich)
(Englisch ist nicht meine Muttersprache)
Keith Watford:
Gut gemacht Marco.
Du könntest so etwas machen, um in jedem Zeitintervall auszulösen
Auch gut, Keith:)
Wirklich, dass mir eine Menge helfen, ich werde es in meinem nächsten Indikator verwenden.
Alles Gute.
Ich weiß nicht, wie es anderen geht, aber ich finde Ihre Mischung aus Schriftart, Farben, Fett- und Kursivdruck usw. ablenkend und störend. Tatsächlich konnte ich mir nicht die Mühe machen, diesen Beitrag zu lesen.
Wieder einmal ein hervorragender Kommentar, vielen Dank, Mann.
//---
...mein Indikator funktioniert so, wie ich es wollte (/ will ).
Der Indikator funktioniert wie folgt:
Ich muss mein Anliegen mit einem Beispiel beschreiben:
Ich öffne den EURUSD-Chart und habe meinen Indikator an den Chart angehängt, und er funktioniert perfekt, so wie ich es will, er bewegt sich / zeigt die VLINE's nach vorne (sogar nach hinten), ich kann den ZEITRAUM PERIOD ändern und die Intervalle passen sich automatisch an diese PERIODs an (so wie ich es will).
Wo liegt das Problem mit meinem Indikator? // vielleicht ist es kein Problem, aber es dauert ein wenig mehr "irrelevant" Zeiten zu aktualisieren.
Wenn ich 'EventSetMillisecondTimer( 10 );' wähle und dann TIMEFRAME PERIODs auf eine beliebige TIMEFRAME PERIODs ändere, sehe ich fast keine neuen VLINEs auf dem Chart (was ich will).
Vielen Dank für Ihre Kommentare - Marco & whroeder1
(ANMERKUNG: Ich benutze nicht 'switch operator' - weil Ihr #18 Kommentar besser ist als alles, was ich upgrade und daran arbeite - und es ist sehr nützlich für mich)
(Englisch ist nicht meine Muttersprache)
Nun, wenn es um den Wechsel der Zeitrahmen geht, dann ist der Timer keine gute Option, weil der Timer beim Wechsel des Rahmens zerstört wird.
Sie können Ihre Zeilen in der OnInit() Funktion erstellen und sie entweder in den OnTick() oder OnTimer() Funktionen aktualisieren.
Hier ist ein Beispiel:
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
//--- playsound
PlaySound("alert2.wav");
//--- create moving timeline
ObjectCreate(0,"Time",OBJ_VLINE,0,TimeCurrent(),0);
//--- detect period
switch(Period())
{
case PERIOD_M1:
MessageBox("Switched to 1 Minute Frame");
//Do Something...
ObjectCreate(0,"1-Minute",OBJ_VLINE,0,Time[0],0);
break;
case PERIOD_M5:
MessageBox("Switched to 5 Minutes Frame");
//Do Something...
ObjectCreate(0,"5-Minutes",OBJ_VLINE,0,Time[0],0);
break;
case PERIOD_M15:
MessageBox("Switched to 15 Minutes Frame");
//Do Something...
ObjectCreate(0,"15-Minutes",OBJ_VLINE,0,Time[0],0);
break;
case PERIOD_M30:
MessageBox("Switched to 30 Minutes Frame");
//Do Something...
ObjectCreate(0,"30-Minutes",OBJ_VLINE,0,Time[0],0);
break;
case PERIOD_H1:
MessageBox("Switched to 1 Hour Frame");
//Do Something...
ObjectCreate(0,"1-Hour",OBJ_VLINE,0,Time[0],0);
break;
case PERIOD_H4:
MessageBox("Switched to 4 Hour Frame");
//Do Something...
ObjectCreate(0,"4-Hour",OBJ_VLINE,0,Time[0],0);
break;
case PERIOD_D1:
MessageBox("Switched to Daily Frame");
//Do Something...
ObjectCreate(0,"Daily",OBJ_VLINE,0,Time[0],0);
break;
case PERIOD_W1:
MessageBox("Switched to Weekly Frame");
//Do Something...
ObjectCreate(0,"Weekly",OBJ_VLINE,0,Time[0],0);
break;
case PERIOD_MN1:
MessageBox("Switched to Monthly Frame");
//Do Something...
ObjectCreate(0,"Monthly",OBJ_VLINE,0,Time[0],0);
break;
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
//--- delete objects
ObjectsDeleteAll(0,0,-1);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
ObjectMove(0,"Time",0,TimeCurrent(),0);// Update timeline
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
ObjectMove(0,"Time",0,TimeCurrent(),0);// Update timeline
}
//+------------------------------------------------------------------+
Wenn Sie außerdem die Zeilen aktualisieren möchten, sobald eine neue Kerze auftaucht, können Sie das Beispiel auf der vorherigen Seite mit dem letzten Beispiel kombinieren, um dies zu erreichen:
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
//--- playsound
PlaySound("alert2.wav");
//--- load open times
M1=iTime(Symbol(),PERIOD_M1,0);
M5=iTime(Symbol(),PERIOD_M5,0);
M15=iTime(Symbol(),PERIOD_M15,0);
M30=iTime(Symbol(),PERIOD_M30,0);
H1=iTime(Symbol(),PERIOD_H1,0);
H4=iTime(Symbol(),PERIOD_H4,0);
D1=iTime(Symbol(),PERIOD_D1,0);
W1=iTime(Symbol(),PERIOD_W1,0);
MN1=iTime(Symbol(),PERIOD_MN1,0);
//--- create moving timeline
ObjectCreate(0,"Time",OBJ_VLINE,0,TimeCurrent(),0);
//--- detect period
switch(Period())
{
case PERIOD_M1:
MessageBox("Switched to 1 Minute Frame");
//Do Something...
ObjectCreate(0,"1-Minute",OBJ_VLINE,0,Time[0],0);
M1=Time[0];// store current time
break;
case PERIOD_M5:
MessageBox("Switched to 5 Minutes Frame");
//Do Something...
ObjectCreate(0,"5-Minutes",OBJ_VLINE,0,Time[0],0);
M5=Time[0];// store current time
break;
case PERIOD_M15:
MessageBox("Switched to 15 Minutes Frame");
//Do Something...
ObjectCreate(0,"15-Minutes",OBJ_VLINE,0,Time[0],0);
M15=Time[0];// store current time
break;
case PERIOD_M30:
MessageBox("Switched to 30 Minutes Frame");
//Do Something...
ObjectCreate(0,"30-Minutes",OBJ_VLINE,0,Time[0],0);
M30=Time[0];// store current time
break;
case PERIOD_H1:
MessageBox("Switched to 1 Hour Frame");
//Do Something...
ObjectCreate(0,"1-Hour",OBJ_VLINE,0,Time[0],0);
H1=Time[0];// store current time
break;
case PERIOD_H4:
MessageBox("Switched to 4 Hour Frame");
//Do Something...
ObjectCreate(0,"4-Hour",OBJ_VLINE,0,Time[0],0);
H4=Time[0];// store current time
break;
case PERIOD_D1:
MessageBox("Switched to Daily Frame");
//Do Something...
ObjectCreate(0,"Daily",OBJ_VLINE,0,Time[0],0);
D1=Time[0];// store current time
break;
case PERIOD_W1:
MessageBox("Switched to Weekly Frame");
//Do Something...
ObjectCreate(0,"Weekly",OBJ_VLINE,0,Time[0],0);
W1=Time[0];// store current time
break;
case PERIOD_MN1:
MessageBox("Switched to Monthly Frame");
//Do Something...
ObjectCreate(0,"Monthly",OBJ_VLINE,0,Time[0],0);
MN1=Time[0];// store current time
break;
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
//--- delete objects
ObjectsDeleteAll(0,0,-1);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- update timeline
ObjectMove(0,"Time",0,TimeCurrent(),0);
//--- check for new candles
if(M1!=iTime(Symbol(),PERIOD_M1,0))
{
Alert("New candle on M1");
ObjectMove(0,"1-Minute",0,iTime(Symbol(),PERIOD_M1,0),0); // Move line
M1=iTime(Symbol(),PERIOD_M1,0);// Overwrite old with new value
}
if(M5!=iTime(Symbol(),PERIOD_M5,0))
{
Alert("New candle on M5");
M1=iTime(Symbol(),PERIOD_M5,0);// Overwrite old with new value
}
if(M15!=iTime(Symbol(),PERIOD_M15,0))
{
Alert("New candle on M15");
M15=iTime(Symbol(),PERIOD_M15,0);// Overwrite old with new value
}
if(M30!=iTime(Symbol(),PERIOD_M30,0))
{
Alert("New candle on M30");
M30=iTime(Symbol(),PERIOD_M30,0);// Overwrite old with new value
}
// and so on to MN1...
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
ObjectMove(0,"Time",0,TimeCurrent(),0);// Update timeline
}
//+------------------------------------------------------------------+
Ich weiß nicht, wie es anderen geht, aber ich finde Ihre Mischung aus Schriftart, Farben, Fett- und Kursivdruck usw. ablenkend und störend. Tatsächlich konnte ich mir nicht die Mühe machen, diesen Beitrag zu lesen.
Max Enrik:
Ich weiß nicht, wie es anderen geht, aber ich finde Ihre Mischung aus Schriftart, Farben, Fett- und Kursivdruck usw. ablenkend und störend. Tatsächlich konnte ich mir nicht die Mühe machen, diesen Beitrag zu lesen.