Indicateur Questions diverses - page 4

 

Vous pouvez utiliser l'opérateur 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...
        }

Ou utiliser une simple double instruction if :

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

Si l'heure est supérieure à > 0 mais aussi && inférieure à < 22 etc.

Ou vous pouvez utiliser :

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

Si l'heure est supérieure à > ou == égale à 0 mais aussi && inférieure à < ou == égale à 22, etc.

C'est légèrement différent parce que cela inclut l'heure quand elle est égale, alors que l'exemple précédent >0 exclut 0 lui-même parce qu'il est égal donc pas supérieur.

 

#Lignes du mois - Fermées pour moi.

J'ai testé avec 'Strategy Tester' et en temps réel jusqu'à présent, cela fonctionne parfaitement.

J'ai appris beaucoup de choses de vos commentaires, et j'ai fait mon indicateur si bon, grand merci @Marcovd Heijden

Merci à M. Marco et M. William.

 

Le code ci-dessous fonctionne bien pour moi, mais parfois hors de propos, il prend beaucoup de temps (1250).

EventSetMillisecondTimer( 1250 );

// which is good?

EventSetTimer( 1 );

En outre, puis-je utiliser la fonction'Switch' pour cela ?

//--- 2ème fois modifié

Je ne veux pas utiliser la fonction start(). En fait, j'ai besoin de définir comme ci-dessous.

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

Mais j'ai besoin d'aide, s'il vous plaît.

//--- 3ème édition

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

Il ne fonctionne pas, comme je veux.

Si quelqu'un comprend mon problème, s'il vous plaît donnez-moi des conseils ou de l'aide.

Merci d'avance.

 
Max Enrik: Je ne veux pas utiliser la fonction start().
  1. Pourquoi pas ? Jusqu'à ce que vous obteniez un nouveau tick, rien (sur le marché) n'a changé. Le timer a une utilité limitée.
  2. Commencez à utiliser les nouvelles fonctions de gestion des événements - Fonctions - Notions de base du langage - Référence MQL4. start a été déprécié depuis le 3 février2014 (Build 600).
 
Max Enrik:

Je ne veux pas utiliser la fonction start(). En fait, j'ai besoin de configurer comme ci-dessous.

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

Mais j'ai besoin d'aide, s'il vous plaît.

Il ne fonctionne pas, comme je veux.

Si quelqu'un comprend ma préoccupation, s'il vous plaît donnez-moi des conseils ou de l'aide.

Merci d'avance.


Non, cela ne fonctionne pas comme ça, vous utilisez une minuterie et une seule minuterie.

Mais vous pouvez diviser ou couper l'intervalle de temps en utilisant un simple compteur.

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. Pourquoi pas ? Jusqu'à ce que vous obteniez un nouveau tick, rien (sur le marché) n'a changé. Le timer a une utilité limitée.
  2. Commencez à utiliser les nouvelles fonctions de gestion des événements - Fonctions - Notions de base du langage - Référence MQL4. start a été déprécié depuis le 3 février2014 (Build 600).
Merci pour votre commentaire.

Vous avez mentionné deux fois 'Event Handling Functions', et j'ai lu quelques fois (peut-être que je n'ai pas bien compris toute cette page - aussi j'utilise la fonction 'OnTimer' ) mais je m'inquiète de cette page, qui va me tirer d'une autre façon - mais mon indicateur est presque terminé.

Mais je vois que le simple 'EventSetMillisecondTimer( 1250 );' prend parfois un temps 'non pertinent'.


Meilleur.
 
Marco vd Heijden:

mais vous pouvez diviser ou couper l'intervalle de temps en utilisant un simple compteur.

J'ai essayé comme le code ci-dessous.

Ce code est-il correct ?

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
}

Mais il ne fonctionne pas pour moi.

Merci.

 
Max Enrik: J'ai essayé comme le code ci-dessous.
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
}

Mais cela ne fonctionne pas pour moi.

  1. Vous ne l'essayez pas dans le testeur, n'est-ce pas ? Dans le backtest OnTimer() ne fonctionne pas (M. Ali) - MQL4 forum Chart Event For MT4 Backtester (Migel) - MQL4 forum
  2. Votre code simplifié
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

 
whroeder1:
  1. Votre code simplifié
    void OnTimer()
    {
        if(++_clock % 500 == 0)_CreateLines_M5();
    }

Merci beaucoup !

J'ai essayé, il se rafraîchit continuellement en une minute même si je choisis PERIOD_M5.

Je voudrais également savoir si je dois utiliser PERIOD_M1 et PERIOD_M5 , puis-je utiliser la méthode ci-dessous ?

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

Aussi, la méthode ci-dessous est-elle correcte, s'il vous plaît ?

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

Tous mes vœux.

 
Max Enrik:

Un grand merci !

Je l'ai essayé, il se rafraîchit continuellement en une minute même si je choisis PERIOD_M5.

Je voudrais également savoir si je dois utiliser PERIOD_M1 et PERIOD_M5 ou si je peux utiliser la méthode ci-dessous ?

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

Aussi, la méthode ci-dessous est-elle correcte, s'il vous plaît ?

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

Tous mes vœ ux.

Veuillez décrire ce que vous essayez de faire.