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

 
Alexey Viktorov #:

Pourquoi cherchez-vous un ordre en attente parmi les positions ?

Merci, je crois que j'ai compris. Je devais ouvrir une position au prix actuel, mais je plaçais des ordres en attente, donc ils n'étaient pas placés parce que j'avais spécifié le prix actuel.

J'ai utilisé

   ENUM_ORDER_TYPE order_type= position_buff[i].type==0 ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;


mais j'ai dû

 ENUM_POSITION_TYPE order_type= position_buff[i].type==0 ? POSITION_TYPE_BUY : POSITION_TYPE_SELL;
 

Je ne comprends pas pourquoi ENUM_ORDER_TYPE et non ENUM_POSITION_TYPE dans PositionOpen ?

//+------------------------------------------------------------------+
//| Open position                                                    |
//+------------------------------------------------------------------+
bool CTrade::PositionOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume,
                          const double price,const double sl,const double tp,const string comment)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- check
   if(order_type!=ORDER_TYPE_BUY && order_type!=ORDER_TYPE_SELL)
     {
      m_result.retcode=TRADE_RETCODE_INVALID;
      m_result.comment="Invalid order type";
      return(false);
     }
//--- setting request
   m_request.action   =TRADE_ACTION_DEAL;
   m_request.symbol   =symbol;
   m_request.magic    =m_magic;
   m_request.volume   =volume;
   m_request.type     =order_type;
   m_request.price    =price;
   m_request.sl       =sl;
   m_request.tp       =tp;
   m_request.deviation=m_deviation;
//--- check order type
   if(!OrderTypeCheck(symbol))
      return(false);
//--- check filling
   if(!FillingCheck(symbol))
      return(false);
   m_request.comment=comment;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }
 
Mikhail Toptunov ENUM_POSITION_TYPE dans PositionOpen ?

Parce que vous ne pouvez pas ouvrir une position.

Vous envoyez un ordre au serveur du courtier pour exécuter une transaction.

Une position n'est ouverte que si la transaction a été exécutée.

Le fait que l'ordre ait été envoyé avec succès(10008) ne garantit pas qu'une transaction a été exécutée et qu'une position est donc ouverte(10009).


Si vous envoyez un ordre de transaction (order) pour exécuter une opération TRADE_ACTION_DEAL - c'est-à-dire pour exécuter une transaction au prix actuel du marché, tout code de retour (m_result.retcode) autre que 10009 indiquera que la transaction n'a pas été exécutée.

Au cas où, vérifiez également le ticket m_result.deal.

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
  • www.mql5.com
Коды возврата торгового сервера - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksandr Slavskii #:

Si vous envoyez un ordre de transaction (ordre) pour effectuer une opération TRADE_ACTION_DEAL - c'est-à-dire pour effectuer une transaction au prix actuel du marché, tout code de retour (m_result.retcode) autre que 10009 indiquera que la transaction n'a pas eu lieu.

Hélas, ce n'est pas tout à fait le cas. J'ai déjà montré ici comment j'ai obtenu le code 10012, zéro ticket d'ordre, mais l'ordre a été exécuté. Les MQ sont muets à ce sujet.

J'ai écrit une béquille pour cela, mais il ne sera possible de la vérifier qu'après avoir reçu à nouveau le code 10012).

 
JRandomTrader #:

Hélas, ce n'est pas tout à fait le cas. J'ai déjà montré ici comment j'ai reçu le code 10012, zéro ticket de commande, mais la commande a été exécutée. Le MQ ne dit rien à ce sujet.

J'ai écrit une béquille à ce sujet, mais il ne sera possible de la vérifier qu'après avoir reçu à nouveau le code 10012).

Affaires militaires. commandé, reçu une réponse comme compris. reçu une réponse comme exécuté, reçu la confirmation qu'ils ont exécuté comme commandé))))) Tout est humain))))))

 
Valeriy Yastremskiy #:

affaires militaires. commandé, reçu une réponse comme compris. reçu une réponse comme exécuté, reçu la confirmation qu'ils ont exécuté comme commandé))))) Tout est humain)))))))))))))))))))))))))))))

Et l'ordre suivant ne peut être donné que demain. Qui a besoin d'un tel commerce ?

 

messieurs, messieurs les ministres)

Comment puis-je organiser le contrôle d'un ordre ou d'une position qui a été placé(e) ou exécuté (e) ?

Si le code 10008 est reçu, comment puis-je vérifier que l'ordre est placé dans la liste des ordres ou des positions ?

Afin d'exclure la possibilité que le code soit arrivé, mais que la position ou l'ordre ne soit pas là.

//-------------------------------------------------------------------+
void OnTrade()
  {
//--- Фиксируем если позиция открыта
   for(int i=0; i<ArraySize(position_buff); i++)
      if(position_buff[i].timeOp>1)
         if(!match_open_orders(position_buff[i].MagicNumber,position_buff[i].type,position_buff[i].comment)) // проверяю есть ли позиция
           {
            position_buff[i].timeOp= 0;     // Фиксировать время
            Print("Метод OnTrade() по рынку не выполнен. Код возврата=",m_trade.ResultRetcode(),
                  " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(position_buff[i].lot));//
           }
         else
            Print("Метод OnTrade() по рынку выполнен успешно. Код возврата=",m_trade.ResultRetcode(),
                  " (",m_trade.ResultRetcodeDescription(),")"+position_buff[i].comment+" lot "+DoubleToString(position_buff[i].lot));//

  }
//--- Соответствие открытых ордеров ---------------------------------+
bool match_open_orders(long magic,int type,string comment)
  {
//---
   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i))
        {
         long f= m_position.Magic();
         if(m_position.Comment()==comment)
            if(m_position.Type()==type)
               if(m_position.Magic()==magic)
                  return(true);
        }
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i))
        {
         long f= m_position.Magic();
         if(m_position.Comment()==comment)
            if(m_position.Type()==type)
               if(m_position.Magic()==magic)
                  return(true);
        }
   return(false);
  }
 
Mikhail Toptunov ordre ou d'une position émis ou exécuté.

Si le code 10008 est reçu, comment puis-je vérifier que cet ordre a bien été placé dans la liste des ordres ou des positions ?

Pour exclure l'option selon laquelle le code est arrivé mais que la position ou l'ordre n'existe pas

Essayez d'utiliser OnTradeTransaction () au lieu de OnTrade( ).

 

MetaTrader 5 fonctionne-t-il sous Windows 7,8 ?

 
pivomoe #:

MetaTrader 5 fonctionne-t-il sous Windows 7,8 ?

Il fonctionne, mais il est préférable d'avoir un système d'exploitation 64 bits.