Discussion de l'article "MQL5 Cookbook : L'historique des transactions et la bibliothèque de fonctions pour obtenir les propriétés de position"
L'article est bon, je l'ai apprécié. Il arrive souvent que la position actuelle se compose de plusieurs offres, et en plus de la première et de la dernière, j'aimerais connaître les paramètres de 2, 3, etc. offres. Une telle fonction enrichirait l'article.
Question à l'auteur de l'article.
Comment puis-je obtenir l'ID de la position dans laquelle la transaction a été effectuée immédiatement après l'ouverture de la position ?
Question à l'auteur de l'article.
Comment obtenir l'identifiant de la position, dans laquelle la transaction a été impliquée, immédiatement après l'ouverture de la position ?
Sélectionnez la position à l'aide de la fonction PositionSelect() et obtenez son identifiant à l'aide de la fonction PositionGetInteger() et de l'identifiant mql5 - POSITION_IDENTIFIER.
Exemple tiré de l'aide :
//+------------------------------------------------------------------+ //| Fonction d'échange| //+------------------------------------------------------------------+ void OnTrade() { //--- vérifier si la position est disponible et imprimer l'heure de son changement if(PositionSelect(_Symbol)) { //--- obtenir l'identifiant de la position pour la suite des opérations ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER); Print(_Symbol," postion #",position_ID); //--- obtient le temps de formation de la position en millisecondes depuis le 01.01.1970 long create_time_msc=PositionGetInteger(POSITION_TIME_MSC); PrintFormat("Position #%d POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID, create_time_msc,TimeToString(create_time_msc/1000)); //--- obtient l'heure du dernier changement de position en secondes depuis le 01.01.1970 long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE); PrintFormat("Position #%d POSITION_TIME_UPDATE = %i64 seconds => %s", position_ID,update_time_sec,TimeToString(update_time_sec)); //--- obtient l'heure du dernier changement de position en millisecondes depuis le 01.01.1970 long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC); PrintFormat("Position #%d POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s", position_ID,update_time_msc,TimeToString(update_time_msc/1000)); } //--- }
Sélectionnez une position à l'aide de la fonction PositionSelect() et obtenez son identifiant à l'aide de la fonction PositionGetInteger() et de l'identifiant mql5 - POSITION_IDENTIFIER.
Exemple tiré de l'aide :
Merci, tol64! En principe, vous avez raison.
Et je m'excuse que la première question ait été brève... malgré le fait que j'ai donné une référence à l'identificateur de position.
Le problème est le suivant. Il est nécessaire, après l'ouverture d'une position, d'enregistrer cette ouverture dans l'historique des transactions à l'aide de la classe CDealInfo en utilisant la méthode ::PositionId(). Et de préférence avec le plus petit écart de temps entre le moment de l'ouverture et le moment où une transaction de type DEAL_ENTRY_IN ou DEAL_ENTRY_INOUT apparaît dans l'historique.
Merci, tol64! En principe, la vérité vous appartient.
Et je m'excuse pour la brièveté de la première question... malgré le fait que j'ai donné un lien vers la position ID.
Le problème est le suivant. Après l'ouverture d'une position, il est nécessaire d'enregistrer cette ouverture dans l'historique des transactions en utilisant la classe CDealInfo avec la méthode ::PositionId(). Et de préférence avec le plus petit écart de temps entre le moment de l'ouverture et le moment où une transaction de type DEAL_ENTRY_IN ou DEAL_ENTRY_INOUT apparaît dans l'historique.
À mon avis, le suivi de l'événement dans OnTrade(), comme dans l'exemple ci-dessus, est tout à fait approprié pour cela. Mais je pense que soudainement une position ne peut pas être sélectionnée par un événement de transaction, et que la prochaine ne le sera pas bientôt. Dans ce cas, vous devez suivre l'environnement à l'aide d'un timer. Même les millisecondes peuvent être réglées maintenant.
Ou bien, au lieu de suivre la position ouverte, il faut analyser l'historique des transactions (nombre de transactions). Nous nous souvenons de la position précédente et la comparons à la position actuelle. Vous pouvez également le faire dans le timer. Il existe de nombreuses variantes. Tout dépend de la tâche spécifique.
Anatoly, j'ai rencontré un problème ici. Veuillez nous faire part de votre expérience. Soit il y a un bogue dans l'utilisation des fonctions, soit je me trompe. Mais je pense avoir tout fait correctement....
J'ai une question concernant les variantes de fonctions dont la seconde ne "fonctionne" pas.
Par exemple :
1)
double HistoryOrderGetDouble( ulong ticket_number, // billet ENUM_ORDER_PROPERTY_DOUBLE property_id // identifiant du bien );
2)
bool HistoryOrderGetDouble( ulong ticket_number, // billet ENUM_ORDER_PROPERTY_DOUBLE property_id, // identifiant du bien double& double_var // nous prenons ici la valeur de la propriété );
J'ai joint le code source.
Anatoly, j'ai rencontré un problème ici. Veuillez nous faire part de votre expérience. Soit il y a un bogue dans l'utilisation des fonctions, soit je me trompe. Mais je pense avoir tout fait correctement....
La question porte sur les variantes de fonctions dont la seconde ne "fonctionne" pas.
...
Que voyez-vous dans le journal ? Je ne vois aucun problème lors de l'exécution du script.
Je vois qu'avec les paramètres par défaut du script, il y a une entrée comme "Failure to return HistoryOrderGetDouble() function".
C'est-à-dire que la version booléenne de la fonction n'obtient pas la valeur de la propriété.
Je constate qu'avec les paramètres de script par défaut, il y a un enregistrement du type "Failure to return HistoryOrderGetDouble() function" (Échec du retour de la fonction HistoryOrderGetDouble()).
En d'autres termes, la version booléenne de la fonction n'obtient pas la valeur de la propriété.
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Un nouvel article MQL5 Cookbook : L'historique des transactions et la bibliothèque de fonctions pour obtenir les propriétés de position a été publié :
Il est temps de résumer brièvement les informations fournies dans les articles précédents sur les propriétés de position. Dans cet article, nous allons créer quelques fonctions supplémentaires pour obtenir les propriétés qui ne peuvent être obtenues qu'après avoir accédé à l'historique des transactions. Nous nous familiariserons également avec les structures de données qui nous permettront d'accéder aux propriétés de position et de symbole de manière plus pratique.
Pour pouvoir voir le fonctionnement des nouvelles fonctions dans l'Expert Advisor modifié dans l'article précédent intitulé "MQL5 Cookbook : Comment éviter les erreurs lors de la définition/modification des niveaux de trading", nous ajouterons la possibilité d'augmenter le volume de la position si un signal d'ouverture se produit à nouveau, alors que la position est déjà là.
Il peut y avoir plusieurs transactions dans l'historique des positions, et s'il y a eu des changements dans le volume de la position au cours du trading, il doit également y avoir eu des changements dans le prix de la position actuelle. Pour connaître le prix du premier point d'entrée, nous devons accéder à l'historique des transactions par rapport à cette position spécifique. La figure ci-dessous est une démonstration du cas où une position n'a qu'un seul deal (point d'entrée) :
Fig. 1. Première transaction dans la position.
Auteur : Anatoli Kazharski