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

 
-Aleks-:

Pouvez-vous me montrer sur ma fonction comment faire cela ? J'ai vraiment du mal à le comprendre.


Vous devez décider quelles variables de la fonction vous avez besoin (pour le programme principal) et les transmettre/récupérer. Si vous avez besoin de tout, déclarez ces variables au début du programme et elles seront visibles par toutes les fonctions à la fois.
 
-Aleks-:

Ne pensez pas "pourquoi", mais plutôt "comment".

Je vous l'ai dit, ça ne s'applique pas à cette fonction...

Ces fonctions sont généralement volumineuses, c'est pourquoi il est dommage de les appeler plusieurs fois pour les exécuter afin d'obtenir différentes valeurs, mais je veux obtenir tous les résultats en une seule fois.

Par exemple, je veux obtenir en une seule fois le nombre de lots et le nombre d'ordres ventilés par type d' ordre.

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
double n_Lot_BUY;
double n_Lot_SELL;
int n_Order_BUY;
int n_Order_SELL;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
  }
void OnTick()
  {
   F();
   Print("Лотов BUY:",n_Lot_BUY,"   Лотов SELL:",n_Lot_SELL,"   Позиций BUY:",n_Order_BUY,"   Позиций SELL:",n_Order_SELL);
  }
//+------------------------------------------------------------------+
void F()
  {
   n_Lot_BUY=0;
   n_Lot_SELL=0;
   n_Order_BUY=0;
   n_Order_SELL=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)){break;}
      if(OrderType()==0)
        {
         n_Order_BUY++;
         n_Lot_BUY=n_Lot_BUY+OrderLots();
        }
      if(OrderType()==1)
        {
         n_Order_SELL++;
         n_Lot_SELL=n_Lot_SELL+OrderLots();
        }
     }
  }
//+------------------------------------------------------------------+
 
Nikolay Gaylis:

Je veux dire que l'idée est de déclarer toutes les variables au préalable et de les modifier ensuite par le biais d'une fonction - compris, merci pour l'option. Mais, ce n'est pas toujours pratique, si un seul et même nom de variable est utilisé pour le même type de variables... pas d'autres options ?
 

les mêmes types peuvent être combinés dans une structure et déclarés comme un tableau, comme suggéré ci-dessus)

//структура из переменных
struct OrdStruct
   {
   double tp;
   double sl;
   double open;
   double close;
   double lot;
   datetime time_open; 
   datetime time_close;
   };

//массив структур
OrdStruct ORDERS[];


//обращение к переменным
ORDERS[i].sl=OrderStopLoss();
ORDERS[i].tp=OrderTakeProfit();
ORDERS[i].lot=OrderLots();

//или
ORDERS[i]=ORDERS[i+1];

ZeroMemory(ORDERS[i]);
 
Taras Slobodyanik:

Les mêmes types peuvent être combinés dans une structure et déclarés comme un tableau, comme suggéré ci-dessus).

C'est déjà difficile à comprendre... par exemple, je n'arrive pas à comprendre i - à quoi il est égal et, le tableau ORDERS[i]= ne devrait-il pas avoir une taille ?

 
-Aleks-:

C'est déjà difficile à comprendre... par exemple, je n'arrive pas à comprendre i - qu'est-ce qui est égal et, le tableau ORDERS[i]= ne devrait-il pas être dimensionné ?


Ceci n'est qu'un exemple, bien sûr i doit être spécifié et la taille du tableau doit être ajustée en fonction du nombre de commandes...

c'est-à-dire que les variables sont en quelque sorte les mêmes tp / sl / lot ... mais l'indice du tableau i change

 
-Aleks-:

Cela me fait mal de voir votre angoisse... Vous êtes sur un forum technique, utilisez la logique, s'il vous plaît.

1. Décrire le problème ;

Décrivez les variables que vous utilisez ;

Décrivez ce que vous voulez obtenir comme résultat ;

Apprenez à exprimer vos idées dans un langage technique sur un forum technique. Sinon, il faudra beaucoup de temps pour deviner ici.

 
Taras Slobodyanik:


Ceci est un exemple, bien sûr je dois spécifier et fixer la taille du tableau en fonction du nombre de commandes...

c'est-à-dire que les variables sont en quelque sorte les mêmes tp / sl / lot ... mais l'indice du tableau i change

Oui, j'ai compris, merci, je devrais essayer de l'utiliser à l'avenir, quelque part..... Je ne comprends pas, et travailler avec cette structure comme un tableau ? Trier et effectuer d'autres opérations standard ?

 
Alexey Kozitsyn:

Cela me fait mal de voir votre angoisse... Vous êtes sur un forum technique, utilisez la logique, s'il vous plaît.

1 Décrivez le problème ;

Décrivez les variables que vous utilisez ;

Décrivez ce que vous voulez obtenir comme résultat ;

Apprenez à exprimer vos idées dans un langage technique sur un forum technique. Sinon, il faudra beaucoup de temps pour deviner ici.

Veuillez écrire où il n'y a pas de logique dans mes propos ?

Le tourment de savoir est le plaisir de résoudre.

Je ne voulais pas dévoiler mon problème, alors j'ai fait simple : j'ai du mal à deviner ce qui a causé la difficulté à percevoir... Désolé si je vous ai mis mal à l'aise avec mon "angoisse".

 
-Aleks-:

C'est-à-dire que l'idée est de déclarer toutes les variables à l'avance, puis de les modifier par le biais d'une fonction - compris, merci pour la variante. Mais, il n'est pas toujours pratique d'utiliser un seul et même nom de variable pour le même type de variables... pas d'autres options ?

Lisez attentivement ce qui suit et vous comprendrez ce qui se passe. Ceci décrit la première option, qui a été proposée, le passage de paramètres par référence.

En clair, lorsqu'une fonction est appelée, la variable peut être passée en paramètre

double FirstMethod(int i,int j)

ou par référence si le nom de la variable est précédé du signe &.

double SecondMethod(int &i,int &j)

Dans la deuxième variante, les variables passées à la fonction par référence seront modifiées en même temps que les variables qui ont des noms encore différents. Dans le cas particulier, il s'agit des variables i et j.

Tout le reste est suffisamment clair dans le texte d'aide.

Передача параметров - Функции - Основы языка - Справочник MQL4
Передача параметров - Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Передача параметров - Функции - Основы языка - Справочник MQL4