Erreurs, bugs, questions - page 734

 
Vitya:
Peut-être avons-nous besoin de PositionTotal() ?

Et quel est le rapport avec la position si je demande à OrdersTotal() combien de commandes sont actuellement passées ?

Et je demande cette information dans OnTrade(), le moment où l'ordre existe ne peut être manqué.

Mais en fait, il s'avère que ce moment est de toute façon manqué et les demandes sont traitées soit lorsque la commande n'est pas encore présente, soit lorsqu'elle l'est déjà.

Mais le moment où il existe n'est pas détecté dans OnTrade(), ou alors, les OrdersTotal() mentent.

 

Pour éviter de se plaindre de l'imperfection du code, voici le code MetaQuotes avec mon amélioration du script dans l'Expert Advisor.

Ajouté la fonction OnTrade() et mis le code du script dans OnInit().

Aucune des imprimantes n'a émis un message indiquant qu'il y a une commande.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

Je ne peux répondre à cette question que par un article intitulé " Trade events in MetaTrader 5" :

Заключение

Toutes les opérations de la plateforme de négociation et d'analyse MetaTrader 5 sont asynchrones, et toutes les modifications du compte de négociation sont signalées indépendamment les unes des autres. Par conséquent, vous ne devez pas essayer de suivre un seul événement selon la règle "Une demande - Un événement de négociation". Si nous voulons déterminer exactement ce qui a changé après l'événement Trade, nous devons analyser toutes les transactions, positions et ordres à chaque appel du gestionnaire OnTrade et les comparer à l'état que nous avions avant l'apparition de l'événement.
Cela signifie que l'ordre que vous essayez d'attraper doit probablement déjà être recherché à l'aide de HistoryOrdersTotal.
 
Rosh:

Je ne peux répondre à cette question qu'en consultant l'article Trading Events in MetaTrader 5:

Cela signifie que la commande que vous essayez d'attraper devrait probablement déjà être recherchée en utilisant HistoryOrdersTotal.

Je me laisse guider par cet article. J'aimerais trouver la réponse à la question suivante : comment est-il possible qu'un événement commercial manque le moment où un ordre est placé mais n'a pas encore été exécuté ?

Les événements commerciaux sont générés par le serveur dans les cas suivants

  • Changements dans les commandes actives,
  • les changements de postes,
  • les changements dans les métiers,
  • les changements dans l'historique des transactions.

Je soupçonne que la fonction OrderTotal() échoue. Mais je ne peux pas le prouver avec cette fonctionnalité.

Bien qu'en tant qu'option, je ne rejette pas le fait que OrderTotal() prenne des données qui ne sont pas là où je pense qu'elles sont (c'est-à-dire pas sur le serveur).

 
Urain:

Je suis cet article. J'aimerais trouver la réponse à la question suivante : comment se fait-il qu'un événement commercial manque le moment où un ordre a été placé mais n'a pas encore été exécuté ?

Simplement, lorsqu'un événement Trade survient, l'ordre a déjà été placé et a déjà été exécuté. C'est pourquoi elle ne figure pas dans l'historique et est déjà en vigueur.
 
Rosh:
Au moment où les événements commerciaux arrivent, la commande a déjà été passée et exécutée. Par conséquent, il ne fait pas partie des commandes actives et a déjà été ajouté à l'historique.

Oui, oui, mes pensées flottent autour de cette réponse.

Je répondrais ainsi, au moment où l'ordre est placé, le serveur génère un événement "trades" et l'envoie au terminal, lorsque le terminal le reçoit, le code fait une demande pour le nombre d'ordres, mais au moment où cette demande arrive au serveur, le serveur a déjà exécuté l'ordre.

Je n'ai pas d'autre explication.

 
Urain:

Les événements commerciaux sont générés par le serveur dans les cas suivants :

  • Changement dans les commandes actives,
  • les changements de postes,
  • les changements dans les métiers,
  • les changements dans l'historique des transactions.

Je soupçonne que la fonction OrderTotal() échoue. Mais je ne peux pas le prouver avec cette fonctionnalité.

Ai-je bien compris que la liste des ordres actifs comprend à la fois les ordres actifs en attente et les ordres d'ouverture de position ?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
papaklass:

Qu'est-ce que cela signifie ?

Quelque chose comme "Aucune partie de la mémoire utilisée n'a été libérée après la fin du programme". En particulier, un message similaire apparaît lorsqu'un programme crée un objet dynamique à l'aide de l'opérateur new, mais ne le supprime pas ensuiteà l'aide de l'opérateur delete.
 
papaklass:
... dans l'onglet "Experts", ce message apparaît. Ce n'est pas une erreur, c'est un avertissement. Un avertissement sur quoi ?

Eh bien, je n'ai pas dit "erreur". Que ce soit un "avertissement". J'ai déjà dit ma version avec un exemple. Jetez un autre coup d'œil à la discussion d'ici (sur les fuites de ligne - lisez jusqu'à la fin de la page) : https://www.mql5.com/ru/forum/1111/page345#comment_54616

Il se peut que vous deviez vous adresser au conseil d'administration, en détaillant votre situation.

 

J'ai trouvé une "confusion".

Pourquoi le compilateur n'aime-t-il pas la deuxième définition de la variable b?

Et en général, comment dois-je gérer cette situation ?

#property script_show_inputs

// m[a].Column[b]
input int A=11;
input int B=3;

#define a A
//#define b B // тут раскоментировать
#define b 3   // тут закоментировать

// размер одного элемента 4 байта
struct ArrWe
{
  float Column [b];
};

void OnStart()
{
  ArrWe m[11]; // тут вместо "11" хочу использовать "a"
  Print("Размер структуры ArrWe ",sizeof(ArrWe));
  Print("Количество элементов 1-го измерения ",sizeof(m)/sizeof(ArrWe));
  Print("Количество элементов 2-го измерения ",sizeof(ArrWe)/4);   
  Print("Размер массива из 11 ArrWe ",sizeof(m));
}
Raison: