記事"MQL5 クックブック:BookEvent の処理"についてのディスカッション - ページ 2

 
denkir:
ほとんどの場合、タンブラーは必要ありませんが、市場取引ハンドラーは必要です。
ありがとうございました!
 
ご指摘の記事を 読みました。確かに有用なものですが、私が質問したのは、トレーダーが自分の端末から発注した注文ではなく、他の市場参加者の注文に対するアクションを読む可能性についてです。つまり、私が書いたフィルターは、現在の市場操作に適用されるべきです。MetaTraderはそのような情報を提供していますか?スタックイベントハンドラーにそのような可能性は見当たりません。
Рецепты MQL5 - обработка события TradeTransaction
Рецепты MQL5 - обработка события TradeTransaction
  • 2014.09.08
  • Dennis Kirichenko
  • www.mql5.com
В статье описываются возможности языка MQL5 с точки зрения событийно-ориентированного программирования. Преимущество данного подхода состоит в том, что программа может получать информацию о поэтапном выполнении торговой операции. Приводится пример того, как с помощью обработчика события TradeTransaction можно получать и обрабатывать информацию о совершаемых торговых действиях. Думаю, что такой подход можно смело применять для целей копирования торговых сделок с терминала на терминал.
 
Rubick:
...しかし、私の質問では、トレーダーが自分のターミナルから発注した注文ではなく、他の市場参加者の注文のアクションを読む可能性を意味しました。つまり、私が書いたフィルターは、現在の市場操作に適用されるべきです。MetaTraderはそのような情報を提供していますか?スタックイベントハンドラーにそのような可能性は見当たりませんでした。
スタックには、現在市場に出ているすべての指値注文が表示されます。現在の市場操作」とはどういう意味ですか?
 
denkir:
スタックには、現在市場に出ているすべての指値注文が表示されます。現在の市場操作」とはどういう意味ですか?

私の説明がわかりにくかったら申し訳ありません。もう少し詳しく説明させてください。ENUM_BOOK_TYPEには、スタックにリストされている注文は4種類しかありません。それらは限定注文と成行注文の2種類に分けられる。さて、私がこの取引をどのように理解しているかをお話ししましょう。ここで私が疑問に思っていることを警告しておきますので、もし間違った理解をしていたら、訂正してください。つまり、こうだ。ここで考えられるバリエーションには2つのグループがある。

  1. 限定注文と成行注文が出会い、取引-ティック-が発生する場合。または、2つの成行注文が出会い、取引 - Tick - が発生した場合。
  2. 2つの限定的なビッドが出会い、そのうちの最後の1つが取引につながる場合 - Tick。

私が考えている作業は、取引を2つのカテゴリーに分けることである。1つ目は指値注文によるもの、2つ目は成行注文によるものである。これが何のためなのかは、内密にお願いします。このようなフィルターの実装を1Cで見たことがあります!それを見たとき、私も非常に驚いた。でも、そのアイデアは気に入った。そして今、私が理解しているように、OnTickハンドラをOnBookEventハンドラとドッキングさせる必要があります。どうすればいいのか、全くわからないので、皆さんの力を貸してください。

 
外為市場でブッキングイベントを作成し、未決済の注文を 確認することは可能ですか?もちろん、単一の流動性プロバイダーに対してです。
 
BlackBart:
外為市場でブッキングイベントを作成し、未決済の注文を 確認することは可能ですか?当然ながら、単一の流動性プロバイダーの場合です。
これらの情報を提供するブローカーが必要です。
 

「全売り注文のうち、#6注文が価格7700ルーブル、数量1011ロットで最大の数量を持っていたことは明らかである。39番の注文は、価格が7653ルーブル、数量が534ロットで、すべての買い注文の中で最大の数量であった。"

6番でも39番でもない。これらはレベルであり、以下の方法でアクセスできる。

last_bookArray[6]

または

last_bookArray[39]

MqlBookArrayは、[0]から[ArraySize(bookArray)/2-1]までの売り注文と、[ArraySize(bookArray)/2]から[ArraySize(bookArray)-1]までの買い注文で構成される。私の知る限り、書籍には2n個のレベルがあります。そして、私が間違っていなければ、レベルはインデックス 0 (ゼロ) から始まるので、数学的モード (出来高が最も多く、売りオファーの頻度が最も高い) のインデックスは 5 (出来高 1011、レベル/価格 7700) であり、買いオファーのモードは 38 (出来高 534、レベル/価格 7653) です。

買いオファーはサポートと なる。そして売りはレジスタンスと なる。

どうすればレベル数を 増やすことができるのかがわかればいいのだが......。

 
こんにちは、Denis ;

あなたのインディケータBookEventProcessor2.mq5.を使おうとしましたが、mql5 meta Editorでコンパイルしようとすると、以下のエラーが出ます。また、売りの指値注文と買いの指値注文を同時に別の色で入れることができるかどうか教えてください。

よろしくお願いします、

マイケル
ファイル:
 
mzapata6724:
こんにちは、デニス;

あなたのインディケータBookEventProcessor2.mq5.を使おうとしましたが、mql5 meta Editorでコンパイルしようとすると、以下のエラーが出ます。また、売りの指値注文と買いの指値注文を同時に別の色で入れることができるかどうか教えてください。

よろしくお願いします

マイケル

ご質問ありがとうございます。まず最初に、BookEventProcessor2はインジケーターではなく、Expert Advisorです。必要なのは、ソースファイルとヘッダーファイルを1つのフォルダに入れることだけです。以下の添付画像を ご覧ください。


色を素早く変えたい場合は、CBookBarsPanel::Init()メソッドに行って ください:

//+------------------------------------------------------------------+
//| 初期化|
//+------------------------------------------------------------------+
bool CBookBarsPanel::Init(const uint _width,const uint _height)
  {
//--- パネルサイズ
   this.m_width=_width;
   this.m_height=_height;

//--- メモリを確保する
   if(this.m_obj_arr.Reserve(this.m_arr_size))
     {
      //--- メモリ管理フラグ 
      this.m_obj_arr.FreeMode(true);
      //--- パネル・ラベル
      CChartObjectRectLabel *ptr_rect_label=new CChartObjectRectLabel;
      if(CheckPointer(ptr_rect_label)==POINTER_DYNAMIC)
         if(ptr_rect_label.Create(0,"Panel",0,15,15,this.m_width,this.m_height))
            if(ptr_rect_label.BorderType(BORDER_RAISED))
               if(this.m_obj_arr.Add(ptr_rect_label))
                 {
                  //--- バー・ラベル 
                  uint curr_x=this.m_width/5;
                  uint curr_y=35;
                  uint mid_idx=this.m_arr_size/2-1;
                  for(uint idx=0;idx<this.m_arr_size;idx++)
                    {
                     color rec_color=(idx<(mid_idx+1))?clrRed:clrGreen;
                     //---
                     CBookRecord *ptr_record=new CBookRecord;
                     if(CheckPointer(ptr_record)==POINTER_DYNAMIC)
                        if(ptr_record.Create(IntegerToString(idx+1),rec_color,curr_x+15,
                           curr_y,curr_x*3,10))
                           if(this.m_obj_arr.Add(ptr_record))
                              curr_y+=(idx==mid_idx)?24:13;
                    }
                 }
     }

//---
   return this.m_obj_arr.Total()==(this.m_arr_size+1);
  }

または、メソッドのパラメータを少し変更してください:

//+------------------------------------------------------------------+
//| 初期化|
//+------------------------------------------------------------------+
bool CBookBarsPanel::Init(const uint _width,const uint _height, const color _buy_clr, const color _sell_clr)
  {
//--- パネルサイズ
   this.m_width=_width;
   this.m_height=_height;

//--- メモリを確保する
   if(this.m_obj_arr.Reserve(this.m_arr_size))
     {
      //--- メモリ管理フラグ 
      this.m_obj_arr.FreeMode(true);
      //--- パネル・ラベル
      CChartObjectRectLabel *ptr_rect_label=new CChartObjectRectLabel;
      if(CheckPointer(ptr_rect_label)==POINTER_DYNAMIC)
         if(ptr_rect_label.Create(0,"Panel",0,15,15,this.m_width,this.m_height))
            if(ptr_rect_label.BorderType(BORDER_RAISED))
               if(this.m_obj_arr.Add(ptr_rect_label))
                 {
                  //--- バー・ラベル 
                  uint curr_x=this.m_width/5;
                  uint curr_y=35;
                  uint mid_idx=this.m_arr_size/2-1;
                  for(uint idx=0;idx<this.m_arr_size;idx++)
                    {
                     color rec_color=(idx<(mid_idx+1))?_sell_clr:_buy_clr;
                     //---
                     CBookRecord *ptr_record=new CBookRecord;
                     if(CheckPointer(ptr_record)==POINTER_DYNAMIC)
                        if(ptr_record.Create(IntegerToString(idx+1),rec_color,curr_x+15,
                           curr_y,curr_x*3,10))
                           if(this.m_obj_arr.Add(ptr_record))
                              curr_y+=(idx==mid_idx)?24:13;
                    }
                 }
     }

//---
   return this.m_obj_arr.Total()==(this.m_arr_size+1);
  }
ファイル:
 

こんにちは、デニス


すぐに返信いただきありがとうございます。 エキスパートアドバイザーは現在かなりうまく動作しています。 しかし、私はこのリファレンスについて話そうとしていました:

OrderSend() 関数を 使用して取引リクエストを送信する際、いくつかの操作では注文タイプの表示が必要です。注文タイプは特別な構造体MqlTradeRequestのtype フィールドで 指定され、ENUM_ORDER_TYPE列挙の値を受け入れることができます。

ENUM_ORDER_TYPE

識別子

説明

ORDER_TYPE_BUY

成行買い注文

注文タイプ

成行売り注文

注文タイプ_買い指値

買い指値注文

注文タイプ_売り指値

指値売り注文

注文タイプ_買い指値

買い指値注文

注文タイプ_売り逆指値

ストップ売り注文

指値買い注文

注文価格に到達すると、ストップリミット価格で買い指値注文が発注されます。

売り指値注文

注文価格に到達すると、指値注文がストップリミット価格で発注されます。

ORDER_TYPE_CLOSE_BY

反対売買でポジションを決済する注文


Mql5のターミナルを見ると、経験豊富なアドバイザーがORDER_TYPE_BUYとORDER_TYPE_BUYを 表示しているのがわかります。しかし、私の質問は、買い注文を見る方法はわかるのですが、大ボスはどこにお金を置いているのか、アイスバーグと特定の価格レベルでの保留中の注文を抱きしめています。


それは可能ですか?


よろしくお願いします。

rder_type_sell_limit

売り指値注文

注文タイプ_買い指値

買い逆指値注文

Documentation on MQL5: Constants, Enumerations and Structures / Data Structures / Trade Request Structure
Documentation on MQL5: Constants, Enumerations and Structures / Data Structures / Trade Request Structure
  • www.mql5.com
Trade Request Structure - Data Structures - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5