初心者の方からの質問 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 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)は取引が行われなかったことを示します。

しかし、そうではない。コード10012、ゼロ注文チケット、しかし注文は約定した。MQはこの件について沈黙している。

私はそのための松葉杖を書いたが、それを確認できるのは10012を再び受け取った後である)。

 
JRandomTrader #:

残念ながら、そうではない。コード10012、ゼロの注文券を受け取ったが、注文は実行されたことはすでにここで紹介した。MQはこの件について沈黙している。

そのための松葉杖を書いたのだが、それを確認できるのは、また10012を受け取ってからである。)

軍需産業。注文して、了解の返事が来た。)何事も人間である))))

 
Valeriy Yastremskiy #:

military business. ordered, received an answer as understood. received an answer as executed, received confirmation that they executed as ordered)))))ー全てはー人間である)))))))

そして、次の注文は明日しか出せない。誰がそんなトレードを必要とするのか?

 

紳士諸君、大臣諸君!)

発注済みまたは約定済みの注文や ポジションを確認するにはどうすればよいですか?

コード 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 を受信した場合、その注文が注文またはポジションのリストに掲載されていることをさらに追跡するにはどうすればよいですか?

コードが来たが、ポジションや注文が存在しないという選択肢を除外するには。

OnTrade()の代わりにOnTradeTransaction()を使用してみてください。

 

MetaTrader 5はWindows 7,8で動作しますか?

 
pivomoe #:

MetaTrader 5はWindows 7,8で動作しますか?

動作しますが、64ビットOSがあった方が良いでしょう。

理由: