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.

Os dados transmitidos são verificados quanto à exatidão: os preços e volumes não devem ser negativos, pois, para cada tipo de elemento, devem ser indicados preço e volume (MqlBookInfo.volume ou MqlBookInfo.volume_real). Se pelo menos um elemento do livro de ofertas for descrito incorretamente, o sistema descartará completamente o estado transmitido.

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