[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 275

 

La question est la suivante .

Comment obtenir un nombre sans moins, s'il s'avère que Open[1] < Close[1] et quand on soustrait Open[1]-Close[1] j' obtiens la valeur avec un moins, comment faire pour que ce soit toujours une valeur positive, j'ai besoin de calculer la distance entre Open et Close peut-être y a-t-il un autre moyen ?

Merci.

 
Martingeil >> :

La question est la suivante .

Comment obtenir un nombre sans moins, s'il s'avère que Open[1] < Close[1] et quand on soustrait Open[1]-Close[1] j'obtiens la valeur avec un moins, comment faire pour que ce soit toujours une valeur positive, j'ai besoin de calculer la distance entre Open et Close peut-être y a-t-il une autre façon ?

>> Merci.

https://docs.mql4.com/ru/math/MathAbs

 

;) >> Merci !

 

Bonne journée !

Lors de l'écriture d'un EA pour MT4, il était nécessaire de déterminer par programme (c'est-à-dire dans le code de l'EA lui-même) si au moins un ordre de cet EA était ouvert ou non. Pouvez-vous nous dire s'il existe une telle fonction ? Peut-être, si c'est le cas, cela ressemblerait à quelque chose comme ceci

Bool (un ordre EA avec ce numéro magique a-t-il été ouvert)

{réponse= Vrai/Faux}

?

Experts - aidez-nous s'il vous plaît - nous nous creusons déjà la tête

P.S.- j'ai essayé l'option avec les numéros de commande - ça n'a pas marché

 
waitra >> :

Bonne journée !

Lors de la création d'un EA pour MT4, il était nécessaire de déterminer par programme (c'est-à-dire dans le code de l'EA lui-même) si au moins un ordre de cet EA était ouvert ou non. Savez-vous s'il existe une telle fonction ?

Cette fonction fonctionnera-t-elle ?

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru/                  |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++)                                    {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()== sy || sy=="")                   {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if ( op<0 || OrderType()== op)                   {
            if ( mn<0 || OrderMagicNumber()== mn) kp++;
          }}}}}
  return( kp);
}

Exemple d'utilisation : Nous plaçons cette fonction à la toute fin de notre code et la vérifions lorsque nous ouvrons une position :



if ( NumberOfPositions(NULL,OP_BUY, Magic)< 1) {
// если нет окрытых OP_BUY позиций с заданным магиком, покупаем
ticket=OrderSend(Symbol(),0, Lots,Ask, Slippage,Bid- SL*Point,
                      Ask+ TP*Point, NULL, Magic ,0,Blue);
                                              }

Si nous ne cherchons pas les positions mais les ordres en attente, nous pouvons utiliser cette fonction

Fonction NumberOfOrders().
Cette fonction renvoie le nombre de commandes . Vous pouvez limiter la liste des ordres à vérifier à l'aide des paramètres de la fonction :
sy - Nom de l'instrument. Si nous définissons ce paramètre, la fonction ne vérifiera que les ordres de l'instrument spécifié. NULL signifie l'instrument actuel, et "" (par défaut) signifie n'importe quel instrument.
op - Type d'ordre en attente. Valeurs valides : OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. La valeur par défaut de -1 signifie un ordre quelconque.
mn - Identifiant de l'ordre (MagicNumber). La valeur par défaut de -1 signifie n'importe quel MagicNumber.

https://www.mql5.com/ru/forum/107476/page12

 

Veuillez expliquer ce que les fichiers fournissent :

#include <stdlib.mqh>
#include <stderror.mqh>

Si possible, d'une manière simple.

Merci.

 
Serbov писал(а) >>

Veuillez expliquer ce que les fichiers fournissent :

Si possible, d'une manière simple.

Merci.

il s'agit de ce qu'on appelle des "fichiers de bibliothèque". ces fichiers stockent les fonctions fréquemment utilisées. ils sont utilisés pour éviter de charger le source. si le fichier de bibliothèque est "déclaré", les fonctions du fichier déclaré peuvent être utilisées comme si elles étaient incluses dans le source.

 
Serbov >> :

Veuillez expliquer ce que les fichiers nous donnent :

Si possible, restez simple.

Merci.

Lorsque nous utilisons (appelons) une fonction de ces fichiers (déjà intégrés initialement dans mt4) nous pouvons, en cas de fonctionnement incorrect de l'EA, voir dans le journal le numéro de l'erreur que nous avons faite dans le code .

