CustomBookAdd
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);
}
}
}
//+------------------------------------------------------------------+