Discussion de l'article "Ordres, positions et transactions dans MetaTrader 5" - page 2

 

Торговыми событиями считаются следующие изменения на счете:

  • le débit et l'imputation des fonds ;
  • l'imputation des commissions, des swaps et des taxes ;
  • l'établissement, la suppression et la modification des ordres ;
  • l'exécution de transactions sur la base d'ordres ;
  • l'ouverture et la fermeture de positions
  • la modification du volume et de la direction des positions.

La liste ne comprend pas un événement de négociation tel que la "modification des niveaux de StopLoss et/ou de TakeProfit" d'une position ouverte(SL & TP Modification). Ou s'agit-il d'un cas particulier d'"exécution de transactions sur la base d'ordres" ?

 
Yedelkin:

La liste n'inclut pas un événement de trading tel que la "modification des niveaux de StopLoss et/ou TakeProfit" d'une position ouverte(SL & TP Modification). Ou est-il considéré comme un cas particulier de "transactions basées sur des ordres" ?

La "modificationdes niveaux de StopLoss et/ou TakeProfit" d'une position ouverte(SL & TP Modification)" est plus proche de la "mise en place, suppression etmodification des ordres".
  • la définition, la suppression et la modification d'ordres ;
 
Rosh:
Modification des niveaux de StopLoss et/ou TakeProfit" sur une position ouverte(SL & TP Modification)" est plus proche de l'expression "modification des niveaux de StopLoss et/ou TakeProfit".

J'ai réfléchi à cette question. Mais, en fait, lorsque l'on parle de "définir, supprimer et modifier des ordres", il s'agit de définir, supprimer et modifier des ordres en attente . La modification des niveaux SL et/ou TP d'une position ouverte est d'une nature quelque peu différente, puisque les demandes correspondantes appartiennent à la catégorie des "ordres d'exécution immédiate ". Ou est-ce que je me trompe en ce qui concerne l'"exécution immédiate" ?

 
Rosh:

L'article donne un exemple de chargement de l'historique des transactions pour un jour (un code donne un exemple de chargement de l'historique pour 3 jours). Oui, il s'agit d'une limitation et l'exemple n'est pas universel. Mais si le lecteur comprend cette particularité en lisant l'article, il sera en mesure de décider lui-même de la question - pour quel intervalle et à partir de quel moment il doit charger l' historique des transactions dans le cache.

Le lecteur a reçu les exemples et les algorithmes les plus simples et peut maintenant les appliquer de manière autonome aux fonctions de traitement des événements nécessaires. Il peut créer sa propre base d'historique des transactions, l'initialiser, la synchroniser, etc.

Une tentative de donner des recettes et des fonctions spécifiques pour un travail optimal avec l'historique des transactions dans tous les cas nécessitera au moins un autre article. Plus précisément, il ne s'agit pas des exemples eux-mêmes, mais des approches permettant de résoudre certaines tâches. Cet article avait pour but de comprendre comment les fonctions de trading fonctionnent et quelles sont les nuances auxquelles il faut prêter attention afin de ne pas perdre son propre temps en recherches.

Je suis sûr qu'après avoir lu cet article, tout sera facile à partir de maintenant.

Rashid, je ne minimise pas l'utilité de l'article.

C'est juste qu'en l'absence d'exemples concrets (ceux qui peuvent être appliqués à la rédaction d'une EE), il semble très référentiel.

Oui, il contient des informations utiles, et une personne compréhensive sera en mesure de les utiliser. Mais un utilisateur non averti ne sera pas en mesure d'organiser un travail normal avec l'histoire après avoir lu uniquement cet article, c'est-à-dire qu'il ne lui servira à rien.

 

L'article contient une telle partie :

"Par exemple, voici un script qui recherche la dernière commande du dernier jour et affiche des informations à ce sujet.

// --- définir les limites de l'historique commercial requis
   datetime end=TimeCurrent();                 // heure actuelle du serveur
   datetime start=end-PeriodSeconds(PERIOD_D1);// fixer le début à 24 heures
//--- demande l'historique des transactions pour la journée dans le cache du programme
   HistorySelect(start,end);
//--- obtenir le nombre de commandes dans l'historique
   int history_orders=HistoryOrdersTotal();
//--- récupère le ticket de la commande dans l'historique qui a le dernier index dans la liste
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
   if(order_ticket>0) // obtenir l'ordre historique dans le cache, l'utiliser
     {
      //--- statut de la commande
      ENUM_ORDER_STATE state=(ENUM_ORDER_STATE)HistoryOrderGetInteger(order_ticket,ORDER_STATE);
      long order_magic      =HistoryOrderGetInteger(order_ticket,ORDER_MAGIC);
      long pos_ID           =HistoryOrderGetInteger(order_ticket,ORDER_POSITION_ID);
      PrintFormat("Ordre #%d : ORDER_MAGIC=#%d, ORDER_STATE=%d, ORDER_POSITION_ID=%d",
                  order_ticket,order_magic,EnumToString(state),pos_ID);

     }
   else              // tentative infructueuse d'obtenir une commande

     {
      PrintFormat("Total %d commandes dans l'historique, échec de la sélection d'une commande"+
                  "avec l'index %d. Erreur %d",history_orders,history_orders-1,GetLastError());
     }

La description du script indique que le dernier ordre est recherché, mais le code lui-même parle d'obtenir le ticket qui a le dernier indice dans la liste des ordres historiques :

//--- récupérer le ticket de la commande dans l'historique qui a le dernierindex    в списке
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
En d'autres termes, il est sous-entendu que c'est le ticket ayant l'indice le plus élevé qui se réfère à la dernière commande. Mais je n'ai trouvé nulle part dans les documents que la dernière commande est toujours garantie d' avoir l'index maximum dans la liste des commandes historiques. ...Si, disons, il n'y a qu'une seule commande dans la liste, il n'y a pas de question. Mais s'il y a plus d'ordres dans la liste, pouvons-nous toujours nous fier à la méthode proposée pour trouver le dernier ordre ? En d'autres termes, est-il garanti que le dernier ordre historique a toujours l'indice maximal dans la liste des ordres historiques ?
 

Bonjour !

1) J'ai regardé les propriétés de la position :

POSITION_PROFIT

qu'est-ce que c'est, en quoi est-ce mesuré ?

Exemple :

double profit =PositionGetDouble(POSITION_PROFIT) ;

résultat :

Position EURUSD #101470723 : POSITION_MAGIC=0, open pos price=1.30825, close pos price=1.30835, type=POSITION_TYPE_BUY, profit=-2061584302, comment=.

profit=-2061584302 comment le comprendre ?

2) Quelqu'un peut-il expliquer de façon précise mais simple comment lire cette entrée ?

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) ;

