CustomBookAdd

为自定义交易品种传递市场深度的状态。该函数可以推广市场深度,类似于价格从交易商服务器到达。

bool  CustomBookAdd(

   const string        symbol,            // 交易品种名称

   const MqlBookInfo&  books[]            // 带有对市场深度元素描述的数组

   uint                count=WHOLE_ARRAY  // 将要使用的元素数量

   );

参数

交易品种

[in]  自定义交易品种名称。

books[]

[in]   MqlBookInfo数组类型数据充分描述了市场深度状态 — 所有买卖请求。该传递的市场深度状态完全取代了过去的深度。

count=WHOLE_ARRAY

[in]   将要传递到函数的'books'数组元素的数量。默认使用整个数组。

返回值

true – 成功,否则 – false。若要获得错误信息,请调用GetLastError()函数。

注意

CustomBookAdd函数仅适用于市场深度所开放的自定义交易品种 — 通过平台界面或MarketBookAdd函数。

当交易品种卖价和买价加入到市场深度时,不会更新。您应该控制最佳价格的变化,并使用CustomTicksAdd将其加入到报价中。

该函数验证传输数据的准确性:必须为每个元素指明类型、价格和交易量。此外,MqlBookInfo.volume和MqlBookInfo.volume_real不得为零或负数;如果两个交易量都是负数,这将被视为错误。您可以指定任何交易量或两个交易量都指定:将使用指定的交易量或正值交易量:

volume=-1 && volume_real=2 — volume_real=2将被使用,

a volume=3 && volume_real=0 — volume=3将被使用。

MqlBookInfo元素在'books'数组中的顺序并不重要。当保存数据时,程序端将根据其价格进行排序。

当保存数据时,检查接收人自定义交易品种的"Book depth" (SYMBOL_TICKS_BOOKDEPTH)参数。如果在传递的市场深度中,卖出请求的数量超过该值,则丢弃超出的部分。购买请求也是如此。

'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()

  {

//--- 为我们将要检索数据的交易品种启用市场深度 from

   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 函数                                                        |

//+------------------------------------------------------------------+

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