CustomBookAdd

銘柄の板情報の構造体を渡します。ブローカーサーバーから価格が到着したかのように板情報をブロードキャストできます。

int  CustomBookAdd(
  const string        symbol,           // 銘柄名
  const MqlBookInfo& books[]            // 板情報要素の説明を持つ配列
  uint               count=WHOLE_ARRAY  // 使用される要素の数
  );

パラメータ

symbol

[in]  カスタム銘柄名。

books[]

[in]   The array of MqlBookInfo型データの配列で板情報のステータスを完全に記述します(すべての売買リクエスト)。渡された板情報は以前の者を完全に置き換えます。

count=WHOLE_ARRAY

[in]   関数に渡される'books'配列要素の数。デフォルトでは配列全体が使用されます。

戻り値

追加されたティック数(エラーの場合は -1 )。

注意事項

CustomBookAdd関数は板情報が開かれたカスタム銘柄とのみ作動します(プラットフォームインターフェイスまたはMarketBookAdd関数による)。

板情報を投入したとき、銘柄の買値と売値は更新されません。CustomTicksAddを使用して、最良価格の変更を制御してティックを投入する必要があります。

渡されたデータの妥当性が確認されます。価格と数量は負にすることはできません。また、各要素では、型、価格、数量(MqlBookInfo.volumeまたはMqlBookInfo.volume_real)も指定する必要があります。少なくとも1つの板情報要素が誤って記述されている場合、システムは渡されたステータスを完全に破棄します。

MqlBookInfo.volume_real拡張精度ボリュームは、通常のMqlBookInfo.volumeよりも優先順位が高くなります。板情報要素に両方の値が指定されている場合は、volume_realの値が使用されます。

'books'配列内のMqlBookInfo要素の順序は関係ありません。データを保存するとき、端末は独自に価格によってデータを分類します。

データを保存するとき、受け取り側のカスタム銘柄の"Book depth" (SYMBOL_TICKS_BOOKDEPTH)パラメータが確認されます。渡された板情報で売りリクエストの数がこの値を超えると、超過レベルは破棄されます。買いリクエストについても同様です。

'books'配列の書き込み例:

板情報ステータス

books[]の書き込み

板情報の例

books[0].type=BOOK_TYPE_SELL;
books[0].price=1.14337;
books[0].volume=100;  
books[1].type=BOOK_TYPE_SELL;
books[1].price=1.14330;
books[1].volume=50;  
books[2].type=BOOK_TYPE_SELL;
books[2].price=1.14335;
books[2].volume=40;  
books[3].type=BOOK_TYPE_SELL;
books[3].price=1.14333;
books[3].volume=10;  
books[4].type=BOOK_TYPE_BUY;
books[4].price=1.14322;
books[4].volume=10;  
books[5].type=BOOK_TYPE_BUY;
books[5].price=1.14320;
books[5].volume=90;  
books[6].type=BOOK_TYPE_BUY;
books[6].price=1.14319;
books[6].volume=100;  
books[7].type=BOOK_TYPE_BUY;
books[7].price=1.14318;
books[7].volume=10;

例:

//+------------------------------------------------------------------+
//| エキスパート初期化関数                                                 |
//+------------------------------------------------------------------+
int OnInit()
 {
//--- データ源となる銘柄の板情報を有効にする
  MarketBookAdd(Symbol());
  return(INIT_SUCCEEDED);
 }
//+------------------------------------------------------------------+
//| エキスパート初期化解除関数                                             |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 {
 }
//+------------------------------------------------------------------+
//| ティック関数                                                         |
//+------------------------------------------------------------------+
void OnTick(void)
 {
  MqlTick ticks[];
  ArrayResize(ticks,1);
//--- 現在の価格を共通銘柄からカスタム銘柄にコピーする
  if(SymbolInfoTick(Symbol(),ticks[0]))
    {
    string symbol_name=Symbol()+".SYN";
     CustomTicksAdd(symbol_name,ticks);
    }
 }
//+------------------------------------------------------------------+
//| Book function                                                    |
//+------------------------------------------------------------------+
void OnBookEvent(const string &book_symbol)
 {
//--- 現在の板情報ステータスを共通銘柄からカスタム銘柄にコピーする
  if(book_symbol==Symbol())
    {
    MqlBookInfo book_array[];
    if(MarketBookGet(Symbol(),book_array))
       {
        string symbol_name=Symbol()+".SYN";
        CustomBookAdd(symbol_name,book_array);
       }
    }
 }
//+------------------------------------------------------------------+

参照

MarketBookAddCustomTicksAddOnBookEvent