Indikator Verschiedene Fragen - Seite 4

 

Sie können den Switch-Operator verwenden.

      switch(TimeHour())
        {
         case 0:
          // Do Something...
            break;

         case 1:
          // Do Something...  
            break;

         case 2:

            break;

         case 3:

            break;

         case 4:

            break;

         case 5:

            break;

         case 6:

            break;
         // etc...
        }

Oder verwenden Sie eine einfache doppelte if-Anweisung:

if(TimeHour()>0 && TimeHour()< 22)
{
  // Do Something...
}

Wenn die Uhrzeit über > 0 liegt, aber auch && unter < 22 usw.

Oder Sie können verwenden:

if(TimeHour()>=0 && TimeHour()<= 22)
{
  // Do Something...
}

Wenn die Stunde über > oder == gleich 0 ist, aber auch && unter < oder == gleich 22 usw.

Es ist etwas anders, weil es die Stunde einschließt, wenn sie gleich ist, während das vorherige Beispiel >0 die 0 selbst ausschließt, weil sie gleich ist, also nicht oben.

 

#Month Lines - Für mich geschlossen.

Ich testete mit 'Strategy Tester' & Echtzeit so weit funktioniert perfekt.

Ich lernte eine Menge Dinge aus Ihren Kommentaren, und ich habe meine diesen Indikator so gut, großen Dank @Marcovd Heijden

Besonderen Dank an Herrn Marco & Herrn William.

 

Der unten stehende Code funktioniert bei mir gut, aber manchmal dauert er irrelevant lange (1250).

EventSetMillisecondTimer( 1250 );

// which is good?

EventSetTimer( 1 );

Kann ichzusätzlich die Funktion'Switch' dafür verwenden?

//--- 2. Mal bearbeitet

Ich möchte nicht die Funktion start()verwenden. Eigentlich muss ich wie unten eingestellt werden.

EventSetMillisecondTimer( 10   ); // 1st will read in 10
EventSetMillisecondTimer( 250  ); // 2nd will read in 250
EventSetMillisecondTimer( 1250 ); // 3rd will read in 1250

Aber ich brauche Hilfe, bitte.

//--- 3. Mal bearbeitet

switch ( EventSetMillisecondTimer( 10 ) )
{
    case    1   :   EventSetMillisecondTimer( 100  );
    case    2   :   EventSetMillisecondTimer( 250  );
    case    3   :   EventSetMillisecondTimer( 1250 );
    default     :   EventSetMillisecondTimer( 10   ); break;
}   //---switch Close

Es funktioniert nicht, wie ich will.

Wenn jemand mein Anliegen versteht, bitte geben Sie mir Rat oder Hilfe.

Vielen Dank im Voraus.

 
Max Enrik: Ich möchte die Funktion start() nicht verwenden.
  1. Warum nicht? Solange Sie keinen neuen Tick bekommen, hat sich (auf dem Markt) nichts geändert. Timer hat nur begrenzten Nutzen.
  2. Starten Sie mit den neuen Ereignisbehandlungsfunktionen - Funktionen - Grundlagen der Sprache - MQL4-Referenz. start as been depreciated Since February 3,2014 (Build 600)
 
Max Enrik:

Ich möchte nicht die Funktion start()verwenden. Eigentlich muss ich wie unten eingestellt werden.

EventSetMillisecondTimer( 10   ); // 1st will read in 10
EventSetMillisecondTimer( 250  ); // 2nd will read in 250
EventSetMillisecondTimer( 1250 ); // 3rd will read in 1250

Aber ich brauche Hilfe, bitte.

Es funktioniert nicht, wie ich will.

Wenn jemand mein Anliegen versteht, bitte geben Sie mir Rat oder Hilfe.

Vielen Dank im Voraus.


Nein, es funktioniert nicht so, dass Sie einen Timer und nur einen Timer verwenden.

aber Sie können das Zeitintervall mit einem einfachen Zähler aufteilen oder splitten.

