Questions des débutants MQL5 MT5 MetaTrader 5 - page 611

 
Vladimir Zubov:

Je ne sais pas, en général je ne ferme pas le navigateur avant d'arriver à l'étape "prêt à vérifier". Essayez de chercher dans votre onglet "mes produits", le brouillon est généralement là, s'il n'y est pas, vous devrez peut-être recommencer depuis le début. Si le nom du produit que vous vouliez publier n'est pas occupé, il est probable que le brouillon n'a pas été enregistré.

Merci ! Je l'ai trouvé !
 
Salutations à tous, chers collègues !
Il était une fois une question sur la possibilité d'enregistrer un tableau d'objets de classe dans un fichier, et j'ai reçu une réponse positive de la communauté. J'ai enfin eu l'occasion de tout vérifier. Et oui, en effet, CELA sauve. Et puis il lit même CELA. Quoi qu'il en soit, FileWriteArray et FileReadArray renvoient tous deux des valeurs correctes en fonction du nombre d'éléments écrits et lus. Cependant, lorsqu'il essaie d'accéder au premier élément du tableau par le biais d'une méthode de classe, le testeur génère l'erreur d'accès au pointeur invalide suivie de l'erreur critique OnTick et se termine. Notez cependant que si vous ne travaillez pas avec un tableau écrit puis lu, mais simplement avec quelque chose qui est créé en mémoire, tout fonctionne. Quel pourrait être le problème ? Quelle est la manière correcte de restaurer un tableau d'objets sauvegardé ?
 
BlackTomcat:
Salutations à tous, chers collègues !
Il était une fois une question sur la possibilité d'enregistrer un tableau d'objets de classe dans un fichier, et j'ai reçu une réponse positive de la communauté. J'ai enfin eu l'occasion de tout vérifier. Et oui, en effet, CELA sauve. Et puis il lit même CELA. Quoi qu'il en soit, FileWriteArray et FileReadArray renvoient tous deux des valeurs correctes en fonction du nombre d'éléments écrits et lus. Cependant, lorsqu'il essaie d'accéder au premier élément du tableau par le biais d'une méthode de classe, le testeur génère l'erreur d'accès au pointeur invalide suivie de l'erreur critique OnTick et se termine. Notez cependant que si vous ne travaillez pas avec un tableau écrit puis lu, mais simplement avec quelque chose qui est créé en mémoire, tout fonctionne. Quel pourrait être le problème ? Comment restaurer correctement un tableau d'objets sauvegardé ?
Veuillez m'envoyer le code !
 
Bonjour, je connais assez bien MT4, mais MT5 est un débutant. Je n'ai pas trouvé cette commande dans la liste des types d'opérations sur https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions. SeulementCLOSE_BY et j'ai juste besoin de le fermer.
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexander Kharlamov:
Bonjour, je connais assez bien MT4, mais MT5 est un nouveau venu. Je n'ai pas trouvé de commande dans la liste des types d'opérations sur https://www.mql5.com/ru/docs/constants/tradingconstants/enum_trade_request_actions. La seule commande que j'ai estCLOSE_BY, j'ai juste besoin de fermer l'ordre.

dans mt5 ce n'est pas si simple

Fermer signifie ouvrir une transaction opposée avec le même lot.

c'est-à-dire l'opérationTRADE_ACTION_DEAL

 
Vladislav Andruschenko:

dans mt5 ce n'est pas si simple

Fermer signifie ouvrir une transaction opposée avec le même lot.

c'est-à-dire l'opérationTRADE_ACTION_DEAL

Merci pour la réponse, mais je ne comprends pas bien... J'ai ouvert une transaction opposée et je dois ensuite effectuer uneTRADE_ACTION_CLOSE_BY entre les deux ?
 
Alexander Kharlamov:
Merci pour la réponse, mais je ne la comprends pas encore très bien. Dois-je ouvrir une position opposée et ensuiteTRADE_ACTION_CLOSE_BY entre les deux ?

Dans MT5, il existe le concept de POSITION. Vous pouvez fermer une position. Si vous voulez fermer complètement une position, utilisez la bibliothèque standard. Pour un compte de compensation, un exemple de clôture d'une position :

//+------------------------------------------------------------------+
//|                                                 PositionClos.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- подключение стандартной библиотеки
#include <Trade\Trade.mqh>
//--- объект класса CTrade
CTrade trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- закрытие позицию по текущему символу
   trade.PositionClose(Symbol());
  }
//+------------------------------------------------------------------+
Dossiers :
 
Karputov Vladimir:

Dans MT5, il existe le concept de POSITION. Vous pouvez fermer une position. Si vous voulez fermer complètement une position, utilisez la bibliothèque standard. Pour un compte de compensation, un exemple de la manière de clôturer une position :

Je crois que je commence à comprendre ! ) La position changera à chaque exécution d'un ordre pour cet instrument, n'est-ce pas ? La question qui se pose maintenant est la suivante: "L'identifiant du poste est un numéro unique qui est attribué à chaque poste nouvellement ouvert et qui ne change pas tout au long de sa vie. Il correspond au ticket de l'ordre avec lequel la position a été ouverte".

Et si des ordres ultérieurs modifient la position, son nombre reste-t-il égal au premier ordre qui l'a créée ?
 
Alexander Kharlamov:

1. Je crois que je commence à comprendre ! ) La position changera à chaque exécution d'ordre pour ce symbole, n'est-ce pas ?
2. L'identifiant du poste est un numéro unique, qui est attribué à chaque poste nouvellement ouvert et ne change pas pendant toute sa durée de vie. Il correspond au ticket de l'ordre avec lequel la position a été ouverte".

Et si des ordres ultérieurs modifient la position, son nombre reste-t-il égal au premier ordre qui l'a créée ?

1. Oui, c'est vrai. L'exécution d'un ordre génère une transaction. Une transaction peut :

  • créer un poste
  • modifier le volume d'une position
  • fermer un poste
2. Qu'est-ce qui pourrait être mieux que la pratique ? :) Ouvrir une position (manuellement) sur n'importe quel graphique. Exécuter le script

//+------------------------------------------------------------------+
//|                                           PositionGetInteger.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   for(int i=0;i<PositionsTotal();i++)
     {
      //--- проверим наличие позиции и выведем время её изменения 
      string pos_symbol=PositionGetSymbol((uint)i);
      if(pos_symbol!=NULL)
        {
         //--- получим идентификатор позиции для дальнейшей работы с ней 
         ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER);
         Print(pos_symbol," postion #",position_ID);
         //--- получим время образования позиции в миллисекундах с 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));
         //--- получим время последнего изменения позиции в секундах с 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));
         //--- получим время последнего изменения позиции в миллисекундах с 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));
        }
     }
//--- 
  }
//+------------------------------------------------------------------+

- faites attention à la ligne (regardez l'onglet "Experts" du terminal) :

2016.08.29 14:51:24.435 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

Augmentez le volume, exécutez à nouveau le script - comparez à nouveau la ligne

2016.08.29 14:51:32.872 PositionGetInteger (EURUSD,M1)  EURUSD postion #95873997

Comme vous pouvez le constater, la propriété de position (POSITION_IDENTIFIER) ne change pas si la position n'est pas inversée.

Dossiers :
 
POSIITION_IDENTIFIER change lorsque la position est inversée.