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

 
Vitaly Muzichenko:

Merci, pour une raison quelconque, ça ne fonctionne pas comme ça avec le lot.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

Comment retourner le lot du quatorzième stop de vente sur le lot de l'instantané = 0.03 ?

 
Marina Korotkih:

Merci, pour une raison quelconque, ça ne fonctionne pas comme ça avec le lot.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
  if (sy=="0") sy=Symbol();
  double r=MarketInfo(sy, MODE_MINLOT);
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots()) {
                r=OrderLots();
  }}}}}}}
  return(r);
}
C'est le minimum, si vous avez besoin de la commande la plus récente, je le ferai maintenant.
 
Vitaly Muzichenko:

C'est le minimum, si vous avez besoin de la commande la plus récente, je le ferai maintenant.

Il s'agit de rechercher le lot le plus éloigné du prix.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
datetime t=0;
double r=-1,l=0;
if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderOpenPrice() || r==-1) {
                r=OrderOpenPrice();
                l=OrderLots();
  }}}}}}}
  return(l);
}
 
Marina Korotkih:

Merci, pour une raison quelconque, ça ne fonctionne pas comme ça avec le lot.

double GetLotLastOrder(string sy="", int op=-1, int mn=-1) {
double   r=-1;
  if (sy=="0") sy=Symbol();
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (r>OrderLots() || r==-1) {
                r=OrderLots();
  }}}}}}}
  return(r);
}

Comment puis-je retourner le lot du quatorzième stop de vente dans le lot de l'instantané= 0.03 ?



Non la fonction fonctionne correctement, pourquoi la valeur de retour n'est pas 1 et14 commandes mais 2 ?

s'agit-il d'un testeur ?

Cela fonctionne correctement pour moi.

 
Vitaly Muzichenko:

Il s'agit de rechercher le lot le plus éloigné du prix.


Merci, cela a du sens. Vous l'avez trouvé, maintenant vous pouvez découvrir tout ce que vous avez besoin de savoir à son sujet ;)

 
Alekseu Fedotov:

Non la fonction fonctionne correctement, pourquoi la valeur de retour n'est pas 1 et14 commandes mais 2 ?

s'agit-il d'un testeur ?

Cela fonctionne correctement pour moi.

Vous devez trier par prix, car vous ne pouvez pas chercher par taille, la grille peut être mélangée, et vous trouverez soit le plus grand soit le plus petit, mais pas le premier ni le dernier.
 
Marina Korotkih:

Merci, cela a du sens. Vous l'avez trouvé, vous pouvez maintenant découvrir tout ce que vous devez savoir à son sujet ;)

Pour connaître toutes les informations relatives à un ordre ou à une position, il est préférable de le faire par ticket.

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}
 
Alekseu Fedotov:

...pourquoi la valeur de retour n'est pas 1 et14 commandes mais 2 ?


Parce que je l'appelle comme ça

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
 
Vitaly Muzichenko:

Pour connaître tous les détails d'un ordre ou d'une position, il est préférable de le faire à partir du ticket.

if(OrderSelect(i, SELECT_BY_TICKET)) {
  // всё что угодно
}

Mais pour ce faire, nous devons d'abord connaître le ticket du dernier ordre 14

L'ordre doit donc toujours être recherché en premier, comme dans la première fonction ?

Ou bien, . Il suffit de remplacer SELECT_BY_POS par SELECT_BY_TICKET.

 
Marina Korotkih:

Mais pour ce faire, il faut d'abord trouver le ticket de la dernière commande 14.

L'ordre doit donc toujours être recherché en premier comme dans la première fonction ?

Ou bien, . Il suffit de remplacer SELECT_BY_POS par SELECT_BY_TICKET.

Cela dépend de ce que vous devez vérifier. En fait, nous pouvons tout trouver ici, sélectionner la commande par le prix et ensuite écrire les paramètres requis pour celle-ci et retourner le tout.

Utiliser les boucles une fois de plus n'est pas une bonne idée, il est donc préférable de tout réaliser en une seule boucle ; cela ne se remarque pas dans le commerce réel, mais les tests dans le testeur tourneront longtemps. Cependant, tout dépend de la tâche, quelqu'un écrit des programmes pour le testeur, et quelqu'un pour le commerce, donc vous pouvez utiliser plus d'un cycle.

P.S. Si l'Expert Advisor est un pipsqueak, il est bien sûr préférable de ne pas utiliser un seul cycle)
Raison: