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) \ { \ constint 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) \ { \ constint Range1 = ArrayRange(Matrix, 0); \ constint 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) \ { \ constint Size = ArraySize(Vector); \ constint 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.
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 Fiveil 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 =)
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
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); \
} \
}
#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]; \
}
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.
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 =)
Qu'est-ce qui peut remplacer le quadruple MODE_MARGINREQUIRED dans mql5 ?
OrderCalcMargin() essayer
C'est compréhensible, mais cela ne fonctionne pas à partir de l'indicateur
OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
Comment(One_Lot); // залог на 1 лот
C'est compréhensible, mais cela ne fonctionne pas avec l'indicateur
OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
Comment(One_Lot);
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.
Oooh, j'aimerais beaucoup aussi :)