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

 
paylesss:

Merci ! Le redémarrage de l'ordinateur a aidé ! C'est dommage, je suis resté assis ici toute la matinée)).

Maintenant, le plus pertinent est la construction du terminal et il serait souhaitable de se rappeler ce que vous avez fait pour faire échouer les variables globales. S'il est possible de reproduire la situation, ce serait formidable.

 
Kirill Andreev:

J'ai écrit un hibou, mais pour une raison quelconque, le trailing stop ne fonctionne pas... Quelle pourrait être la raison ?

pour que cela fonctionne, vous devez le mettre dans OnTick
 
Vladislav Andruschenko:
Il faut le mettre dans OnTick pour que ça marche.
Merci, je vais essayer ! !!
 

Bonjour.

Aidez-moi s'il vous plaît, je veux modifier toutes les positions sauf la dernière, celle du "plus jeune". Où puis-je en ajouter ou en soustraire un?


 int i; total = OrdersTotal();
          for(i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }
 
mila.com:

Bonjour.

Aidez-moi s'il vous plaît, je veux modifier toutes les positions sauf la dernière, celle du "plus jeune". Où puis-je en ajouter ou en soustraire un?



 int i; total = OrdersTotal();
          for(i = 0; i < total-1; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }


 
-Aleks-:
int i; total = OrdersTotal();
          for(i = 0; i < total-1; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }

Êtes-vous sûr d'avoir montré un moyen fiable de manquer la dernière position dans la liste ?

Si vous faites des échanges réalistes, ne craignez-vous pas que le triage ne devienne soudainement dépendant ?

Pourtant, IMHO, nous avons besoin de deux cycles ici - dans le premier, nous recherchons la position la plus fraîche à l'heure d'ouverture, dans le second, nous modifions toutes les positions sauf celle dont le ticket a été trouvé dans le premier cycle.

 
mila.com:

Bonjour.

Aidez-moi s'il vous plaît, je veux modifier toutes les positions sauf la dernière, celle du "plus jeune". Où puis-je en ajouter ou en soustraire un?


Je le ferais.

/********************Script program start function********************/
void OnStart()
{
 int i, t1, t2, clTicket, total = OrdersTotal();
  datetime d1, d2;
   double v1, v2, clVolume;
    for(i = total-1; i > 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t1 = OrderTicket();
         d1 = OrderOpenTime();
        v1 = OrderLots();
       }
      else continue;
        if(OrderSelect(i-1, SELECT_BY_POS))
         {
          t2 = OrderTicket();
           d2 = OrderOpenTime();
          v2 = OrderLots();
         }
        else continue;
        clTicket = d1 > d2 ? t1 : t2;
       clVolume = d1 > d2 ? v1 : v2;
      if(!OrderClose(clTicket, clVolume, OrderClosePrice(), 100)) // закрывает независимо от типа ордера OP_BUY или OP_SELL
       Print("фигня кака-та");
    }
}/********************************************************************/

Je ne l'ai pas coché et je ne peux pas décider si j'aurai un "trou" dans ma liste de commandes lorsque je fermerai la commande suivante.

Si quelqu'un est en mesure d'expliquer la possibilité de l'apparition d'un tel "vide", je lui en serais reconnaissant...

En guise d'assurance, nous avons inséré autre chose pour continuer ; s'il y a un vide, une commande sera simplement sautée. Il me semble que oui.

 
Alexey Viktorov:

Je le ferais.

Malheureusement, cela n'a pas été testé et je ne peux pas savoir s'il y a un "trou" dans la liste des commandes après la clôture de la commande suivante.

Si quelqu'un est en mesure d'expliquer la possibilité de l'apparition d'un tel "vide", je lui en serais reconnaissant...

En guise d'assurance, un autre continu est inséré ; s'il y a un vide, il sautera simplement un ordre. Il me semble que c'est ainsi.

À l'origine, la question portait sur le fait de sauter la dernière commande. Et c'est là que vous commencez.

Tu dois le faire de cette façon :

for(int i = total-2; i >= 0; i--)

Il n'y aura alors aucun vide après la suppression et la commande la plus récente sera sautée.

 
Alexey Kozitsyn:

La question initiale était de sauter la dernière commande. C'est ici que vous commencez.

Tu dois le faire de cette façon :

Il n'y aura alors aucun saut après la suppression et la commande la plus récente sera sautée.

Pas le dernier de la liste, mais le plus "jeune" par le temps.

Bien que je sois tout aussi inconsidéré. La question porte sur la modification et je suis en train d'écrire près... Et si vous le modifiez simplement, il n'y aura pas de trous dans la liste des commandes... Il se peut que vous deviez ajouter des variables et leur attribuer des valeurs, et que vous deviez vérifier les paramètres pour éviter l'erreur n° 1. Eh bien, Mila peut s'en occuper elle-même.

 
Alexey Kozitsyn:

La question initiale était de sauter la dernière commande. C'est ici que vous commencez.

Tu dois le faire de cette façon :

for(int i = total-2; i >= 0; i--)

Il n'y aura donc pas de saut après la suppression et la commande la plus récente sera sautée.

Comment pouvez-vous être sûr qu'il n'y aura pas de dépendance de tri, et que vous ne manquerez pas le mauvais ordre ?

Encore une fois, pour trouver de manière fiable la dernière commande, il faut l'identifier par son heure d'ouverture, et non par sa position dans la liste.

Raison: