Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1453

 
Alexey Viktorov #:

Warum suchen Sie unter den Positionen nach einem schwebenden Auftrag?

Danke, ich glaube, ich habe es herausgefunden. Ich musste eine Position zum aktuellen Kurs eröffnen, aber ich habe Pending Orders platziert, die nicht platziert wurden, weil ich den aktuellen Kurs angegeben habe.

Ich habe

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


aber ich musste

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

Ich verstehe nicht, warum ENUM_ORDER_TYPE und nicht 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 ?

Weil Sie keine Position eröffnen können.

Sie senden einen Handelsauftrag an den Server des Brokers, um einen Handel auszuführen.

Eine Position wird erst dann eröffnet, wenn der Handel ausgeführt wurde.

Die Tatsache, dass der Auftrag erfolgreich gesendet wurde(10008), garantiert nicht, dass ein Geschäft ausgeführt und somit eine Position eröffnet wurde(10009).


Wenn Sie einen Handelsauftrag (Order) senden, um eine Handelsoperation TRADE_ACTION_DEAL auszuführen - d.h. um einen Handel zum aktuellen Marktpreis auszuführen, zeigt jeder Returncode (m_result.retcode) außer 10009 an, dass der Handel nicht ausgeführt wurde.

Prüfen Sie vorsichtshalber auch das Ticket m_result.deal.

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

Wenn Sie einen Handelsauftrag (Order) senden, um eine Handelsoperation TRADE_ACTION_DEAL durchzuführen - d.h., um einen Handel zum aktuellen Marktpreis durchzuführen -, dann zeigt ein anderer Rückgabecode (m_result.retcode) als 10009 an, dass der Handel nicht stattgefunden hat.

Leider ist das nicht ganz so. Ich habe hier bereits gezeigt, wie ich den Code 10012, Null Order Ticket, erhalten habe, aber die Order wurde ausgeführt. Die MQs schweigen zu diesem Thema.

Ich habe eine Krücke dafür geschrieben, aber es wird erst möglich sein, dies zu überprüfen, wenn ich wieder 10012 erhalten habe).

 
JRandomTrader #:

Leider nicht ganz so. Ich habe hier bereits gezeigt, wie ich den Code 10012, ein Null-Bestellschein, erhalten habe, aber der Auftrag wurde ausgeführt. MQ schweigt zu diesem Thema.

Ich habe eine Krücke dafür geschrieben, aber es wird erst möglich sein, dies zu überprüfen, nachdem ich 10012 erneut erhalten habe).

Militärgeschäft. bestellt, Antwort erhalten, wie verstanden. Antwort erhalten, wie ausgeführt, Bestätigung erhalten, dass sie wie bestellt ausgeführt))))) Alles ist menschlich))))))

 
Valeriy Yastremskiy #:

militärisches Geschäft. bestellt, eine Antwort erhalten, wie verstanden. eine Antwort erhalten, wie ausgeführt, eine Bestätigung erhalten, dass sie wie bestellt ausgeführt))))) Alles ist menschlich)))))))))))))))))))))))))))))

Und der nächste Auftrag kann erst morgen erteilt werden. Wer braucht einen solchen Handel?

 

meine Herren Minister!)

Wie kann ich eine Kontrolle über einen erteilten oder ausgeführten Auftrag oder eine Position organisieren.

Wenn ich den Code 10008 erhalte, wie kann ich dann weiter verfolgen, dass der Auftrag in der Liste der Aufträge oder Positionen platziert ist?

Um die Möglichkeit auszuschließen, dass der Code kam, aber die Position oder der Auftrag nicht vorhanden ist.

//-------------------------------------------------------------------+
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 ausgeführten Auftrags oder einer Position?

Wenn der Code 10008 empfangen wird, wie kann ich dann weiter verfolgen, dass genau dieser Auftrag in der Liste der Aufträge oder Positionen platziert ist?

Um die Möglichkeit auszuschließen, dass der Code kam, aber die Position oder der Auftrag nicht vorhanden ist

Versuchen Sie, OnTradeTransaction () anstelle von OnTrade( ) zu verwenden.

 

Funktioniert MetaTrader 5 unter Windows 7 und 8?

 
pivomoe #:

Funktioniert MetaTrader 5 unter Windows 7 und 8?

Es funktioniert, aber es ist besser, ein 64-Bit-Betriebssystem zu haben.