초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1453

 
Alexey Viktorov #:

포지션 중 지정가 주문을 찾는 이유는 무엇인가요?

감사합니다, 알아낸 것 같습니다. 현재 가격으로 포지션을 열어야 하는데 지정가 주문을 하고 있었기 때문에 현재 가격을 지정했기 때문에 주문이 체결되지 않았습니다.

나는

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


를 사용했지만

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

PositionOpen에서 ENUM_POSITION_TYPE이 아닌 ENUM_ORDER_TYPE을 사용하는 이유를 이해할 수 없나요?

//+------------------------------------------------------------------+
//| 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이 아닌 ENUM_ORDER_TYPE을 사용하는 이유를 이해할 수 없나요?

포지션을 개설할 수 없기 때문입니다.

거래를 체결하려면 브로커 서버로 거래 주문을 보내야 합니다.

포지션은 거래가 체결된 경우에만 개설됩니다.

주문이 성공적으로 전송되었다는 사실(10008) 이 거래가 체결되어 포지션이 개설되었다는 것을 보장하지는 않습니다(10009).


거래 주문(주문)을 전송하여 TRADE_ACTION_DEAL 즉, 현재 시장가로 거래를 체결하는 경우 10009 이외의 반환 코드(m_result.retcode)는 거래가 체결되지 않았음을 나타냅니다.

만약을 대비해 m_result.deal 티켓도 확인하시기 바랍니다.

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

거래 주문(주문)을 보내 TRADE_ACTION_DEAL 즉, 현재 시장가로 거래하는 경우 10009가 아닌 반환 코드(m_result.retcode)는 거래가 체결되지 않았음을 나타냅니다.

아아, 그렇지 않습니다. 주문 티켓이 0인 10012 코드를 받았지만 주문이 체결된 방법을 이미 여기에서 보여드렸습니다. MQ는이 문제에 대해 침묵합니다.

나는 그것에 대한 목발을 썼지 만 10012를 다시받은 후에야 확인할 수 있습니다 ).

 
JRandomTrader #:

아아, 그렇지 않습니다. 이미 여기에 코드 10012, 제로 주문 티켓을 받았지만 주문이 실행 된 방법을 보여 드렸습니다. MQ는 이 문제에 대해 침묵하고 있습니다.

나는 그것에 대한 목발을 썼지 만 10012를 다시받은 후에야 확인할 수있을 것입니다 ).

군사 사업. 주문, 이해 한대로 답변을 받았습니다. 실행 된 것으로 답변을 받았으며 주문한대로 실행되었다는 확인을 받았습니다))))) 모든 것이 인간입니다))))))

 
Valeriy Yastremskiy #:

군 사업. 주문, 이해한대로 답변을 받았습니다. 실행된대로 답변을 받았습니다. 주문한대로 실행되었다는 확인을 받았습니다))))) 모든 것은 인간이다)))))))))))))))))))))))))))))

그리고 다음 명령은 내일 만 주어질 수 있습니다. 누가 그런 거래가 필요합니까?

 

여러분, 장관님들!)

주문 또는 체결된 포지션을 확인하려면 어떻게 해야 하나요?

코드 10008이 수신된 경우 주문 또는 포지션 목록에서 주문이 체결되었는지 확인하려면 어떻게 해야 하나요?

코드가 왔지만 포지션 또는 주문이 없는 옵션을 제외하기 위해서입니다.

//-------------------------------------------------------------------+
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 실행된 주문 또는 포지션에 대한 확인을 구성하는 방법.

코드 10008이 수신되면 주문 또는 포지션 목록에서 해당 주문이 정확히 체결되었는지 어떻게 더 추적할 수 있나요?

코드가 왔지만 포지션 또는 주문이 없는 경우 제외하려면 다음과 같이 하세요.

온트레이드( ) 대신 온트레이드트랜스잭션 ()을 사용해 보세요.

 

메타트레이더 5는 Windows 7,8에서 작동하나요?

 
pivomoe #:

메타트레이더 5는 Windows 7,8에서 작동하나요?

작동하지만 64비트 OS를 사용하는 것이 좋습니다.

사유: