Indikator Verschiedene Fragen - Seite 5

 
Marco vd Heijden:
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( 10   ); // 1st will read in 10   | if won't read try next
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.

int counter;
//+------------------------------------------------------------------+
//| 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?
Vielen Dank für den tollen Kommentar, der viel klarer über den "switch"-Operator und die Zeitintervalle erklärt.

Wieder einmal ein hervorragender Kommentar, vielen Dank, Mann.

//---

Nun, ich muss Ihnen Informationen über meine diesen Indikator geben.
Denn vielleicht habe ich nicht über mein Anliegen zu beschreiben, (aber Ihr letzter Kommentar mehr und mehr half mir)...

...mein Indikator funktioniert so, wie ich es wollte (/ will ).

Der Indikator funktioniert wie folgt:

automatisch bewegen / zeigt vorwärts 'VLINE' (die ich will)
zeigt mir vergangene Woche 'VLINE's an(welche ich will)
kein Crossover Period Lines (welche ich will)
kontinuierliche Aktualisierung (mit Intervallen) nur einmal in jeder nächsten PERIOD_**' s (welche ich will)
und mehr und mehr...
noch einmal BESONDEREN DANK an Marco & whroeder1 (haben mir nicht nur geholfen, sondern auch eine Menge beigebracht)

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).

Wenn ich zur Zeit EURUSD in "andere Symbole (wie GBPUSD usw.)" ändere, lädt mein Indikator nicht alle VLINEs. Das ist einfach ein Problem (/ für mich).

Ansonsten: Wenn ich 'EventSetMillisecondTimer( 1250 );' wähle, sehe ich kein Problem beim Laden. Es funktioniert perfekt.
Aber hier ist einProblem (/ für mich) es dauert ein bisschen mehr "irrelevant" Zeiten - wenn ich TIMEFRAME PERIODs ändern.

Also, wenn Sie mich verstehen , so klar, bitte nehmen Sie sich Zeit, um zu kommentieren (und mir helfen, wie kann ich dieses Problem lösen) oder Sie verstehen mich nicht so klar, verschwenden Sie nicht Ihre Zeit, bitte.

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.

Max Enrik:
Vielen Dank für den tollen Kommentar, in dem viel deutlicher erklärt wird, was es mit dem "Switch"-Operator und den Zeitintervallen auf sich hat.

Wieder einmal ein hervorragender Kommentar, vielen Dank, Mann.

//---

Nun, ich muss Ihnen Informationen über meine diesen Indikator geben.
Denn vielleicht habe ich nicht über mein Anliegen zu beschreiben, (aber Ihr letzter Kommentar mehr und mehr half mir)...

...mein Indikator funktioniert so, wie ich es wollte (/ will ).

Der Indikator funktioniert wie folgt:

automatisch bewegen / zeigt vorwärts 'VLINE' (die ich will)
zeigt mir vergangene Woche 'VLINE's an(welche ich will)
kein Crossover Period Lines (welche ich will)
kontinuierliche Aktualisierung (mit Intervallen) nur einmal in jeder nächsten PERIOD_**' s (welche ich will)
und mehr und mehr...
noch einmal BESONDEREN DANK an Marco & whroeder1 (haben mir nicht nur geholfen, sondern auch viel beigebracht)

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).

Wenn ich derzeit EURUSD in "andere Symbole (wie GBPUSD usw.)" ändere, wird mein Indikator nicht mit VLINEs geladen. Das ist einfach ein Problem (/ für mich).

Ansonsten: Wenn ich 'EventSetMillisecondTimer( 1250 );' wähle, sehe ich kein Problem beim Laden. Es funktioniert perfekt.
Aber hier ist einProblem (/ für mich) es dauert ein bisschen mehr 'irrelevant' Zeiten - wenn ich TIMEFRAME PERIODs ändern.

Also, wenn Sie mich verstehen , so klar, bitte nehmen Sie sich Zeit, um zu kommentieren (und mir helfen, wie kann ich dieses Problem lösen) oder Sie verstehen mich nicht so klar, verschwenden Sie nicht Ihre Zeit, bitte.

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
  }
//+------------------------------------------------------------------+
Beachten Sie auch die ObjectsDeleteAll() in der OnDeint() Funktion, die sicherstellt, dass alles entfernt wird, bevor es auf dem neuen Frame neu erstellt wird.
 

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:

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;
//+------------------------------------------------------------------+
//| 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
  }
//+------------------------------------------------------------------+
Wenn es noch weitere Probleme gibt, zeigen Sie bitte etwas Code.
 
Keith Watford:

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.

Mir wurde gesagt, verschwenden Sie nicht Ihre Zeit.
 

Max Enrik:

Keith Watford:

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.


Ich sagte, Sie sollen Ihre Zeit nicht verschwenden.
Warum haben Sie meinen Beitrag einfach kommentarlos zitiert?