エラー、バグ、質問 - ページ 1739

 

SBで注文を修正しても取引所では通用しないという理解でいいのでしょうか?

//+------------------------------------------------------------------+
//| Modify specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderModify(const ulong ticket,const double price,const double sl,const double tp,
                         const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action      =TRADE_ACTION_MODIFY;
   m_request.magic       =m_magic;
   m_request.order       =ticket;
   m_request.price       =price;
   m_request.stoplimit   =stoplimit;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

設定されていない。

 
全取引サーバーのSB
//+------------------------------------------------------------------+
//| Get the property value "ORDER_TYPE_FILLING"                      |
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING COrderInfo::TypeFilling(void) const
  {
   return((ENUM_ORDER_TYPE_FILLING)OrderGetInteger(ORDER_TYPE_FILLING));
  }

テスターでは常にENUM_ORDER_TYPE_FILLING::ORDER_FILLING_RETURN が返されます。

fxsaber:

フィリングがセットされていない。

そのため、COrderInfo::TypeFilling()を使ってOrderModifyでフィリングを設定すると、RoboForexEU-MetaTrader 5では[Unsupported filling mode] という論理エラーが発生することになるのです。しかし、MetaQuotes-Demoではこのエラーは発生しません。開発者のサーバーの設定が間違っているのでしょうか?


 
fxsaber:

SBで注文を修正しても取引所では通用しないという理解でいいのでしょうか?

//+------------------------------------------------------------------+
//| Modify specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderModify(const ulong ticket,const double price,const double sl,const double tp,
                         const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action      =TRADE_ACTION_MODIFY;
   m_request.magic       =m_magic;
   m_request.order       =ticket;
   m_request.price       =price;
   m_request.stoplimit   =stoplimit;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

それはない。

慌てないでください。

class CTrade : public CObject
  {
protected:
   MqlTradeRequest   m_request;         // request data
   MqlTradeResult    m_result;          // result data
   MqlTradeCheckResult m_check_result;  // result check data
   bool              m_async_mode;      // trade mode
   ulong             m_magic;           // expert magic number
   ulong             m_deviation;       // deviation default
   ENUM_ORDER_TYPE_FILLING m_type_filling;
   ENUM_ACCOUNT_MARGIN_MODE m_margin_mode;
   //---
   ENUM_LOG_LEVELS   m_log_level;

public:
 
Alexey Kozitsyn:

慌てないで!

//+------------------------------------------------------------------+
//| Modify specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderModify(const ulong ticket,const double price,const double sl,const double tp,
                         const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();

//--- setting request
   m_request.action      =TRADE_ACTION_MODIFY;
   m_request.magic       =m_magic;
   m_request.order       =ticket;
   m_request.price       =price;
   m_request.stoplimit   =stoplimit;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }
 
fxsaber:
//+------------------------------------------------------------------+
//| Modify specified pending order                                   |
//+------------------------------------------------------------------+
bool CTrade::OrderModify(const ulong ticket,const double price,const double sl,const double tp,
                         const ENUM_ORDER_TYPE_TIME type_time,const datetime expiration,const double stoplimit)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- clean
   ClearStructures();

//--- setting request
   m_request.action      =TRADE_ACTION_MODIFY;
   m_request.magic       =m_magic;
   m_request.order       =ticket;
   m_request.price       =price;
   m_request.stoplimit   =stoplimit;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.type_time   =type_time;
   m_request.expiration  =expiration;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

なぜ、塗りつぶしの種類を指定するのですか?

ドキュメントより

ストップロスやテイクプロフィットのレベルを変更するための取引注文。4 (jamb:))のフィールドを指定する必要がある。

  • アクション
  • 記号
  • スラム
  • ティーピー
  • 位置
 
Alexey Kozitsyn:

ちょっと待って、なぜモディファイ時に塗りつぶしの種類をまったく指定しないのですか?

ドキュメントより

すべてを鵜呑みにしてはいけない。指定しなければならない(MUST)。そうでない場合は、動作しません。

SBが使えない。しかし、バグを確認するために、取引所でのOrderModifyを試すことができます。

 
fxsaber:

書かれていることをすべて信じてはいけない。指定する必要があります。そうでないと、うまくいきません。

全く同感ですが

SBの使い方がわからない。しかし、取引所でのOrderModifyを試してみて、バグを確認することができます。

でも、MQはドキュメントに例まで追加して......。そこには表示されていないのですが...。

また、私が書いたExpert Advisorが あり、これは取引所で動作し、このようなコードの一部を使用しています。

         //--- Модифицируем ордер
         trade.OrderModify( order.Ticket(), order.PriceOpen(), newSl, newTp, order.TypeTime(), 0 );
 
Alexey Kozitsyn:

でも、MQはドキュメントに例題まで追加して......。示していない...

違うよ、みんな。ドコモとSBの両方を是正しなければならない。

アレクセイ・コジツィン

また、私が書いた 取引所で動作するEAで、そのようなコードの一部を使用しているものがあります。

         //--- Модифицируем ордер
         trade.OrderModify( order.Ticket(), order.PriceOpen(), newSl, newTp, order.TypeTime(), 0 );

テスターでは?

 
fxsaber:
違うよ、みんな。ドコモとSBの両方を修正する必要があります。
まず取引所での注文を変更してみて、それから話すようにします。
 
fxsaber:

違うよ、みんな。ドコモとSBの両方を修正する必要があります。

テスターでは?

ワラントを装着した状態で動作済み。テスターでレースをしなかった。