Indicateur Questions diverses - page 2

 

#Ordre des objets

J'ai créé 3 objets et ces objets se croisent les uns les autres.

#1 Ligne Horizontale, #2 Ligne Verticale, #3 Ligne de Tendance

J'ai besoin de définir leurs positions z.

Alors comment puis-je leur donner une valeur de position z?

Merci.

 
Marco vd Heijden:

Vous pouvez dessiner toutes les lignes dans OnInit() et ensuite en dessiner de nouvelles dès que le temps d'ouverture de la dernière barre change, vous saurez qu'il y a eu une nouvelle barre.

Mais je ne suis pas sûr de ce que vous voulez faire exactement.

OK ! Je vais essayer quelque chose. Puis je reviendrai ici.

Merci.

 

@Marco vd Heijden

Avant de commencer mes recherches sur ce sujet. J'ai vraiment besoin de demander, est-ce que la fonction start() ralentit le graphique (/ Plateformes MT4) ?

p.s J'ai mis tous les codes dans la fonction spéciale start() , ce code fonctionne pour les lignes de période- H1, H4, D1, W1, MN1.

Je vous souhaite un bon week-end et vous remercie d'avance.

 
Max Enrik: J'ai vraiment besoin de demander, est-ce que la fonction start() ralentit le graphique (/ Plateformes MT4) ?
Pendant que tous les indicateurs sont mis à jour, le terminal ne fait rien d'autre. C'est pourquoi les indicateurs ne peuvent pas dormir, ne peuvent pas trader, ou faire des requêtes web.
 
whroeder1:
Pendant que tous les indicateurs sont mis à jour, le terminal ne fait rien d'autre. C'est pourquoi les indicateurs ne peuvent pas dormir, ne peuvent pas trader, ou faire des requêtes web.

Merci pour votre commentaire. (après votre commentaire, j'ai décidé de changer quelque chose dans tous mes indicateurs - parce que presque j'ai fait tous mes indicateurs dans lafonction start() ).

J'ai mis le code ci-dessous dans la fonction start(), alors pouvez-vous m'aider à savoir quelle est la meilleure façon pour mon indicateur ?

En fait, je n'ai aucune idée de la façon dont je peux modifier le code ci-dessous pour arrêter la mise à jour continue (sans tous les codes start() mis dans la fonction init()).

//---MN1
int _cnt_MN1 = 11; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ )
{
    if ( _Period < PERIOD_MN1 )
    {
        //---time convert
        datetime _tltpMN1      = TimeToString( iTime( Symbol(), PERIOD_MN1, i_MN ), TIME_DATE );
        datetime _time         = iTime( Symbol(), PERIOD_MN1, i_MN );// + PeriodSeconds( PERIOD_MN1  );
        //---name
        string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );

        ObjectCreate     ( 0, _vlineName_MN, OBJ_VLINE          , 0, _time, 0     );
        ObjectSetString  ( 0, _vlineName_MN, OBJPROP_TOOLTIP    , _tltpMN1        );
        ObjectSetInteger ( 0, _vlineName_MN, OBJPROP_COLOR      , C'180,160,080'  );
        ObjectSet        (    _vlineName_MN, OBJPROP_BACK       , true            );
        ObjectSet        (    _vlineName_MN, OBJPROP_HIDDEN     , true            );
        ObjectSet        (    _vlineName_MN, OBJPROP_SELECTABLE , false           );
        ObjectSet        (    _vlineName_MN, OBJPROP_STYLE      , STYLE_SOLID     );
    }   //---if Close
}   //---for Close

Merci !

 

J'ai vraiment besoin d'aide, s'il vous plaît, que quelqu'un réponde à ma question.

Merci.

 
Max Enrik: En fait, je n'ai aucune idée de la façon dont je peux modifier le code ci-dessous pour arrêter la mise à jour continue.
  1. Adapter un nouveau code barre pour un nouveau mois.
    Les barres ne sont pas fiables (un rafraîchissement/une reconnexion peut changer le nombre de barres sur le graphique) Le volume n'est pas fiable (ticks manqués) Utilisez toujours le temps. Nouvelle bougie - MQL4 forum
    Je ne suis pas d'accord pour faire une nouvelle fonction de barre, car elle ne peut être appelée qu'une fois par tick. Une variable peut être testée plusieurs fois.
    void OnTick(){
       static datetime BOMcur=0;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool     isNewMonth = BOMcur != BOMpre;
       if(isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
    N' utilisez pas de chiffres de décalage dans les noms d'objets. Une fois qu'une nouvelle barre commence, tous vos objets sont mal nommés et vous ne pouvez pas créer un nouveau "<prefix>0". Vous aviez raison dans votre message original (en utilisant le temps)
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    Ou convertir le temps en un int à une chaîne.
 

Veuillez le mettre dans un expert au lieu d'un indicateur, cela permet une utilisation plus facile à l'avenir lorsque vous voulez ajouter votre stratégie de trading.

Pour le problème des barres, stockez l'heure d'ouverture de la barre dans une variable datetime et comparez simplement l'heure enregistrée avec l'heure réelle, puis chaque fois qu'une nouvelle barre apparaît, elle se déclenchera.

Voici un exemple :

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(250);

//--- create some things

   CreateLines(); // Function that creates time lines

//--- 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);


//--- set timelines
   ObjectMove(0,"Time-M1",0,M1,0);
   ObjectMove(0,"Time-M5",0,M5,0);
   ObjectMove(0,"Time-M15",0,M15,0);
   ObjectMove(0,"Time-M30",0,M30,0);
   ObjectMove(0,"Time-H1",0,H1,0);
   ObjectMove(0,"Time-H4",0,H4,0);
   ObjectMove(0,"Time-D1",0,D1,0);
   ObjectMove(0,"Time-W1",0,W1,0);
   ObjectMove(0,"Time-MN1",0,MN1,0);



//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(M1!=iTime(Symbol(),PERIOD_M1,0))
     {
      M1=iTime(Symbol(),PERIOD_M1,0);  // overwrite old value with new value  
      //Alert("New Bar on M1! ",TimeToString(M1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M1",0,M1,0);
     }

   if(M5!=iTime(Symbol(),PERIOD_M5,0))
     {
      M5=iTime(Symbol(),PERIOD_M5,0);
      //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M5",0,M5,0);
     }

   if(M15!=iTime(Symbol(),PERIOD_M15,0))
     {
      M15=iTime(Symbol(),PERIOD_M15,0);
      //Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M15",0,M15,0);
     }

   if(M30!=iTime(Symbol(),PERIOD_M30,0))
     {
      M30=iTime(Symbol(),PERIOD_M30,0);
      //Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M30",0,M30,0);
     }

   if(H1!=iTime(Symbol(),PERIOD_H1,0))
     {
      H1=iTime(Symbol(),PERIOD_H1,0);
      //Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-H1",0,H1,0);
     }

   if(H4!=iTime(Symbol(),PERIOD_H4,0))
     {
      H4=iTime(Symbol(),PERIOD_H4,0);
      //Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-H4",0,H4,0);
     }

   if(D1!=iTime(Symbol(),PERIOD_D1,0))
     {
      D1=iTime(Symbol(),PERIOD_D1,0);
      //Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-D1",0,D1,0);
     }

   if(W1!=iTime(Symbol(),PERIOD_W1,0))
     {
      W1=iTime(Symbol(),PERIOD_W1,0);
      //Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-W1",0,W1,0);
     }

   if(MN1!=iTime(Symbol(),PERIOD_MN1,0))
     {
      MN1=iTime(Symbol(),PERIOD_MN1,0);
      //Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-MN1",0,MN1,0);
     }

  }
//+------------------------------------------------------------------+
 
whroeder1:
  1. Adapter un nouveau code barre pour le nouveau mois.
    void OnTick(){
       static datetime BOMcur=0;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool     isNewMonth = BOMcur != BOMpre;
       if(isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
    N' utilisez pas les numéros d'équipes dans les noms d'objets. Une fois qu'une nouvelle barre commence, tous vos objets sont mal nommés et vous ne pouvez pas créer un nouveau "<prefix>0". Vous aviez raison dans votre message original (en utilisant le temps)
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    Ou convertissez le temps en un int à une chaîne.

Merci pour votre commentaire.

Depuis votre commentaire, j'ai commencé à essayer de faire des recherches sur votre commentaire. (parce que je n'ai jamais utilisé la fonction 'Void OnTick()').

Donc, j'ai lu le lien ci-dessous et j'ai compris que la fonction 'OnTick()' ne fonctionne que pour les Expert Advisors.

J'utilise déjà un conseiller expert (Trade Panel) dans mon graphique (j'ai besoin d'utiliser tous mes indicateurs et mon conseiller expert dans une seule fenêtre graphique).

Si vous voulez dire que je pourrais utiliser votre code dans 'Expert Advisor', en fait je ne le ferai pas car je vais améliorer mon 'Trade Panel', et je veux aussi écrire le code séparément. (Il est possible que dans le futur je combine ce groupe d'indicateurs(qui sont importants pour moi) - mais pas pour le moment).

Quoi qu'il en soit, M. William, votre commentaire m'a vraiment donné une idée et m'a aussi appris quelque chose.

(p.s. si je pense mal, dites-le moi s'il vous plaît).

Et encore une fois un grand merci !
Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference
 
Max Enrik(parce que je n'ai jamais utilisé la fonction 'Void OnTick()')

Avant la construction 600 (3 février2014), il n'y avait que start(). Maintenant il y a OnTick (EAs,) OnCalculate (indicateurs,) et OnStart (scripts.) J'ai oublié que vous parliez d'un indicateur.

Commencez à utiliser les nouvelles fonctions de gestion des événements - Fonctions - Notions de base du langage - Référence MQL4. Voir Comment faire vos lookbacks correctement.

Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference