Indicatore Domande varie - pagina 4

 

Potete usare l'operatore switch.

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

O usare un semplice doppio if statement:

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

Se l'ora è superiore a > 0 ma anche && inferiore a < 22 ecc.

Oppure potete usare:

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

Se l'ora è sopra > o == uguale a 0 ma anche && sotto < o == uguale a 22 ecc.

È leggermente diverso perché include l'ora quando è uguale, dove l'esempio precedente >0 esclude lo stesso 0 perché è uguale quindi non sopra.

 

#Linee del mese - chiuse per me.

Ho testato con 'Strategy Tester' e in tempo reale finora funziona perfettamente.

Ho imparato un sacco di cose dai vostri commenti, e ho fatto il mio questo indicatore così buono, grande grazie @Marcovd Heijden

Un ringraziamento speciale al signor Marco e al signor William.

 

Il codice qui sotto funziona bene per me, ma a volte irrilevante richiede molto tempo (1250).

EventSetMillisecondTimer( 1250 );

// which is good?

EventSetTimer( 1 );

Inoltre, posso usare la funzione'Switch' per questo?

//--- 2a volta modificato

Non voglio usare la funzione start(). In realtà ho bisogno di impostare come sotto.

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

Ma ho bisogno di aiuto, per favore.

//--- 3a volta modificato

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

Non funziona, come voglio.

Se qualcuno capisce la mia preoccupazione, per favore datemi un consiglio o un aiuto.

Grazie in anticipo.

 
Max Enrik: Non voglio usare la funzione start().
  1. Perché no? Finché non si ottiene un nuovo tick, nulla (nel mercato) è cambiato. Il timer ha un uso limitato.
  2. Inizia ad usare le nuove funzioni di gestione degli eventi - Funzioni - Fondamenti del linguaggio - Riferimento MQL4. start è stato deprezzato dal 3 febbraio2014 (Build 600)
 
Max Enrik:

Non voglio usare la funzione start(). In realtà ho bisogno di impostare come sotto.

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

Ma ho bisogno di aiuto, per favore.

Non funziona, come voglio.

Se qualcuno capisce la mia preoccupazione, per favore mi dia un consiglio o un aiuto.

Grazie in anticipo.


No, non funziona così: usa un solo timer e un solo timer.

ma puoi dividere o dividere l'intervallo di tempo usando un semplice contatore.

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. Perché no? Finché non si ottiene un nuovo tick, nulla (nel mercato) è cambiato. Il timer ha un uso limitato.
  2. Inizia ad usare le nuove funzioni di gestione degli eventi - Funzioni - Fondamenti del linguaggio - Riferimento MQL4. start è stato deprezzato dal 3 febbraio2014 (Build 600)
Grazie per il tuo commento.

Hai menzionato due volte 'Event Handling Functions', e ho letto alcune volte (forse non ho capito chiaramente tutta quella pagina - anche io uso la funzione 'OnTimer' ) ma mi preoccupo di quella pagina, che mi tirerà un altro modo - ma il mio indicatore quasi finito.

Ma vedo che solo 'EventSetMillisecondTimer( 1250 );' a volte richiede un tempo lungo 'irrilevante'.


Migliore.
 
Marco vd Heijden:

ma è possibile dividere o dividere l'intervallo di tempo usando un semplice contatore.

Ho provato come il seguente codice.

Questo codice è giusto?

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
}

Ma non funziona per me.

Grazie.

 
Max Enrik: Ho provato come sotto il codice.
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
}

Ma non funziona per me.

  1. Non lo stai provando nel tester, vero? Nel backtest OnTimer() non funziona (M. Ali) - MQL4 forum Evento grafico per MT4 Backtester (Migel) - MQL4 forum
  2. Il tuo codice semplificato
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

 
whroeder1:
  1. Il tuo codice semplificato
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

Grande grazie!

Ho provato, si aggiorna continuamente mentre in un minuto anche io scelgo PERIOD_M5.

Inoltre vorrei sapere se ho bisogno di usare PERIOD_M1 & PERIOD_M5 posso usare come sotto?

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

Inoltre, il metodo qui sotto è giusto, per favore?

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

Tutto il meglio.

 
Max Enrik:

Grande grazie!

Ho provato, si aggiorna continuamente mentre in un minuto anche io scelgo PERIOD_M5.

Inoltre vorrei sapere se ho bisogno di usare PERIOD_M1 & PERIOD_M5 posso usare come sotto?

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

Inoltre, il metodo qui sotto è giusto, per favore?

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

Tutto il meglio.

Si prega di descrivere ciò che si sta cercando di fare.
Motivazione: