Questions des débutants MQL5 MT5 MetaTrader 5 - page 465

 
kashi_ann:

Qu'est-ce que je fais de mal ?

Cet indicateur n'a pas de paramètres d'entrée ? (je veux dire la fonction iCustom(...))

(J'espère qu'il ne manque qu'une parenthèse fermante ici)

Et puisque vous ne copiez que 2 éléments, les copiez-vous dans un tampon alloué statiquement?

 
Chéri,

J'ai ouvert le code de l'indicateur pour NT7
il contient si ( v>=a && v<b)
J'ai besoin d'ajouter une autre condition : pas égal à 25

est-ce correct ?
si ( v>=a && v<b && v<25 && v>25)
 

Artyom Trishkin
:

1. Can iMaOnArray()
2. Peut-être avez-vous regardé le mauvais Momentum ? Indicateurs --> Oscillateurs --> Momentum
3. Vos MAs dans la sous-fenêtre sont étranges. Où trouvez-vous tout ça ? Indicateurs --> Tendance --> Moyenne mobile

Artyom, merci pour la réponse, il s'avère que c'est dans le menu... J'ai les mauvais indicateurs :) J'ai cliqué sur Indicators\Momentum dans la fenêtre "Navigator" mais il est ajouté à une nouvelle sous-fenêtre à chaque fois et il semble désordonné.
Pouvez-vous suggérer ce qui pourrait réduire la pression sur le processeur si la procédure est répétée souvent ?
1) Placer mon indicateur (complexe) dans une sous-fenêtre et prendre les valeurs à partir d'ici
ou
2)Lire la valeur de l'indicateur par OnTime(), en utilisant (MQL4)iCustom.
Si je comprends bien, dans le cas 2) l'indicateur n'est pas dessiné dans la fenêtre, il est calculé sur demande. Cependant, je ne comprends pas si le code exécutable de l'indicateur est chargé une fois ou à chaque fois qu'il est appelé ...
P.S. Le deuxième indicateur est toujours ajouté à la nouvelle sous-fenêtre par le menu ... Comment l'ajouter à un indicateur déjà existant dans une sous-fenêtre ?

 

Александр:
Уважаемые,

открыл код индикатора к NT7
вижу в нём if ( v>=a && v<b)
а мне надо добавить ещё условие: неравно числу 25

правильно ли будет следующее?
if ( v>=a && v<b && v<25 && v>25)

Ça ne marche jamais, parce que :"v<25 && v>25" est toujours faux.

Ça devrait être quelque chose comme ça :

v!=25

 
Yury Kirillov:

Ça ne marche jamais, parce que :"v<25 && v>25" est toujours faux.

Ça devrait être quelque chose comme ça :

v!=25

Merci ! Oui :

if ( v>=a && v<b && (v<25|| v>25)) ouif ( v>=a && v<b && v!=25)

 
Александр:
merci ! un autre forum a suggéré : if ( ( v>=a && v<b && (v<25|| v>25))

Dans le mien, je l'écrirais comme ceci :

{if((v>=a)&&(v<b)&&(v!=25)) 
{
        //разные действия 
}}//if((v>=a)&&(v<b)&&(v!=25)) 

 
 
Oksana Berenko:

Cet indicateur n'a pas de paramètres d'entrée ? (je veux dire la fonction iCustom(...))

(J'espère que vous avez manqué la parenthèse finale ici seulement)

Et puisque vous ne copiez que 2 éléments, les copiez-vous dans un tampon alloué statiquement?

L'indicateur a beaucoup de paramètres d'entrée.

Je ne comprends pas où il manque la parenthèse.

J'ai peur de ne pas comprendre ce que signifie un tampon statique. Si vous voulez bien m'expliquer, s'il vous plaît.

 
Mike:

Artem, merci pour la réponse, il s'avère que c'est dans le menu... J'ai mis les indicateurs au mauvais endroit :) J'ai cliqué sur Indicators\Momentum dans la fenêtre du Navigateur mais il est ajouté à une nouvelle sous-fenêtre à chaque fois et ça fait désordre.
Pouvez-vous suggérer ce qui pourrait réduire la pression sur le processeur si la procédure est répétée souvent ?
1) Placer mon indicateur (complexe) dans une sous-fenêtre et prendre les valeurs à partir d'ici
ou
2)Lire la valeur de l'indicateur par OnTime(), en utilisant (MQL4)iCustom.
Si je comprends bien, dans le cas 2) l'indicateur n'est pas dessiné dans la fenêtre, il est calculé sur demande. Cependant, je ne comprends pas si le code exécutable de l'indicateur est chargé une fois ou à chaque fois qu'il est appelé ...
P.S. Le deuxième indicateur est toujours ajouté à la nouvelle sous-fenêtre par le menu ... Comment l'ajouter à un indicateur déjà existant dans une sous-fenêtre ?

Lorsque vous appelez un indicateur via iCustom(), ses tampons ne sont pas affichés dans la fenêtre, mais pour autant que je sache (dans les anciennes versions de MT, c'était certainement le cas), tous les objets graphiques affichés par l'indicateur sont affichés dans la fenêtre graphique.

Pour placer un indicateur dans la fenêtre d'un autre indicateur, faites-le glisser avec la souris de la fenêtre du Navigateur dans la fenêtre de l'indicateur requis.

Pour ce qui est de la réduction de la consommation de temps du processeur - je n'ai pas vérifié, je ne sais pas.

 

aidez-moi à faire les conditions, à finir l'idée, comment est-il facile de mettre une marque sur le graphique selon la condition ?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
     
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
  //+------------------------------------------------------------------+
void OnTick()
{
        // скорость тиков
        int nTicksSpeed = TicksSpeed();
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int TicksSpeed()
{
        MqlTick oTicks[5];
        ZeroMemory(oTicks);
        
        int nTicksCopied = CopyTicks(_Symbol, oTicks, COPY_TICKS_TRADE, 0, 5);
        
        int nSpeed = 0;

        if(nTicksCopied > 0)
        {
                // скорость роста
                if(oTicks[0].bid > oTicks[1].bid)
                {
                        if(oTicks[4].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid && oTicks[2].bid > oTicks[3].bid && oTicks[3].bid > oTicks[4].bid)
                                nSpeed = 4;
                        else if(oTicks[3].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid && oTicks[2].bid > oTicks[3].bid)
                                nSpeed = 3;
                        else if(oTicks[2].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid)
                                nSpeed = 2;
                                
                        else if(oTicks[1].bid > 0 && oTicks[0].bid > oTicks[1].bid)
                                nSpeed = 1 ;
                        
                }
        
                // скорость снижения
                if(oTicks[0].bid < oTicks[1].bid)
                {
                        if(oTicks[4].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid && oTicks[2].bid < oTicks[3].bid && oTicks[3].bid < oTicks[4].bid)
                                nSpeed = -4;
                        else if(oTicks[3].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid && oTicks[2].bid < oTicks[3].bid)
                                nSpeed = -3;
                        else if(oTicks[2].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid)
                                nSpeed = -2; 
                        else if(oTicks[1].bid > 0 && oTicks[0].bid < oTicks[1].bid)
                                nSpeed = -1 ; 
                }
        }
        
        return(nSpeed);
}

//+------------------------------------------------------------------+

if( nTickSpeed==-1)  отмечаем это место на графике g_Label.Text("-1 ")

if( nTickSpeed==-2)  отмечаем это место на графике g_Label.Text("-2 ")

if (nTickSpeed==-3)  отмечаем это место на графике g_Label.Text("-3 ")

if( nTickSpeed==-4)  отмечаем это место на графике g_Label.Text("-4 ")




if( nTickSpeed==1)  отмечаем это место на графике g_Label.Text("1 ")

if( nTickSpeed==2)  отмечаем это место на графике g_Label.Text("2 ")

if( nTickSpeed==3)  отмечаем это место на графике g_Label.Text("3 ")

if( nTickSpeed==4)  отмечаем это место на графике g_Label.Text("4 ")
 

Vous pourriez remplacer les "si" à la fin par :

   switch(nTickSpeed)
     {
      case -4:
         g_Label.Text("-4");
         break;
      case -3:
         g_Label.Text("-3");
         break;
      case -2:
         g_Label.Text("-2");
         break;
      case -1:
         g_Label.Text("-1");
         break;
      case 1:
         g_Label.Text("1");
         break;
      case 2:
         g_Label.Text("2");
         break;
      case 3:
         g_Label.Text("3");
         break;
      case 4:
         g_Label.Text("4");
         break;
     }
Raison: