FORTS: OnTradeTransaction() 返回代码 - 页 7

 
Михаил:

问题是,当一个订单被执行时,你并不控制它的执行,因此你不会阻止OnTick()或OnBookEvent()。

你需要在OnTradeTransaction()中处理交易事件,以快速控制正在执行的订单

我将很快发布如何做的代码。

嗯,我得考虑一下,谢谢!
 
Alexey Kozitsyn:
咳咳。我得考虑一下,谢谢!
#property copyright "Copyright 2015, Mikalas"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
bool is_busy;
//
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  is_busy = false;
  return( INIT_SUCCEEDED ); 
}
//----------------------------
void OnBookEvent( const string &a_symbol ) 
{
  if ( ( a_symbol == _Symbol ) && ( !is_busy ) )
  {
    //Работаем дальше
  }
}  
//------------
void OnTradeTransaction( const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result )
{
  switch( trans.type )
  {
    case TRADE_TRANSACTION_DEAL_ADD: if ( trans.order_state == ORDER_STATE_STARTED )
                                     {
                                       is_busy = true;
                                       //Обнуляем билет этого ордера, если одер залился полностью
                                       is_busy = false;
                                     }
                                     break; 
                                          
  }
}  
 

或者说。

#property copyright "Copyright 2015, Mikalas"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
bool is_busy;
ulong order_ticket;
//
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  is_busy = false;
  return( INIT_SUCCEEDED ); 
}
//----------------------------
void OnBookEvent( const string &a_symbol ) 
{
  if ( ( a_symbol == _Symbol ) && ( !is_busy ) )
  {
    //Работаем дальше
  }
}  
//------------
void OnTradeTransaction( const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result )
{
  switch( trans.type )
  {
    case TRADE_TRANSACTION_DEAL_ADD: if ( trans.order_state == ORDER_STATE_STARTED )
                                     {
                                       if ( result.order == order_ticket )
                                       { 
                                         is_busy = true;
                                         //Обнуляем билет этого ордера, если одер залился полностью
                                         is_busy = false;
                                       }  
                                     }
                                     break; 
                                          
  }
}
 
Михаил:
我明白了,但有人怀疑这种结构会阻止OnBookEvent()。换玻璃事件毕竟可以成串地进行。我会去看看的,再次感谢。
 
Alexey Kozitsyn:
我明白了,但有人怀疑这种结构会阻止OnBookEvent()。换玻璃的事件毕竟可以成串地进行。我会检查的,再次感谢。
有任何疑问--不要使用提示,但我有和你一样的情况,直到我把一个 "道具"。
 
Михаил:
有任何疑问--不要使用建议,但我有和你一样的情况,直到我把一个 "后盾 "放在那里。
不,这是一个有趣的想法,订单执行的时间越长,效果就越好。在我的案例中,订单的执行 和删除都花了1毫秒。我们也要检查专家顾问的逻辑。
 
Alexey Kozitsyn:
不,这是一个有趣的想法,一个订单执行的时间越长,其工作质量就越好。在我引用的案例中,订单的执行 和订单的删除都发生在同一个ms内。我们还应该检查专家顾问的逻辑。
https://www.mql5.com/ru/forum/16832
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
  • www.mql5.com
OnBookEvent срабатывает раньше, чем OnTradeTransAction. - - Категория: автоматические торговые системы
 
Alexey Kozitsyn:
OrderSend()。在这种情况下有什么区别?
在实施 "支持 "方面
 
Михаил:

这句话更准确。

不是更真实。

最后两个参数 requestresult 只为交易类型TRADE_TRANSACTION_REQUEST填写数值,关于交易的信息可以从 trans 变量的 类型 参数中获得

 
Alexey Kozitsyn:

不是更真实。

我已经把自己写下来了,当然是反式的。