Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 70

 
wishmast:

Veuillez me dire pourquoi la fonction OrdersTotal() écrit -1 lors de la recherche des commandes.

Exemple : pour (i=OrdersTotal()-1 ;i>=0 ; i--)

pourquoi pas simplement OrdersTotal() ?

Le nombre d'ordres dans cette fonction commence-t-il à 0 ou à 1 ? En d'autres termes, s'il y a une seule commande, la fonction OrdersTotal() est-elle égale à 0 ou à 1 ?

compter à partir de zéro
 
wishmast:

Veuillez me dire pourquoi la fonction OrdersTotal() écrit -1 lors de la recherche des commandes.

Exemple : pour (i=OrdersTotal()-1 ;i>=0 ; i--)

pourquoi pas simplement OrdersTotal() ?

Le nombre d'ordres dans cette fonction commence-t-il à 0 ou à 1 ? En d'autres termes, s'il y a une seule commande, la fonction OrdersTotal() est-elle égale à 0 ou à 1 ?

Lafonction OrdersTotal() indique la quantité, c'est-à-dire que s'il y a une commande, alorsla fonction OrdersTotal() est égale à 1, mais dans la liste des commandes, le rapport commence par 0.

0 - premier ordre

1 - deuxième ordre

2 - troisième

et ainsi de suite.

Ainsi, si nous commençons la recherche à partir de la fin de la liste, nous devonssoustraire un du nombre total deOrdersTotal().

 
Sergey Gritsay:

OrdersTotal() indique la quantité, c'est-à-dire que s'il y a une commande, alorsOrdersTotal() sera égal à un, mais dans la liste des commandes, le rapport commence à zéro.

0 - premier ordre

1 - deuxième ordre

2 - troisième

et ainsi de suite.

Ainsi, si nous commençons la recherche à partir de la fin de la liste, nous devonssoustraire un au nombre total deOrdersTotal().

Mais si nous ne soustrayons pas un à la première expression, ce ne sera pas une erreur, car si nous avons un ordre, il y aura deux itérations. A moins que nous n'ayons pas besoin de faire deux itérations quand nous pouvons faire tout ce dont nous avons besoin en une seule, donc -1, n'est-ce pas ?
 
wishmast:
Mais si la première expression ne soustrait pas un, ce ne sera pas une erreur, si nous avons un ordre, il y aura deux itérations. A moins qu'il n'y ait pas besoin de faire deux itérations quand tout ce dont nous avons besoin peut être fait en une seule, donc -1, non ?
Oui, c'est vrai.
 
Sergey Gritsay:
Oui, correct.

Ce n'est pas tout à fait ça.

Vous pouvez utiliser le préfixe de décrémentation.

for(int i = OrdersTotal(); i >= 0; --i)
 
trader781:
Puisque nous avons une pile de commandes, pourquoi ne pouvons-nous pas simplement sortir celle dont nous avons besoin ? (Les bons) et en faire ce que l'on veut ? Par exemple, commande (i-4)
Parce que cela ne fonctionnera que dans le testeur MT4. Ou lorsque vous négociez sur un seul symbole et un seul cet EA.
 
Vitalie Postolache:
Parce que cela ne fonctionnera que dans le testeur MT4. Ou lorsque vous négociez sur un seul symbole et un seul cet EA.

Si vous y réfléchissez, l'EA est le même pour chaque paire, seul le solde du compte est commun (l'échange sera le dernier).

le filtre va à tous les ordres satisfaisant la condition market-open par l'Expert Advisor - si le symbole coïncide.

Qu'est-ce qui ne va pas ?

 
trader781:

Si vous y réfléchissez, l'EA est le même pour chaque paire, seul le solde du compte est commun (l'échange sera le dernier).

le filtre s'applique à tous les ordres qui satisfont à la condition d'ouverture du marché par l'EA, si la simulation correspond.

Qu'est-ce qui ne va pas ?

Eh bien, on vous a déjà expliqué plus haut ce qui ne va pas. Nous pouvons compter les commandes comme étant les nôtres uniquement et prendre les index du tableau par le montant total - nous obtiendrons un tableau avec des cellules vides. Et c'est pour quoi faire ? Et si le tableau n'était pas vide, les champs "inutiles" contiendront des déchets inutiles qui entraîneront des erreurs, et nous parlons d'argent.
 
Vitalie Postolache:
On vous a déjà expliqué plus haut ce qui ne va pas. Les commandes ne comptent que les leurs, et prennent les index du tableau pour le nombre total - vous obtenez un tableau avec des cellules vides. Et c'est pour quoi faire ? Et si le tableau n'était pas vide, les champs "inutiles" contiendront des déchets inutiles qui entraîneront des erreurs, et nous parlons d'argent.

OK, c'est comme ça que ça marche.

struct myorder
{
int    Ticket;
double orderopenprice;
int   ordertype;
double profit;
double stoploss;
double  lot;
};

myorder orders[];

int i;
int count1=0;
void CalcOrders()
{
for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
         && (OrderMagicNumber()==Magic) && (OrderType()<2))
         orders[count1].Ticket=OrderTicket();
         orders[count1].lot=OrderLots();
         orders[count1].orderopenprice=OrderOpenPrice();
         orders[count1].ordertype=OrderType();
         orders[count1].profit=OrderProfit();
         orders[count1].stoploss=OrderStopLoss();
         count1++;
     }
}    


n'est-ce pas ?

 
Aidez-moi à écrire la condition : Si le montant des fonds disponibles sur le compte est inférieur à 50% du dépôt, alors {action} MT5