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

 
Artyom Trishkin:

Comment puis-je déterminer l'heure d'ouverture de la dernière position et l'heure de fermeture de la dernière position ?

En général, j'aimerais connaître les principes généraux et les algorithmes permettant d'obtenir des informations sur les positions ouvertes/fermées dans mql5.

Que faut-il prendre en considération, quelles sont les particularités du moment ?

Le fait est que j'utilise la syntaxe MQL4, qui est 1000 fois plus facile et plus compréhensible que la syntaxe MQL5 pour travailler avec la partie commerciale.

Vous savez très bien à quel point votre tâche peut être résolue facilement et clairement en trois lignes dans MQL4. C'est pourquoi c'est exactement la façon dont je le fais.

Pour répondre à toutes les questions concernant MQL5, je me penche sur le code source de la bibliothèque. Toutes les nuances que je connais y ont été prises en compte.

Pour l'instant, nous pouvons affirmer que les positions de couverture et de compensation sont très différentes. Par exemple, en Netting, vous pouvez toujours avoir une seule position pendant des mois, alors que vous êtes constamment en train de négocier. Par conséquent, la position Netting dans la compréhension normale de MT5 est quelque chose de mal conçu et, par conséquent, de peu pratique. Ainsi, pour ce filet, nous pouvons créer notre propre essence de position. Dans MT4, vous pouvez également avoir des positions de compensation, mais avec une interaction beaucoup plus claire.

Ouvrir une position pour 1 lot. Ensuite, fermez-la à 0,99, et déposez le même montant. Et ainsi de suite plusieurs fois.

La couverture est pratique non pas parce que vous pouvez avoir des positions multidirectionnelles, mais parce que vous pouvez avoir plusieurs positions sur un symbole d'UNE seule direction. C'est exactement comme ça que je vois le confort de travailler avec des postes dans les systèmes Netting. Pas comme dans MT5.

Idéalement, lorsque vous travaillez avec des comptes Netting, vous devriez toujours avoir une table qui correspond entièrement aux comptes MT4. Car seuls ces tableaux vous permettent de comprendre instantanément ce qui s'est passé et comment cela s'est passé sur le compte de trading. Pas les statistiques du MT5.

Quant au MT5-Hedge, tout est simple. CloseBy, cependant, je n'ai pas creusé dans ce domaine. Par conséquent, je ne sais pas.

 
fxsaber:
Il n'est pas toujours possible de connaître les niveaux SL/TP d'une position fermée.

Il ressort également de cette citation que les positions TP dans MT5 sont toujours des ordres au marché. Ne pas mettre en signet la contrepartie de la limite - voir ci-dessus.

Voilà qui est intéressant... J'ai besoin de savoir avec certitude que la dernière position fermée l'a été à la prise de bénéfices.

Y a-t-il un moyen d'en avoir le cœur net ?

 
Artyom Trishkin:

Voilà qui est intéressant... J'ai besoin de savoir avec certitude que la dernière position fermée l'a été à la prise de bénéfices.

Y a-t-il un moyen de le savoir avec certitude ?

Je fais ce qui est conseillé :

//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Take Profit               |
//+------------------------------------------------------------------+
bool IsClosedByTP (const string symbol)
{
  //--- Получим комментарий последней сделки на указанном символе
  string last_comment = LastDealComment (symbol);
  //--- Если в комментарии есть строка "tp"
  if(StringFind (last_comment, "tp", 0) > -1)
    return (true);
  //--- Если нет строки "tp"
  return (false);
}
//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Stop Loss                 |
//+------------------------------------------------------------------+
bool IsClosedBySL (const string symbol)
{
  //--- Получим комментарий последней сделки на указанном символе
  string last_comment = LastDealComment (symbol);
  //--- Если в комментарии есть строка "sl"
  if(StringFind (last_comment, "sl", 0) > -1)
    return (true);
  //--- Если нет строки "sl"
  return (false);
}
//+------------------------------------------------------------------+
//| Возвращает комментарий последней сделки на указанном символе     |
//+------------------------------------------------------------------+
string LastDealComment (const string symbol)
{
  int    total_deals  = 0;  // Всего сделок в списке выбранной истории
  string deal_symbol  = ""; // Символ сделки
  string deal_comment = ""; // Комментарий сделки
                            //--- Если история сделок получена
  if(HistorySelect (0, TimeCurrent ()))
  {
    //--- Получим количество сделок в полученном списке
    total_deals = HistoryDealsTotal ();
    //--- Пройдемся по всем сделкам в полученном списке от последней сделки к первой
    for(int i = total_deals - 1; i >= 0; i--)
    {
      //--- Получим комментарий сделки
      deal_comment = HistoryDealGetString (HistoryDealGetTicket (i), DEAL_COMMENT);
      //--- Получим символ сделки
      deal_symbol = HistoryDealGetString (HistoryDealGetTicket (i), DEAL_SYMBOL);
      //--- Если символ сделки и текущий символ равны, остановим цикл
      if(deal_symbol == symbol)
        break;
    }
  }
  //---
  return (deal_comment);
}
 
Andrey Dik:

Je fais ce qui est conseillé.

OK, comment puis-je savoir si la dernière transaction a entraîné la fermeture ou le renversement d'une position ?

Si la position est fermée ou inversée, alors il est logique de vérifier ses données, qui seront nécessaires à la logique du conseiller : volume, fait de fermer sur take ou stop, etc....

Sinon, si le fait de fermer à la prise a été détecté dans la dernière transaction, mais que la position est restée, alors il n'y a aucun sens à vérifier les données sur la dernière position fermée (elle existe toujours).

