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

 
MrBrooklin #:

Merci beaucoup, Alexander. Votre correction a permis au code de fonctionner. Pour être honnête, je me suis rendu compte que j'étais moi-même confus dans trois pins. Il faut que j'étudie à nouveau le passage d'arguments à une fonction. Apparemment, je n'ai rien compris.

Cordialement, Vladimir.

Sortir des variables dans la zone globale n'est pas passer des arguments à une fonction...

//+------------------------------------------------------------------+
//|                                              Count_Pos (v.2).mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void Calc_Pos(uint & pos_buy,uint & pos_sell)
  {
   for(int i=0; i<PositionsTotal(); i++)
     {
      PositionGetSymbol(i);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         pos_buy++;
      if(
         PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
         pos_sell++;
     }
   Print("pos_buy ",pos_buy);
   Print("pos_sell ",pos_sell);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   uint count_buy=0, count_sell=0;
   Calc_Pos(count_buy,count_sell);
   Print("По символу ",_Symbol," открыто: ",count_buy," длинных позиций");
   Print("По символу ",_Symbol," открыто: ",count_sell," коротких позиций");
  }
//+------------------------------------------------------------------+

Mettez & devant les noms de variables à l'entrée de la fonction et tous les problèmes seront résolus.

 
Alexey Viktorov #:

La sortie de variables vers le champ d'application global n'est pas le passage d'arguments à une fonction...

Mettez & devant les noms de variables à l'entrée de la fonction et tous les problèmes seront résolus.

Bonjour Alexey, c'est donc ça le problème !!! Merci beaucoup, mon cher ! J'avais la tête brisée, je pensais qu'il manquait quelque chose d'autre ! Il s'est avéré que les cerveaux ne suffisent pas !!!! ))

Cordialement, Vladimir.

 
Alexey Viktorov #:
Mettez & devant les noms de variables à l'entrée des fonctions et tous les problèmes seront résolus.

J'ai trouvé et regardé la vidéo sur les fonctions avec références. A partir de cette leçon vidéo, j'ai réalisé que je n'avais pas seulement besoin d'une leçon MQL5 pour les débutants, mais d'une leçon MQL5 pour les débutants particulièrement doués de stupidité. En bref, je n'ai rien compris. En général, vous devez digérer toutes les informations que vous avez reçues et revoir cette vidéo cinq ou même six fois. Mais il y aura de quoi faire pendant mon temps libre ! ))

Cordialement, Vladimir.

 
MrBrooklin #:

J'ai trouvé et regardé une vidéo sur les fonctions avec des liens. A partir de cette leçon vidéo, j'ai réalisé que j'avais besoin non seulement d'une leçon de MQL5 pour débutants, mais d'une leçon de MQL5 pour débutants particulièrement doués de stupidité. Bref, je n'ai rien compris. D'une manière générale, il faut digérer toutes les informations que vous avez reçues et revoir cette vidéo cinq, voire six fois. Mais il y aura de quoi faire pendant mon temps libre ! ))

Cordialement, Vladimir.

Ne perdez pas de temps, même si vous n'avez nulle part où le dépenser. Le nom du "professeur" parle de lui-même, un dilettante est un dilettante.

Cette vidéo ne vous sera utile que pendant 3 minutes. Et le reste n'est que distraction et perte d'informations utiles.

Il vaut mieux lire attentivement la documentation, expérimenter avec des exemples et vous comprendrez tout.

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Передача параметров - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

Ne perdez pas de temps, même s'il n'y a pas d'endroit où le perdre. Le nom du "professeur" parle de lui-même, un amateur est un amateur.

Il n'y a que 3 minutes d'informations utiles dans cette vidéo. Le reste n'est qu'une distraction et vous perdez des informations utiles.

Il vaut mieux lire attentivement la documentation, expérimenter avec des exemples et vous comprendrez tout.

Merci Alexey, je pensais que la leçon vidéo serait plus informative et utile pour moi, mais c'est exactement le contraire qui s'est produit. Quant au manuel de référence de MQL5, la section Transmission des paramètres, je l'ai lu de la même manière, mais il s'est avéré comme le célèbre dicton : "Je regarde dans le livre, je vois la figure ! Je n'ai rien compris. Bref, bien sûr, je vais relire et expérimenter encore quelques fois, je n'ai pas trop le choix. ))

Cordialement, Vladimir.

 

Après avoir regardé le tutoriel vidéo et lu le manuel de référence de MQL5 sur le passage d'arguments par référence, il semble que ce soit plus ou moins clair. Cependant, après avoir analysé le code présenté dans le manuel de référence, un fragment m'a laissé perplexe, même si, à mon avis, il n'a rien à voir avec le passage d'arguments par référence :

//+------------------------------------------------------------------+
//| передача параметров по ссылке                                    |
//+------------------------------------------------------------------+
double SecondMethod(int &i,int &j)
  {
   double res;
//---
   i*=2;
   j/=2;
   res=i+j;
//---
   return(res);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---.
   int a=14,b=8;
   Print("a и b перед вызовом:",a," ",b);
   double d= SecondMethod(a,b);
   Print("a и b после вызова:",a," ",b);
  }
//+------------------------------------------------------------------+
//--- результат выполнения скрипта
//  a и b перед вызовом: 14 8
//  a и b после вызова: 28 4

A cet égard, j'ai une question à poser aux experts en programmation MQL5 : pourquoi diable ont-ils "fourré" la fonction SecondMethod(a,b ) dans la variable d dans OnStart( ) ? S'agit-il d'une condition préalable au bon fonctionnement du script, ou y a-t-il quelque chose que j'ai encore mal compris ?

Cordialement, Vladimir.

 

Aidez-moi, s'il vous plaît.

Il existe de nombreux tableaux contenant des données temporelles, et l'heure de certains éléments de ces tableaux peut coïncider.

J'ai besoin de les rassembler dans un tableau sans répéter les valeurs de temps.

Je l'ai fait de cette façon :

struct str1
  {
   int               time[];// в массиве порядка 10 тыс элементов
  };

struct str2
  {
   str1              arr[];// в массиве порядка 1 тыс элементов
  };

str2 m_name[]; // в массиве порядка 100 элементов

int ArrFull[]; // массив в который нужно собрать отсортированное время без повторений
//+------------------------------------------------------------------+
void OnStart()
  {
// считаем что m_name[] ранее уже заполнили


   int tempArr[];// объявляю дополнительный массив

   int size1 = ArraySize(m_name);
   for(int i = 0; i < size1; i++)
     {
      int size2 = ArraySize(m_name[i].arr);
      for(int j = 0; j < size2; j++)
        {
         // копирую в дополнительный массив все массивы времени из структур
         ArrayInsert(tempArr, m_name[i].arr[j].time, ArraySize(tempArr));
        }
     }
// сортирую дополнительный массив
   ArraySort(tempArr);

   int size = ArraySize(tempArr);
   ArrayResize(ArrFull, size);
   ArrFull[0] = tempArr[0];
   int j = 1;

// копирую не повторяющиеся элементы из дополнительного массива в массив с которым в дальнейшем буду работать
   for(int i = 1; i < size; i++)
      if(ArrFull[j - 1] != tempArr[i])
        {
         ArrFull[j] = tempArr[i];
         j++;
        }

   size = ArrayResize(ArrFull, j);

// дальше продолжение. много много букв
  }
//+------------------------------------------------------------------+


Mais le code s'est avéré très lent. Il doit être plus rapide. Comment faire pour ? ???

 
MrBrooklin arguments par référence, il semble que ce soit plus ou moins clair. Cependant, après avoir analysé le code présenté dans le manuel de référence, un fragment a encore causé une certaine confusion, bien que, à mon avis, il n'ait rien à voir avec le passage d'arguments par référence :

A cet égard, j'ai une question à poser aux experts en programmation MQL5 : pourquoi diable ont-ils "fourré" la fonction SecondMethod(a,b ) dans la variable d dans OnStart( ) ? S'agit-il d'une condition préalable au bon fonctionnement du script et ai-je encore mal compris quelque chose ?

Cordialement, Vladimir.

La variable d reçoit le résultat de l'exécution de la fonction
 
Artyom Trishkin #:
La variable d est affectée au résultat de l'exécution de la fonction.

Merci, Artyom, pour votre réponse ! Est-ilimpossible d'utiliser uniquement la fonction SecondMethod(a,b ) sans affectation?

Cordialement, Vladimir.

 
MrBrooklin #:

Merci, Artyom, pour votre réponse ! Est-ilimpossible d' utiliser la fonction SecondMethod(a,b ) sans affectation?

Cordialement, Vladimir.

Oui, c'est possible. Dans ce cas, deux valeurs seront reçues - uniquement dans les variables passées par référence. En d'autres termes, la fonction renvoie trois valeurs
Raison: