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ミリ秒かかりました。Expert Advisorのロジックも確認する必要がありそうです。
 
Alexey Kozitsyn:
いや、それは面白いアイデアで、注文の実行に時間がかかるほど、その仕事の質は高まる。引用したケースでは、注文の実行と 注文の削除の両方が同じms内で行われました。Expert Advisorのロジックも確認する必要があります。
https://www.mql5.com/ru/forum/16832
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
ФОРТС Отмена ордера в момент его исполнения [что приходит раньше - BookEvent или TradeEvent]
  • www.mql5.com
OnBookEvent срабатывает раньше, чем OnTradeTransAction. - - Категория: автоматические торговые системы
 
Alexey Kozitsyn:
OrderSend()。この場合、何が違うのでしょうか?
"バックストップ "の実施に当たって
 
Михаил:

その方が正確です。

真実味がない。

最後の2つのパラメータ requestと resultには トランザクションタイプTRADE_TRANSACTION_REQUESTの値のみが入力され、トランザクションに関する情報は 変数 transのタイプ パラメータから取得 することができる

 
Alexey Kozitsyn:

真実味がない。

私自身はもちろんトランス.オーダーを書きました。