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

 
ksbr:
Je veux mettre une action (futures) dans MT5 pour tester la mienne, comment ?
Vous ne pouvez pas. Cherchez une maison de courtage avec les contrats à terme.
 
sergeev:
Pas du tout. Cherchez une maison de courtage avec ces contrats à terme.

%))) Il n'y a pas de DC avec ce fuchs)))) Il doit être collé ensemble...

C'est dommage, c'est dommage, et tout avait si bien commencé...

 

Salutations à tous !

J'essaie d'implémenter deux fonctions dans mon EA, la première définit le profit de la dernière transaction, la seconde définit le lot de la dernière transaction.

J'ai cherché sur ce site de A à Z et fait plusieurs fonctions, en suivant les exemples des articles et d'autres EA, mais aucun résultat - les deux fonctions renvoient toujours 0.00.

Cette variante me semble être la plus proche de la variante correcte mais le résultat est toujours 0 :

double LossLastPos(){
// --- определение границ требуемой торговой истории
   datetime end=TimeCurrent();                 // текущее серверное время
   datetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   HistorySelect(start,end);
//--- получим количество ордеров в истории
   int history_orders=HistoryOrdersTotal();
//--- получим тикет ордера из истории, имеющего последний индекс в списке
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
   if(order_ticket>0) // получили в кэш исторический ордер, работаем с ним
     {
      //Получаем значение прибыли последнего ордера
      double  profit = HistoryDealGetDouble(order_ticket,DEAL_PROFIT);
      return(profit);
     }
}

J'essaie d'obtenir la taille du lot de la même manière :

double  volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
      return(volume);

Et rien ne fonctionne, les valeurs sont toujours nulles.

Je viens moi-même de commencer la migration de mql4 vers mql5. L'implémentation de telles fonctions dans mql4 n'était pas très difficile, mais voici une impasse.

Veuillez me conseiller une solution réelle et fonctionnelle.

 
karakos:

...

Veuillez suggérer une solution réelle et fonctionnelle.

Utilisez HistoryDealGetTicket() et HistoryDealsTotal().

Et faites la validation :

   if(HistorySelect(start,end))
     {
      // ...
     }
 

tol64 merci beaucoup ! Tout fonctionne.

Voici une solution qui fonctionne à 100% - la fonction renvoie le profit de la dernière position fermée dans l'historique du terminal :

//+------------------------------------------------------------------+       
//|Функция возвращает профит последней позиции                       |
//+------------------------------------------------------------------+
double ProfitLastPos()
  {
// --- определение границ требуемой торговой истории
   datetime end=TimeCurrent();                 // текущее серверное время
   datetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   if(HistorySelect(start,end))
     {
      //--- получим количество сделок в истории
      int history_orders=HistoryDealsTotal();
      //--- получим тикет сделки из истории, имеющей последний индекс в списке
      ulong order_ticket=HistoryDealGetTicket(history_orders-1);

      if(order_ticket>0) // получили в кэш историческую сделку, работаем с ней
        {
         profit=HistoryDealGetDouble(order_ticket,DEAL_PROFIT);
        }
     }
   return(profit);
  }

Par analogie, nous obtenons la taille du lot de la dernière transaction :

 Volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
 
karakos:

tol64 merci beaucoup ! Tout fonctionne.

...

Et si vous appuyez également sur Ctrl+ dans l'éditeur, vous obtiendrez un code proprement formaté. Particulièrement important avant de télécharger l'exemple sur le forum (meilleure lisibilité). ))
 
tol64:
Si vous appuyez également sur Ctrl+ dans l'éditeur, vous obtiendrez un code proprement formaté. Ceci est particulièrement important avant de télécharger l'exemple sur le forum (meilleure lisibilité). ))
J'ai stylé le code, merci encore !
 

Bonjour, j'ai récemment commencé à apprendre MQL5. J'ai un problème avec la fermeture des positions. En code : if(!m_Trade.PositionClose(_Symbol,100))//--- fermer la position par le symbole actuel. Le résultat est que la position est inversée ! Je serais très reconnaissant d'avoir un indice, comment puis-je fermer une position ?

 
//_____________________________________________________________________________________________________________________________________________
//--------  блок работы с длинной позицией  ---------------------------------------------------------------------------------------------------
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
                          
         if( p_close1 <  buy_stop_level   )// если бар 1 закрылся ниже уровня стоп
         {
          if(!m_Trade.PositionClose(_Symbol,100))//--- закрываем позицию по текущему символу
         {
      //--- сообщим о неудаче
      Print("Метод PositionClose() потерпел неудачу. Код возврата=",m_Trade.ResultRetcode(),
            ". Описание кода: ",m_Trade.ResultRetcodeDescription());
         }
   else
         {
       Print("Метод PositionClose() выполнен успешно. Код возврата=",m_Trade.ResultRetcode(),
            " (",m_Trade.ResultRetcodeDescription(),")");       
          }
    
     
           }          
            }
 

Enregistrement de l'EA après la fermeture de la barre en dessous du niveau de stop. Position longue = 1 lot, position courte = 1 lot)

Raison: