Caractéristiques du langage mql5, subtilités et techniques - page 7

 
Pour travailler avec des fichiers RAM, la construction suivante peut être utilisée
const int handleRAM = FileOpen("\\\\.\\pipe\\RAM", FILE_READ | FILE_WRITE | FILE_BIN);

Créez au préalable un fichier approprié.

Avec cette implémentation, il est pratique/rapide, par exemple, de copier des tableaux de n'importe quelle dimension (et différente) les uns sur les autres - sans violer le HDD/SDD.

// Копирование массивов любых размерностей (и разных) друг в друга
#define ARRAYCOPY(Dest, Source) \
  if (ArraySize(Source) > 0)                                                                  \
  {                                                                                           \
    const int handleRAM = FileOpen("\\\\REN\\pipe\\RAM", FILE_READ | FILE_WRITE | FILE_BIN);  \
                                                                                              \
    if (handleRAM != INVALID_HANDLE)                                                          \
    {                                                                                         \
      if (FileWriteArray(handleRAM, Source) > 0)                                              \
        FileReadArray(handleRAM, Dest);                                                       \
                                                                                              \
      FileClose(handleRAM);                                                                   \
    }                                                                                         \
  }
C'est une solution universelle. Les classiques de ce genre de copie ressemblent à ceci
// Копирует двумерный массив в одномерный
#define MATRIX_TO_VECTOR(Matrix, Vector)      \
  if (ArraySize(Matrix) > 0)                  \
  {                                           \
    const int Range1 = ArrayRange(Matrix, 0); \
    const int Range2 = ArrayRange(Matrix, 1); \
                                              \
    ArrayResize(Vector, Range1 * Range2);     \
                                              \
    int k = 0;                                \
                                              \
    for (int i = 0; i < Range1; i++)          \
      for (int j = 0; j < Range2; j++)        \
      {                                       \
        Vector[k] = Matrix[i][j];             \
                                              \
        k++;                                  \
      }                                       \
  }

// Копирует одномерный массив в двумерный
#define VECTOR_TO_MATRIX(Vector, Matrix)                               \
  if (ArraySize(Vector) > 0)                                           \
  {                                                                    \
    const int Size = ArraySize(Vector);                                \
    const int Range = ArrayRange(Matrix, 1);                           \
                                                                       \
    ArrayResize(Matrix, Size / Range + ((Size % Range == 0) ? 0 : 1)); \
                                                                       \
    for (int i = 0; i < Size; i++)                                     \
      Matrix[i / Range][i % Range] = Vector[i];                        \
  }
Les macros sont utilisées à la place des fonctions, car il est impossible de passer un tableau de taille universelle aux fonctions.
 
Dmitry Fedoseev:

Le fait est que OnTradeTransaction() ne se déclenchera pas immédiatement après OrderSend.

En bref, il y a juste une foule d'argumenteurs ici sans entrer dans le sujet de l'argument.

Il existe deux variantes de l'algorithme si quelque chose doit être fait immédiatement après OrderSend() :

1. Nous pouvons démarrer une boucle en attendant les mises à jour des listes de commandes et d'offres.

2. Terminez OnTick() et attendez le déclenchement de OnTradeTransaction().

3. Vérifiez par cochage si une nouvelle commande ou une nouvelle affaire apparaît dans la liste.

Choix de 2 et 3 ))
 
Qu'est-ce qui peut remplacer le quadruple MODE_MARGINREQUIRED dans mql5 ?
 
Artyom Trishkin:
Que puis-je faire à la place de MODE_MARGINREQUIRED dans mql5 ?

C'est quelque chose que vous devez demander aux développeurs, car aucun des membres du forum ne le sait. J'ai posé cette question 4 fois dans différents fils de discussion, une fois j'ai même obtenu la réponse : "utilisez la recherche", mais il y a plus de 100 questions dans la recherche et pas une seule réponse. Le développeur ne répond pas à la question, probablement en raison du fait que dans Five il n'y a pas de possibilité d'obtenir la marge pour les paires autres que la monnaie de dépôt.

Tout est encore brut dans Five et il semble que cela restera ainsi, mais il y a un OpenGL pour tout le monde =)

 
Artyom Trishkin:
Qu'est-ce qui peut remplacer le quadruple MODE_MARGINREQUIRED dans mql5 ?
OrderCalcMargin() try https://www.mql5.com/ru/docs/trading/ordercalcmargin
 
Andrey Barinov:
OrderCalcMargin() essayer

C'est compréhensible, mais cela ne fonctionne pas à partir de l'indicateur

  double One_Lot=0.0;
  OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
  Comment(One_Lot); // залог на 1 лот
 
Vitaly Muzichenko:

C'est compréhensible, mais cela ne fonctionne pas avec l'indicateur

  double One_Lot=0.0;
  OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
  Comment(One_Lot);
Il est indiqué dans l'aide que cela ne fonctionne pas à partir de l'indicateur https://www.mql5.com/ru/docs/runtime/running.
 
Andrey Barinov:
Ceci est écrit explicitement dans l'aide, qui ne fonctionne pas à partir de l'indicateur https://www.mql5.com/ru/docs/runtime/running.
Je voudrais un calcul qui soit indépendant du type de programme.
 
Artyom Trishkin:
Je voudrais un calcul qui soit indépendant du type de programme.
Oooh, j'aimerais beaucoup de choses aussi :)
 
Andrey Barinov:
Oooh, j'aimerais beaucoup aussi :)
Eh bien... ce n'est pas une réponse...
Et cette question porte uniquement sur le thème de la branche.