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

 
Maxim Kuznetsov:
On a l'impression que le texte original vient d'un univers parallèle, qu'il a été traduit deux fois par google-translate puis raconté à nouveau par Alice :-)

Ok. Il existe une fonction qui peut être utilisée pour trouver le dernier lot. Ça s'appelleFindLastLots. Mais je veux faire une fonction qui ne se contente pas de rechercher le dernier lot, mais à l'aide de laquelle on peut modifier les lots. C'est-à-dire, si extern lots = 0.01 ; je veux changer lots = 0.01, disons, à 0.04 en utilisantcette fonction. Et là, j'ai besoin d'aide pour comprendre comment il peut être mis en œuvre en général.

double FindLastLots()
  {
   double oldlots=0;
   int oldticket;
   int ticket=0;

   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oldticket=OrderTicket();
            if(oldticket>ticket)
              {
               oldlots= OrderLots();
               ticket = oldticket;
              }
           }
        }
     }
   return(oldlots);
  }
Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
 
Corvin85:

...

changer lots = 0,01, disons à 0,04. Sans utiliser la multiplication.

...

Eh bien... si la multiplication pose problème, vous pouvez obtenir le résultat souhaité en ajoutant.

 
Alexey Viktorov:

Eh bien... si la multiplication pose problème, vous pouvez obtenir le résultat souhaité en ajoutant.

- :)

sans dire
 
Puis-je ajouter une boucle while à cette fonction, afin de pouvoir parcourir les variables externes une par une dans les ordres sélectionnés? Mais comment puis-je ensuite extraire la "valeur de retour" et l'utiliser ?
 
Alexey Viktorov:

Eh bien... si la multiplication pose des problèmes, vous pouvez obtenir le résultat souhaité par addition.

Je comprends votre sarcasme, mais dans les cas de multiplication ou de calcul, il devrait y avoir autant de multiplicateurs que de variables externes Lots. Ce n'est pas une façon de sortir de la situation. Bien que, pour être honnête, j'y ai pensé...

 
Bonjour !!! Je suis en train de faire un EA basé sur un timeframe M5.... mais les signaux sont déclenchés (par exemple à 9:33, 12:11) etc..... pouvez-vous me dire comment ouvrir un ordre sur une nouvelle bougie si le signal était sur la bougie actuelle ?
 
Corvin85:

Je comprends votre sarcasme, mais dans les cas de multiplication ou de calcul, il devrait y avoir autant de multiplicateurs que de variables externes Lots. Ce n'est pas une façon de sortir de la situation. Même si je vais être honnête, j'y ai pensé.

Je ne me souviens pas des détails pour l'instant, mais on m'a commandé quelque chose de compliqué en calculant des lots. En conséquence, une formule a été trouvée pour effectuer le calcul.

Peut-être feriez-vous mieux d'énoncer l'ordre en détail ? Alors quelqu'un peut suggérer cette formule.

 
Alexey Viktorov:

Je ne me souviens plus des détails maintenant, mais on m'a ordonné de faire quelque chose d'élaboré pour calculer le lot. Le résultat est une formule qui a été utilisée pour le calculer.

Peut-être feriez-vous mieux d'énoncer l'ordre en détail ? Alors quelqu'un peut suggérer cette formule.

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot  = 0.01;
extern double Lot2  = 0.02;
extern double Lot3  = 0.05;
extern double Lot3  = 0.07;
//----------- И так далее-------//

Il existe plusieurs variables externes du Lot. Si un ordre est fermé par le Stop Loss, un nouvel ordre est ouvert avec le nouveau lot qui est spécifié dans la variable externe. (Peut-être, c'est ainsi que nous aurions dû l'écrire à l'origine). Je ne sais juste pas comment l'écrire correctement en code. Et comme je l'ai écrit plus haut, aucune multiplication ou calcul, aucun multiplicateur externe ne sera utile. Nous devons d'une manière ou d'une autre passer par les données des ordres fermés...

 
Corvin85:

Il y a plusieurs variables externes Lot. Si un ordre est fermé par StopLoss, alors un nouvel ordre s'ouvre avec un nouveau lot, qui est spécifié dans la variable externe. (Peut-être, cela aurait dû être écrit de cette façon à l'origine) Et voici le problème. Je ne sais juste pas comment l'écrire correctement en code. Et comme je l'ai écrit plus haut, aucune multiplication ou calcul, aucun multiplicateur externe ne sera utile. Nous avons besoin d'une manière ou d'une autre de récupérer les données des commandes fermées ...

Lorsque vous ouvrez un ordre, inscrivez le numéro de la règle/variable dans le commentaire.

ensuite, lorsque vous vérifiez l'historique, récupérez ce numéro, ajoutez-y 1 et obtenez un nouveau numéro de règle.

 
Corvin85:

Il y a plusieurs variables externes Lot. Si un ordre est fermé par StopLoss, alors un nouvel ordre s'ouvre avec un nouveau lot, qui est spécifié dans la variable externe. (Peut-être, cela aurait dû être écrit de cette façon à l'origine) Et voici le problème. Je ne sais juste pas comment l'écrire correctement en code. Et comme je l'ai écrit plus haut, aucune multiplication ou calcul, aucun multiplicateur externe ne sera utile. Nous devons d'une manière ou d'une autre passer par les données des commandes fermées.

Expérimentez avec ce code, c'est peut-être ce dont vous avez besoin.

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict

input double Lot_01  = 0.1;
input double Lot_02  = 0.2;
input double Lot_03  = 0.3;
input double Lot_04  = 0.4;
input double Lot_05  = 0.5;
input double Lot_06  = 0.6;
input double Lot_07  = 0.7;

double GetNextLot(const double last_lot)
{
   if(last_lot>=Lot_07) return(Lot_07);
   if(last_lot>=Lot_06) return(Lot_07);
   if(last_lot>=Lot_05) return(Lot_06);
   if(last_lot>=Lot_04) return(Lot_05);
   if(last_lot>=Lot_03) return(Lot_04);
   if(last_lot>=Lot_02) return(Lot_03);
   if(last_lot>=Lot_01) return(Lot_02);
   return(Lot_01);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print(Lot_01," ---> ",GetNextLot(Lot_01));
   Print(Lot_02," ---> ",GetNextLot(Lot_02));
   Print(Lot_03," ---> ",GetNextLot(Lot_03));
   Print(Lot_04," ---> ",GetNextLot(Lot_04));
   Print(Lot_05," ---> ",GetNextLot(Lot_05));
   Print(Lot_06," ---> ",GetNextLot(Lot_06));
   Print(Lot_07," ---> ",GetNextLot(Lot_07));
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
void OnTick()
  {

   
  }
//+------------------------------------------------------------------+

2019.11.28 22:31:26.409 tst EURUSD,H1 : 0.7 ---> 0.7

2019.11.28 22:31:26.409 tst EURUSD,H1 : 0.6 ---> 0.7

2019.11.28 22:31:26.409 tst EURUSD,H1 : 0.5 ---> 0.6

2019.11.28 22:31:26.409 tst EURUSD,H1 : 0.4 ---> 0.5

2019.11.28 22:31:26.409 tst EURUSD,H1 : 0.3 ---> 0.4

2019.11.28 22:31:26.409 tst EURUSD,H1 : 0.2 ---> 0.3

2019.11.28 22:31:26.409 tst EURUSD,H1 : 0.1 ---> 0.2

Dans ma fonction GetNextLot(), vous introduisez le volume du dernier ordre fermé, et elle renvoie la valeur suivante du paramètre Lot_XX.

la seule limitation dans ce code est que les paramètres des lots doivent être dans l'ordre croissant - je pense que le code est simple et direct, vous pouvez le modifier pour répondre à vos besoins

Raison: