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

 
Tapochun:
Je ne pense pas que vous posiez la question ici. Créez un fil de discussion distinct, joignez-y le code de l'indicateur et espérez que quelqu'un vous aidera. Sans le code... il est peu probable que quelqu'un vous aide.
L'indicateur n'achète pas et ne vend pas).
 
Lors de la rédaction des TdR, j'ai rencontré une situation où je ne comprends pas comment décrire correctement l'algorithme. Pouvez-vous me dire s'il est possible de fermer partiellement une position dans le travail de l'EA ?
 
Nikolay Lampickiy:
Lors de la rédaction des TdR, j'ai rencontré une situation où je ne comprends pas comment décrire correctement l'algorithme. Pouvez-vous nous conseiller sur la possibilité d'une fermeture partielle d'une position dans le travail de l'EA ?
Pour ce faire, dans l'ordre de fermeture d'une position, spécifiez un lot plus petit que le lot de la position (ceci si MT4, dans MT5 vous pouvez ouvrir une position opposée avec un lot plus petit, et ils se chevaucheront à la fin). La position avec le lot restant restera sur le marché.
 
Nikolay Lampickiy:
Lors de la rédaction des TdR, j'ai rencontré une situation où je ne comprends pas comment décrire correctement l'algorithme. Pouvez-vous me dire si une fermeture partielle d'une position est possible dans le travail d'un EA?
Qu'est-ce qui est si compliqué ? Si la position n'est pas divisée de manière égale (par exemple 0,09), fermez-en la plus grande partie (0,05) et déplacez le stop au point mort, puis une autre moitié de la position fermée (0,02) et mettez le put au profit et vice versa jusqu'à ce que la position entière soit fermée ou au point mort. Le pas peut être fixe ou calculé à partir d'une plage quelconque, selon le système de négociation.
 
Vladimir Zubov:
Qu'est-ce qui est si compliqué ? Si la position n'est pas divisée de manière égale (par exemple 0,09), fermez-en la plus grande partie (0,05) et déplacez le stop jusqu'au seuil de rentabilité, puis une autre distance de fermeture et à nouveau la moitié de celle qui reste (0,02) et déplacez le stop jusqu'à la prochaine étape de fermeture dans le positif et ainsi de suite jusqu'à ce que la position entière soit fermée ou atteigne le stop. Le pas peut être fixe ou calculé à partir d'une plage quelconque, selon le système de négociation.

Est-ce que j'ai bien compris ? Le langage de programmation MQL4 permet de formaliser la clôture de la moitié seulement du volume des ordres de marché... comme le lot 10 et fermer 5 lots lorsque le prix atteint un certain niveau.

Ou est-il possible de fermer 1/3 ?

Ou bien, il serait plus facile de mettre en œuvre cette idée dans un EA en plaçant différents ordres. Lorsque le prix atteint un niveau requis, un ordre est fermé et l'autre reste en place de la fermeture partielle du volume d'ordres au marché. Qu'en pensez-vous ?

 
Vitalie Postolache:
Pour ce faire, vous devez spécifier un lot plus petit que le lot de la position dans l'ordre de clôture (ceci si MT4, dans MT5 vous pouvez ouvrir la position opposée avec un lot plus petit, et ils se chevaucheront à la fin). La position avec le lot restant restera sur le marché.
Je ne suis pas satisfait de la position opposée... Je vous remercie de votre réponse.
 
Nikolay Lampickiy:

Est-ce que j'ai bien compris ? Le langage de programmation MQL4 permet de formaliser la clôture de la moitié seulement du volume des ordres de marché... comme le lot 10 et fermer 5 lots lorsque le prix atteint un certain niveau.

Ou est-il possible de fermer 1/3 ?

Ou bien, il serait plus facile de mettre en œuvre cette idée dans un EA en plaçant différents ordres. Lorsque le prix atteint un niveau requis, un ordre est fermé et l'autre reste en place de la fermeture partielle du volume d'ordres au marché. Qu'en pensez-vous ?

Nous pouvons faire les deux. OrderClose vous permet de fermer le volume qui lui est indiqué. https://docs.mql4.com/ru/trading/orderclose

Bien entendu, vous pouvez ouvrir plusieurs ordres avec des niveaux de profit différents. En cas de défaillance de la connexion, il sera encore plus fiable, car les niveaux TP sont stockés sur le serveur et seront exécutés si le prix les croise.

OrderClose - Документация на MQL4
  • docs.mql4.com
OrderClose - Документация на MQL4
 
Vladimir Zubov:

Vous pouvez faire les deux. OrderClose permet de fermer le volume qui lui est indiqué. https://docs.mql4.com/ru/trading/orderclose

Bien entendu, vous pouvez également ouvrir plusieurs ordres avec des niveaux de profit différents. En cas de défaillance de la connexion, cela sera encore plus fiable, car les niveaux TP sont stockés sur le serveur et seront exécutés si le prix les franchit.

Merci pour la réponse))))
 

Bonjour à tous, je suis confronté à un problème, j'aimerais avoir l'avis de professionnels ou d'utilisateurs de MT5 plus expérimentés. J'ai écrit un indicateur et une classe CEventBase, qui permet à l'indicateur de générer des événements. Lors de l'exécution des conseillers experts qui traitent ces événements tôt ou tard, lors de l'exécution en temps réel, je reçois des erreurs : 4001, 4102, 4104. Quand ils commencent à "s'empiler", ils ne cessent pas de le faire) Je joins le code de la fonction Generate, qui est en fait la source de tous ces problèmes. Je serai très heureux d'entendre votre avis...)

Bonne journée à tous !


bool CEventBase::Generate(long _chart_id, int _id_ind, SEventData &_data,
                          const bool _is_custom=true)
  {
   bool is_generated = true;
   // если индекс id события в массиве не верен
   if (_id_ind < 0 || _id_ind >= aEvents.Total())
    {
     Print("Не верно задан индекс ID события");
     return (false);
    }
   // заполняем поля 
   CEvent *event = aEvents.At(_id_ind);
   this._id = (ushort)(CHARTEVENT_CUSTOM+event.id);
   this._data = _data;
   this._data.sparam = event.name; // сохраняем имя события
   
   if(_is_custom)
     {
      ResetLastError();
      is_generated = EventChartCustom(_chart_id, event.id, this._data.lparam,
                                      this._data.dparam, this._data.sparam);
      if(!is_generated && _LastError != 4104)
         {
          Print("is_generated = ", is_generated);
          PrintFormat("%s Error while generating a custom event: %d", __FUNCTION__,_LastError);
          Print( ChartSymbol(_chart_id)," ",PeriodToString(ChartPeriod(_chart_id)), "Ошибка! _chart_id =", _chart_id, " event.id = ", event.id, " data.dparam = " ,this._data.dparam, " data.sparam = ", this._data.sparam);
          
         }
     }
   return is_generated;
  }


 
dariamap:

Bonjour à tous, je suis confronté à un problème, j'aimerais avoir l'avis de professionnels ou d'utilisateurs de MT5 plus expérimentés. J'ai écrit un indicateur et une classe CEventBase, qui permet à l'indicateur de générer des événements. Lors de l'exécution des conseillers experts qui traitent ces événements tôt ou tard, lors de l'exécution en temps réel, je reçois des erreurs : 4001, 4102, 4104. Quand ils commencent à "s'accumuler", ils ne cessent de se produire) Je joins le code de la fonction Generate, qui est en fait la source de tous ces problèmes. Je serai très heureux d'entendre votre opinion à ce sujet ...)

Bonjour à tous !

De toute évidence, la méthode que vous avez présentée est une méthode de transit. L'erreur ne s'y trouve probablement pas. Les données que vous avez présentées n'indiquent pas clairement ce qui se passe. Il peut y avoir plusieurs variantes :

  • Identifiant de carte incorrect (c'est ce que dit l'erreur 4101).
  • Des requêtes trop fréquentes ;
  • Autres paramètres incorrects (identifiants d'événements par exemple).

A en juger par le niveau de code que vous avez écrit, on peut dire que l'erreur peut se trouver n'importe où et n'importe quand.