CustomBookAdd

Envia o estado do livro de ofertas do instrumento personalizado. A função permite transmitir o livro de ofertas como se ele viesse do servidor da corretora.

int  CustomBookAdd(
   const string        symbol,            // nome do símbolo
   const MqlBookInfo&  books[]            // array com as descrições dos elementos do livro de ofertas
   uint                count=WHOLE_ARRAY  // número de elementos a serem usados
   );

Parâmetros

symbol

[in]  Nome do instrumento personalizado.

books[]

[in]   Array de dados do tipo MqlBookInfo descrevendo completamente o estado do livro de ofertas – todos os pedidos de compra e de venda. O estado de livro de ofertas enviado substitui completamente o anterior.

count=WHOLE_ARRAY

[in]   Número do elementos do array books que deve ser enviado para a função. Por padrão, é usado o array inteiro.

Valor retornado

Número de ticks adicionados ou -1 no caso de erro.

Observação

Função CustomBookAdd funciona apenas para símbolos personalizados em que o livro de ofertas está aberto – por meio da interface da plataforma ou função MarketBookAdd.

Ao adicionar ao livro de ofertas, os preços Bid e Ask do instrumento não são atualizados. Você deve controlar de forma independente a mudança dos melhores preços e adicionar ticks com a ajuda de CustomTicksAdd.

É verificada a exatidão dos dados transmitidos: para cada elemento devem ser indicados tipo, preço e volume. Além disso, MqlBookInfo.volume e MqlBookInfo.volume_real não devem ser zero ou negativos, se ambos os volumes forem negativos, isso será considerado um erro.  Você pode especificar qualquer um dos volumes ou ambos, sendo que será tomado aquele que é indicado ou é positivo:

volume=-1 && volume_real=2 – será usado volume_real=2,
volume=3 && volume_real=0 – será usado volume=3.

O volume com maior precisão MqlBookInfo.volume_real tem uma prioridade mais alta que o habitual MqlBookInfo.volume. Se, para o elemento do livro de ofertas, ambos os valores forem especificados, será usado volume_real.

A sequência de elementos MqlBookInfo no array books não importa. Ao salvar dados, o terminal os classifica por preço independentemente.

Ao salvar dados, é verificado o parâmetro "Profundidade do livro de ofertas" (SYMBOL_TICKS_BOOKDEPTH) recebendo o instrumentos personalizado. Se, no livro de ofertas transmitido, o número de pedidos de venda exceder esse valor, os níveis excedentes são descartados. Da mesma forma, para pedidos de compra.

Veja como é preenchido o array books:

Estado do livro de ofertas

Preenchimento de books[]

Exemplo de livro de ofertas

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;

Exemplo:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- ativamos o livro de ofertas para o instrumento a partir do qual vamos tomas dados
   MarketBookAdd(Symbol());
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Tick function                                                    |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   MqlTick ticks[];
   ArrayResize(ticks,1);
//--- copiamos os preços atuais a partir de um instrumento habitual para um instrumento personalizado
   if(SymbolInfoTick(Symbol(),ticks[0]))
     {
      string symbol_name=Symbol()+".SYN";
      CustomTicksAdd(symbol_name,ticks);
     }
  }
//+------------------------------------------------------------------+
//| Book function                                                    |
//+------------------------------------------------------------------+
void OnBookEvent(const string &book_symbol)
  {
//--- copiamos o estado atual do livro de ofertas a partir de um instrumento habitual para um instrumento personalizado
   if(book_symbol==Symbol())
     {
      MqlBookInfo book_array[];
      if(MarketBookGet(Symbol(),book_array))
        {
         string symbol_name=Symbol()+".SYN";
         CustomBookAdd(symbol_name,book_array);
        }
     }
  }
//+------------------------------------------------------------------+

Veja também

MarketBookAdd, CustomTicksAdd, OnBookEvent