En général, bien sûr, il est difficile de passer rapidement à la logique du système d'ordre MT5 après le quatre - tant de questions se posent en pensant à la logique du comportement de l'EA, qui dépend des données de la dernière position fermée - dans le quatre, tout est transparent - la position a son propre type, et c'est la dernière - elle est appropriée - prendre les données et les utiliser. Mais ici... couverture, compensation ... et nous avons besoin du même résultat... et alors on commence à penser d'une manière différente...

 
Artyom Trishkin:

OK, alors comment savoir si la dernière transaction a abouti à une clôture ou à un renversement de position ?

1. Si la position est fermée ou inversée, alors il est logique de vérifier ses données, qui seront nécessaires à la logique de l'Expert Advisor : le volume, le fait de fermer sur take ou stop, etc....

Sinon, si le fait de fermer sur le take profit a été détecté dans la dernière position, mais que la position est restée, alors il n'y a aucun sens à vérifier les données sur la dernière position fermée (elle existe toujours).

En général, bien sûr, il est difficile de passer rapidement à la logique du système d'ordres MT5 après le quatre - tant de questions se posent lorsqu'on pense à la logique du comportement du conseiller, qui est lié aux données de la dernière position fermée - dans le quatre, tout est transparent - la position a son propre type, et c'est la dernière - elle correspond, nous prenons les données et les utilisons. Mais ici... couverture, compensation ... et nous avons besoin du même résultat... et puis on commence à penser n'importe comment...

1. Vérifiez le type de transaction, IN, OUT ou IN/OUT.

2. Si une position a été fermée par SL ou TP, elle est déjà fermée, nous n'avons pas besoin de vérifier le type de transaction.

 
Andrey Dik:

1. Vérifiez le type de transaction, IN, OUT ou IN/OUT.

2. Si la position est fermée par le SL ou le TP, elle n'existe plus, elle est fermée, vous n'avez pas besoin de vérifier le type de transaction.

Est-il valable pour les filets ? Ou pour une couverture ? N'est-il pas possible d'avoir plusieurs positions dans une même direction dans un compte de couverture ? Ou s'agit-il d'une position unique, et .... ? C'est quoi "et" ? ... Merde... Je ne sais pas ce que "et" veut dire... Il y a beaucoup de questions, les réponses ne sont pas encore dans ma tête.
 
Artyom Trishkin:
Est-ce vrai pour les filets ? Ou cela vaut-il aussi pour les opérations de couverture ? Ne peut-on pas avoir plusieurs positions dans une même direction dans un compte de couverture ? Ou bien s'agit-il d'une position, et .... ? C'est quoi "et" ? ... Merde... Je ne sais pas ce que "et" veut dire... Beaucoup de questions, pas encore de réponses.

Pour la haie aussi.

Au fil des ans, mon cerveau s'est aiguisé à la compensation. Ordre->Transaction->Position. Il peut y avoir plusieurs transactions dans une position (dans une couverture il n'y a qu'une seule transaction, corrigez-moi si je me trompe), vous pouvez dire ce qui est arrivé à la position par le type de transaction.

Dans une couverture, c'est bien sûr plus facile à comprendre, mais plus difficile à suivre. Bien sûr, il s'agit de mon opinion personnelle.

 
Andrey Dik:

Pour une couverture aussi.

Au fil des ans, mon cerveau s'est aiguisé à la compensation. Ordre->Transaction->Position. Il peut y avoir plusieurs transactions dans une position (dans une couverture il n'y a qu'une seule transaction, corrigez-moi si je me trompe), vous pouvez dire ce qui est arrivé à la position par le type de transaction.

Dans une couverture, c'est bien sûr plus facile à comprendre, mais plus difficile à suivre. IMHO bien sûr.

Je comprends, merci. Je vais trouver une solution.
 
Artyom Trishkin:

Voilà qui est intéressant... J'ai besoin de savoir avec certitude que la dernière position fermée l'a été à la prise de bénéfices.

Y a-t-il un moyen de le savoir avec certitude ?

Lorsque vous trouvez la dernière transaction DEAL_ENTRY_OUT et que vous sélectionnez l'historique complet de la position HistorySelectByPosition dans cette liste, il y a 2 transactions et 2 ordres, ouvrant une position et la fermant. L'ordre sur la base duquel la fermeture a eu lieu contient ORDER_PRICE_OPEN. Ensuite, vous vérifiez le type de position et le type d'ordre qui a été utilisé pour la clôturer. Si le type d'ordre est opposé, cela signifie qu'il s'agit d'une clôture. Par conséquent, le prix de l'ordre est le prix que nous devons rechercher, avec une correction mineure : Si le profit de l'ordre est > 0, alors c'est le prix du TP, s'il est < 0, alors la position a été fermée sur le SL.

Si nous prenons en compte le commentaire de l'ordonnance, nous ne devrions pas nous y fier.

 
Alexey Viktorov:

Lorsque vous trouvez le dernier trade DEAL_ENTRY_OUT et que vous sélectionnez l'historique complet de la position HistorySelectByPosition dans cette liste, il y a, pour les comptes hadge 2 trades et 2 ordres, ouvrant une position et la fermant. L'ordre sur la base duquel la fermeture a eu lieu contient ORDER_PRICE_OPEN. Ensuite, vous vérifiez le type de position et le type d'ordre qui a été utilisé pour la clôturer. Si le type d'ordre est opposé, cela signifie qu'il s'agit d'une clôture. Par conséquent, le prix de l'ordre est le prix que nous devons rechercher, avec une correction mineure : Si le profit de l'ordre est > 0, alors c'est le prix du TP, s'il est < 0, alors la position a été fermée sur le SL.

Si nous nous appuyons sur le commentaire de l'ordonnance, je ne le ferais pas.

Et le SL ? Comment déterminez-vous le bénéfice du chalut fermé SL ?
Raison: