Questions des débutants MQL4 MT4 MetaTrader 4 - page 249

 
Taras Slobodyanik #:

Le fait est que les opérateurs peuvent être traduits en assembleur sans utiliser de fonctions, par de simples commandes du processeur - ce sont les opérateurs.

Ce qui est plus complexe, ce qui nécessite d'appeler des procédures complexes, c'est une fonction.

pour l'essentiel, une fonction est un CALL en langage assembleur et son implémentation matérielle, qui sauvegarde l'adresse sec sur la pile, puis les paramètres de la fonction sont passés de manière programmatique sur la pile, les variables locales de la fonction sont également allouées sur la pile.....

c'est-à-dire qu'un appel de fonction est une certaine séquence d'actions, liée au langage et aux conventions matérielles du PC.


et les opérateurs... pour être honnête, j'ai plus appris du wiki maintenant qu'avant la discussion

 
Igor Makanu #:

bien, si pour en venir au fait, la fonction est CALL en assembleur et c'est l'implémentation matérielle, qui sauvegarde l'adresse sécante sur la pile, alors les paramètres de la fonction sont transférés programmatiquement sur la pile, les variables locales de la fonction sont également allouées sur la pile.....

c'est-à-dire qu'un appel de fonction est une certaine séquence d'actions, liée au langage et aux conventions matérielles du PC.


et les opérateurs..., pour être honnête, j'ai plus appris du wiki maintenant qu'avant la discussion

CALL est un appel (opérateur), pas la fonction elle-même.

c'est-à-dire qu'une fonction est un grand nombre d'opérateurs)

 
Taras Slobodyanik #:

CALL est un appel (opérateur), pas la fonction elle-même.

c'est-à-dire qu'une fonction est un grand nombre d'opérateurs)

et s'il n'y a qu'un seul opérateur, alors ce n'est pas une fonction?

void OnStart()
{
   int x = 0;
   inc(x);
}
//+------------------------------------------------------------------+
void inc(int &v)
{
   v = v + 1;
}
 
Igor Makanu #:

et s'il y a un opérateur, alors ce n'est pas une fonction?

La question portait sur "if" et "alert".
pourquoi le premier est un opérateur et le second une fonction ?

Le mot "alerte" lui-même est aussi un opérateur - mais c'est un mot qui appelle une fonction).

et le mot "si" n'appelle pas une fonction.

la fonction est constituée de plusieurs mots (opérateurs)

 
Messieurs, merci pour vos réponses, il y a beaucoup de discussions. Malheureusement, je ne suis pas en mesure d'en comprendre la majeure partie, car vous utilisez des termes profonds, que je n'ai pas encore rencontrés dans le manuel.

De la réponse de Maxim et Taras, je peux conclure que l'appareil terminologique de la langue n'est pas strict et qu'il y a des hypothèses, appelant certains opérateurs comme des fonctions. Sur la base de la réponse selon laquelle un opérateur est un mot et une fonction en a plusieurs, il n'est pas clair non plus que le même opérateur "si" peut avoir plusieurs mots/actions dans les crochets ordinaires et les crochets arrondis.
 
Ivan Butko #:
Messieurs, merci pour vos réponses, la discussion est lancée. Malheureusement, je n'arrive pas à en comprendre la majeure partie, car vous utilisez des termes profonds que je n'ai pas rencontrés dans le manuel.

D'après la réponse de Maxim et Taras, je peux conclure que la terminologie du langage n'est pas stricte et qu'il existe des hypothèses, appelant certains opérateurs comme des fonctions. Sur la base de la réponse selon laquelle un opérateur est un mot et une fonction en a plusieurs, il n'est pas clair non plus que le même opérateur "si" peut avoir plusieurs mots/actions dans les crochets ordinaires et les crochets arrondis.

une fonction est un sous-programme.
un opérateur est un mot de programme.

Une fonction est faite pour que vous n'ayez pas à écrire plusieurs opérateurs identiques à chaque fois, et à l'appeler plusieurs fois.

L'appel d'une fonction pour exécuter un seul opérateur n'a aucun sens, car il peut être fait en une seule fois.


ps. Alert est une fonction (sous-programme) écrite par les développeurs pour que tout le monde puisse l'utiliser.

 
Taras Slobodyanik #:

une fonction est un sous-programme.
un opérateur est un mot de programme.

Une fonction est faite pour que vous n'ayez pas à écrire plusieurs opérateurs identiques à chaque fois, et à l'appeler plusieurs fois.

L'appel d'une fonction pour exécuter un seul opérateur n'a aucun sens, car il peut être fait en une seule fois.


ps. Alert est une fonction (sous-routine) écrite par les développeurs pour que tout le monde puisse l'utiliser.

Exactement, Alert a une description qui est cachée comme une caractéristique de la fonction. J'ai relu la section, j'ai remarqué.

Merci pour la clarification, je pense qu'il n'y a plus de dissonance dans ma tête sur cette question.

 
double CalculateProfitHistory() 
{
   double profit = 0;
   int cnt = LockTicket, i , ototal = OrdersHistoryTotal();
   for(i = 0; i < ototal; i++)
     {
      if(OrderSelect(cnt, SELECT_BY_TICKET, MODE_HISTORY))
        {
         if(OrderSymbol() == Symbol() && OrderCloseTime() > 0)
           {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
              {
               if(OrderMagicNumber() == Magic )
                 {
                  profit += OrderProfit()+OrderCommission()+OrderSwap();
                                    
                 }
              }
           }
        }
     }
   return(profit);
}
Bon après-midi. Veuillez me conseiller. Pourquoi le calcul n'est-il pas correct ? Pour être plus précis, il indique le bénéfice de l'ordre suivant sans l'ajouter au précédent.
L'idée est de modifier le ticket à partir duquel ils doivent monter, après avoir fixé un certain bénéfice.
 
Passez par i et substituez cnt
 
Aleksei Stepanenko #:
Passez par i et substituez cnt

écrivez la manière correcte.