Par exemple, nous appelons la fonction GetLastError() :

ticket= OrderSend(Symbol(),OP_BUY, lots,Ask,3, SL, TP,"Name_Expert", Magic,0, clOpenBuy );
   if( ticket < 0)
 {Print("Ошибка открытия ордера BUY #", GetLastError());  } 

Dans ce cas, si nous avons fait une erreur dans le code ou défini des paramètres externes incorrects, nous verrons le numéro de cette erreur dans le journal.

Par exemple, 130.

Et le décodage de ce numéro se trouve sur -https://book.mql4.com/ru/appendix/errors.

Et nous n'avons pas besoin de parcourir tout le code, car nous savons déjà où l'erreur est commise !

 
rid писал(а) >>

Cette fonction fonctionnera-t-elle ?


Exemple d'utilisation : nous plaçons la fonction elle-même à la toute fin du code (en dehors de la fonction START) et la vérifions ensuite lors de l'ouverture d'une position :



Si nous ne cherchons pas les positions mais les ordres en attente, nous pouvons utiliser

Fonction NumberOfOrders().
Cette fonction renvoie le nombre de commandes . Vous pouvez limiter la liste des ordres à vérifier à l'aide des paramètres de la fonction :
sy - Nom de l'instrument. Si vous spécifiez ce paramètre, la fonction ne vérifiera que les ordres de l'instrument spécifié. NULL signifie l'instrument actuel, et "" (par défaut) signifie n'importe quel instrument.
op - Type d'ordre en attente. Valeurs valides : OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP ou -1. La valeur par défaut de -1 indique un ordre quelconque.
mn - Identifiant de l'ordre (MagicNumber). La valeur par défaut -1 signifie n'importe quel MagicNumber.

https://www.mql5.com/ru/forum/107476/page12

Merci beaucoup pour le conseil, nous avons essayé mais cela n'a pas fonctionné, veuillez vérifier s'il y a une erreur quelque part dans le code :

bool Open_Buy()

{

   bool res=false;    


if( условие_1)        { 

       if ( NumberOfPositions(NULL, Magic)< 1) // если нет открытых позиций с заданным магиком

          { res=true; }}

else  

   {

    if( условие_1) 

       { 

       if ( NumberOfPositions(NULL, Magic)> 1) // если советник уже открывал позиции

       {

          if ( условие_2)              { 

             res=true; }

           } 

}}

return( res);

}

Si nous voulons vérifier s'il existe une condition de vente ou d'achat et que nous n'avons pas ouvert ou fermé un ordre, dans ce cas, seule la première condition fonctionnera. Et si l'EA a déjà ouvert des ordres dans le passé, alors, lorsqu'un ordre est ouvert, les première + deuxième conditions devraient se déclencher.

J'ai regardé le lien que vous avez fourni, peut-être que l'ExistOrders() ; est plus approprié ?

(mais honnêtement, je n'ai pas pu le placer, puisque je n'ai apparemment pas les compétences nécessaires pour l'instant).

 

Vous n'avez pas appelé la fonction correctement.

Votre fonction est appelée comme suit : si (NumberOfPositions(NULL,Magic)> 1)

Il devrait ressembler à ceci :

if( условие_1)        { 

       if ( NumberOfPositions(NULL,-1, Magic)< 1) 
// если нет открытых позиций с заданным магиком

          { res=true; }}

Sentez la différence (vous avez omis "-1") ! et RECTIFIEZ VOTRE CODE.

Pour le contrôler, vous pouvez imprimer un commentaire sur le graphique. Par exemple, comme ceci (au début de la fonction START).

Comment ("Количество текущих открытых советником позций = ",
                                  NumberOfPositions(NULL,-1,Magic)  );
Magic_2=Magic*3;
Quant à votre deuxième condition, je mettrais ("sans trop réfléchir") un magicien différent et une fonction distincte Open_Buy_2() pour ouvrir les positions par la deuxième condition !
.

Le code de la deuxième condition ressemblerait à ceci

 if ( условие_2)                          { 
  if ( NumberOfPositions(NULL,-1, Magic)== 1)   {
    if ( NumberOfPositions(NULL,-1, Magic_2)< 1) { 
..... .....