Peut-être que la fonction cis PositionGetInteger(POSITION_TYPE) a demandé la valeur d'une propriété appelée POSITION_TYPE pour une position présélectionnée, mais cette valeur est renvoyée sous la forme d'un numéro de séquence d'énumération, et pour la représenter sous une forme digeste, nous obtenons cette valeur digeste déjà à partir de l'énumération cis ENUM_POSITION_TYPE dans la variable type, dont le type est déclaré comme ENUM_POSITION_TYPE en même temps ?

Dans ce cas, est-ce que je comprends bien qu'il est possible d'écrire une certaine classe par moi-même, qui deviendra une fonction, environ :

initialisation textPosition = cette certaine classe ; // dans le constructeur de laquelle lire dans le tampon de position et mémoriser tous les paramètres

et l'utiliser ensuite :

tekPriceOpening=tekPosition.PriceOpening ;

tekDirectionPosition=tekPosition.DirectionPosition ;

tekDirectionPosition=tekPosition.DirectionPosition ;

tekProfitPosition=tekPosition.ProfitPosition ;

Nous vous remercions de votre attention.

 
bivmail:

2) Quelqu'un peut-il m'expliquer exactement mais simplement comment lire cette entrée ?

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) ;

La fonction PositionGetInteger("identificateur de propriété") renvoie une valeur de type long. Si l'"identificateur de propriété" est d'un type autre que long (par exemple, l'identificateur POSITION_TYPE est de type ENUM_POSITION_TYPE), il est souhaitable de convertir la valeur renvoyée par la fonction PositionGetInteger() en une valeur du type requis (c'est-à-dire en une valeur de type ENUM_POSITION_TYPE).

Dans votre exemple, la variable de type ENUM_POSITION_TYPE est déclarée, à laquelle est affectée la valeur de type ENUM_POSITION_TYPE, obtenue par conversion explicite de la valeur de type long en valeur de type ENUM_POSITION_TYPE.

Les règles de moulage des valeurs des types numériques sont décrites dans le Guide de référence MQL5 / Bases du langage / Types de données / Moulage de type / Moulage des types numériques.

Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - Документация по MQL5
 

Citation de l'article : "Lorsque la connexion au serveur commercial est perdue, le terminal tente périodiquement de rétablir la connexion.

Quelle est la fréquence des tentatives de rétablissement de la connexion ?

 
Toutes les 5 secondes.
 

J'ai compris, merci.