int clock;
OnTimer()
{
  clock++;
  
  switch(clock)
   {
    case 500:
    //Do something...
    break;

    case 1000:
    //Do something...
    clock=0; // reset counter if need be.
    break;

    // Etc...
   }
}
 
whroeder1:
  1. Warum nicht? Solange Sie keinen neuen Tick bekommen, hat sich (auf dem Markt) nichts geändert. Timer hat nur begrenzten Nutzen.
  2. Verwenden Sie die neuen Ereignisbehandlungsfunktionen - Funktionen - Grundlagen der Sprache - MQL4 Referenz. start as been depreciated Since February 3,2014 (Build 600)
Vielen Dank für Ihren Kommentar.

Sie erwähnten zweimal 'Event Handling Functions', und ich las ein paar Mal (vielleicht habe ich nicht klar verstehen, alle von dieser Seite - auch ich benutze 'OnTimer' Funktion ), aber ich sorge mich um diese Seite, die mich einen anderen Weg ziehen wird - aber mein dieser Indikator fast fertig.

Aber ich sehe nur 'EventSetMillisecondTimer( 1250 );' manchmal dauert 'irrelevant' lange Zeit.


Beste.
 
Marco vd Heijden:

aber Sie können das Zeitintervall mit Hilfe eines einfachen Zählers aufteilen oder splitten.

Ich habe es mit dem folgenden Code versucht.

Ist dieser Code richtig?

void OnTimer()
{
    //---
    _clock++;
    //---
    switch ( _clock )
    {
        case    500 :
            if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close
        break;
        
        case    1000:
            if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close

        _clock = 0;
        break;
    }   //---switch Close
}

Aber er funktioniert bei mir nicht.

Danke!

 
Max Enrik: Ich habe versucht, wie unten Code.
void OnTimer()
{
    //---
    _clock++;
    //---
    switch ( _clock )
    {
        case    500 :
            if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close
        break;
        
        case    1000:
            if ( // will be same thing in here? ) )
            {
                ...
                _CreateLines_M5();
            }   //---if Close

        _clock = 0;
        break;
    }   //---switch Close
}

Aber bei mir funktioniert es nicht.

  1. Sie sind nicht versuchen, es in der Tester sind Sie? In Backtest OnTimer() führt nicht (M. Ali) - MQL4 forum Chart Event For MT4 Backtester (Migel) - MQL4 forum
  2. Ihr Code vereinfacht
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

 
whroeder1:
  1. Ihr Code vereinfacht
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

Vielen Dank!

Ich habe es versucht, es kontinuierlich zu aktualisieren, während in einer Minute auch ich PERIOD_M5 wählen.

Auch möchte ich wissen, wenn ich PERIOD_M1 & PERIOD_M5 verwenden müssen, kann ich wie unten?

if(++_clock % 500 == 0)_CreateLines_M1();
if(++_clock % 500 == 0)_CreateLines_M5();

Auch, ist unten Methode richtig, bitte?

if ( ++_clock % 500 == 0 || _dt_Prd_M5 != iTime( Symbol(), _prd_M5, 0 ) )
{
    _dt_Prd_M5 = iTime( Symbol(), _prd_M5, 0 );
    _CreateLines_M5();
}

Ich wünsche Ihnenalles Gute.

 
Max Enrik:

Vielen Dank!

Ich habe es versucht, es kontinuierlich zu aktualisieren, während in einer Minute auch ich PERIOD_M5 wählen.

Außerdem möchte ich wissen, ob ich PERIOD_M1 & PERIOD_M5 verwenden muss, kann ich wie unten?

if(++_clock % 500 == 0)_CreateLines_M1();
if(++_clock % 500 == 0)_CreateLines_M5();

Auch, ist unten Methode richtig, bitte?

if ( ++_clock % 500 == 0 || _dt_Prd_M5 != iTime( Symbol(), _prd_M5, 0 ) )
{
    _dt_Prd_M5 = iTime( Symbol(), _prd_M5, 0 );
    _CreateLines_M5();
}

Alles Gute.

Bitte beschreiben Sie, was Sie zu tun versuchen.