Une question pour les experts MQL - page 10

 
FAQ:
Si votre ordre s'ouvre, vérifiez l'ouverture, et si c'est le cas, vous pouvez ouvrir le deuxième ordre en vérifiant...

J'ai écrit deux fonctions qui s'ouvrent différemment selon la situation et je vérifierai à la fin de chacune d'elles (je pense qu'elles seront une fonction séparée) quels et combien d'ordres sont ouverts et quels ordres seront manqués et seront réouverts.

Si vous êtes un expert dans le domaine du positionnement de l'EA en termes de forex, vous pouvez être intéressé à en savoir plus et à l'utiliser dans votre robot de trading. Je tiens à réitérer mes remerciements (désolé pour le manque de détails).

 

Bonjour.

Un problème s'est posé. Je ne trouve pas la fonction qui renvoie la taille de la position "agrégée" d'un instrument donné ! J'ai cherché sur tout le forum, y compris dans la branche de I.KIM,https://www.mql5.com/ru/forum/131859 - il y a - différentes fonctions pour des lots, sauf pour celle dont j'ai besoin !

Par exemple, s'il y a plusieurs opérations d'"achat" ouvertes sur EUR, pouvez-vous indiquer comment déterminer leur montant total ?

GetLot(EURUSD, OP_BUY, magic)

double GetLot(string sy="", int op=-1, int mn=-1) {// возвращает сувокупный размер поз.
   double   l=-1;
  int      i, k=OrdersTotal();

  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) {

              I = ------  ???????????
              ------ ????????????
              

            }
          }
        }
      }
    }
  }
  return(l);
}
 

Question résolue ! Une fonction a été découverte :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();
 
  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) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
 
Ce n'est pas ça.)
 

En quoi est-ce mal ? Alors, que retourne cette fonction ?

"Retourne la somme de beaucoup de postes ouverts " - n'est-ce pas ce qui est écrit ?

https://www.mql5.com/ru/code/9394

 
Rita:

"Retourne la somme de beaucoup de postes ouverts" - n'est-ce pas ce qui est écrit ?

C'est vrai. Ce n'est jamais le volume total d'une position. Vous pouvez ouvrir un lot et le vérifier.
 

Je n'ai pas besoin de prendre en compte les locs. Ou plutôt, voici comment :

Ce dont j'ai besoin est ceci. S'il y a plusieurs positions ouvertes de vente et d'achat, je dois supprimer les contre-positions (de compensation), afin de ne rester que dans une seule direction.

Je voulais d'abord calculer la somme de toutes les "baies", puis la somme de toutes les "ventes". Ensuite, trouvez la différence (c'est-à-dire la taille totale la plus grande). Et cette "différence" devrait être laissée sur le marché, - et toutes celles qui lui sont opposées supprimées !

Donc, cette fonction GetAmountLotFromOpenPos ne fonctionnera pas ici ? Par exemple, si je mets

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

Ne retourne-t-il pas le nombre total de lots de toutes les positions de vente ?

 
Rita:

ne me rendra-t-elle pas la somme des lots de toutes les positions de vente ?

Désolé si c'est le cas, c'est bon. Lundi. Ma tête n'est pas encore complètement engagée :)
 
Rita:

Je n'ai pas besoin de prendre en compte les locs. Ou plutôt, voici comment :

Ce dont j'ai besoin est ceci. S'il y a plusieurs positions ouvertes de vente et d'achat, je dois supprimer les contre-positions (de compensation), afin de ne rester que dans une seule direction.

Je voulais d'abord calculer la somme de toutes les "baies", puis la somme de toutes les "ventes". Ensuite, trouvez la différence (c'est-à-dire la taille totale la plus grande). Et cette "différence" devrait être laissée sur le marché, - et toutes celles qui lui sont opposées supprimées !

Donc, cette fonction GetAmountLotFromOpenPos ne fonctionnera pas ici ? Par exemple, si je mets

GetAmountLotFromOpenPos(EURUSD,OP_SELL, -1)

Ne retourne-t-il pas le nombre total de lots de toutes les positions de vente ?

Dans le cas général :

SummLot = GetAmountLotFromOpenPos("0", OP_BUY, MagicNumber)- GetAmountLotFromOpenPos("0", OP_SELL, MagicNumber) ;

 
Oui, c'est ce que j'ai fait pour obtenir une balance "propre".