Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1453

 
Alexey Viktorov #:

Perché si cerca un ordine pendente tra le posizioni?

Grazie, credo di aver capito. Dovevo aprire una posizione al prezzo corrente, ma stavo inserendo ordini pendenti, quindi non venivano inseriti perché avevo specificato il prezzo corrente.

Ho usato

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


ma ho dovuto

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

Non capisco perché ENUM_ORDER_TYPE e non ENUM_POSITION_TYPE in 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 in PositionOpen?

Perché non si può aprire una posizione.

Si invia un ordine di compravendita al server del broker per eseguire un'operazione.

Una posizione viene aperta solo se l'operazione è stata eseguita.

Il fatto che l'ordine sia stato inviato con successo(10008) non garantisce l'esecuzione dell'operazione e quindi l'apertura di una posizione(10009).


Se si invia un ordine di compravendita (ordine) per eseguire un'operazione di compravendita TRADE_ACTION_DEAL, ossia per eseguire una compravendita al prezzo di mercato corrente, qualsiasi codice di ritorno (m_result.retcode) diverso da 10009 indica che la compravendita non è stata eseguita.

Per sicurezza, controllare anche il ticket m_result.deal.

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

Se si invia un ordine di compravendita (ordine) per effettuare un'operazione di compravendita TRADE_ACTION_DEAL, ossia per effettuare una compravendita al prezzo di mercato corrente, qualsiasi codice di ritorno (m_result.retcode) diverso da 10009 indicherà che la compravendita non ha avuto luogo.

Ahimè, non è proprio così. Ho già mostrato qui come ho ottenuto il codice 10012, zero order ticket, ma l'ordine è stato eseguito. Gli MQ non parlano di questo argomento.

Ho scritto una stampella per questo, ma sarà possibile verificarlo solo dopo aver ricevuto nuovamente il codice 10012).

 
JRandomTrader #:

Ahimè, non è proprio così. Ho già mostrato qui come ho ricevuto il codice 10012, zero order ticket, ma l'ordine è stato eseguito. MQ tace su questo argomento.

Ho scritto una stampella per questo, ma sarà possibile verificarlo solo dopo aver ricevuto di nuovo il 10012).

Affari militari. ordinato, ricevuto risposta come compreso. ricevuto risposta come eseguito, ricevuto conferma che hanno eseguito come ordinato))))) Tutto è umano))))))

 
Valeriy Yastremskiy #:

affari militari. ordinato, ha ricevuto una risposta come capito. ricevuto una risposta come eseguito, ha ricevuto la conferma di aver eseguito come ordinato))))) Tutto è umano)))))))))))))))))))))))))))))

E l'ordine successivo può essere dato solo domani. A chi serve uno scambio del genere?

 

signori, ministri!)

Come posso organizzare un controllo su un ordine o una posizione che è stata piazzata o eseguita.

Se viene ricevuto il codice 10008, come posso verificare che l'ordine sia stato inserito nell'elenco degli ordini o delle posizioni?

Per escludere l'eventualità che il codice sia arrivato, ma che la posizione o l'ordine non sia presente.

//-------------------------------------------------------------------+
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 ordine o una posizione emessi o eseguiti.

Se si riceve il codice 10008, come si può verificare che l'ordine sia stato inserito nell'elenco degli ordini o delle posizioni?

Per escludere l'eventualità che il codice sia arrivato ma la posizione o l'ordine non siano presenti

Provare a utilizzare OnTradeTransaction () invece di OnTrade( ).

 

MetaTrader 5 funziona su Windows 7 e 8?

 
pivomoe #:

MetaTrader 5 funziona su Windows 7 e 8?

Funziona, ma è meglio avere un sistema operativo a 64 bit.