CustomBookAdd

Transmite el estado de la profundidad de mercado de un instrumento personalizado. La función permite emitir la profundidad de mercado como si llegase desde el servidor del bróker.

bool  CustomBookAdd(
   const string        symbol,            // nombre del símbolo
   const MqlBookInfo&  books[]            // matriz con las descripciones de los elementos de la profundidad de mercado
   uint                count=WHOLE_ARRAY  // número de elementos a utilizar
   );

Parámetros

symbol

[in]  Nombre del símbolo personalizado.

books[]

[in]   Matriz de datos del tipo MqlBookInfo que describen al completo el estado de la profundidad de mercado – todas las solicitudes de compra y venta. El estado transmitido de la profundidad de mercado sustituye por completo al anterior.

count=WHOLE_ARRAY

[in]   Número de elementos de la matriz books que deberá ser transmitido a la función. Por defecto, se usa toda la matriz.

Valor retornado

true en el caso de éxito, de lo contrario, false. Para obtener información sobre el error, necesitamos llamar la función GetLastError().

Observación

La función CustomBookAdd funciona solo con los símbolos personalizados para los que está abierta la profundidad de mercado, a través de la plataforma o la funciónMarketBookAdd.

Al añadirse información a la profundidad de mercado, los precios Bid y Ask del instrumento no se actualizan. Usted deberá controlar por su propia cuenta el cambio de los mejores precios e incluir los ticks con la ayuda de CustomTicksAdd.

Se comprueba que los datos transmitidos sean correctos: para cada elemento hay que especificar el tipo, el precio y el volumen. MqlBookInfo.volume y MqlBookInfo.volume_real no deberán ser cero o negativos, si ambos volúmenes son negativos, se considerará un error.  Podemos especificar uno o ambos volúmenes: se tomará el indicado o el positivo:

volume=-1 && volume_real=2 – se utilizará volume_real=2,
а volume=3 && volume_real=0 – se utilizará volume=3.

El volumen con precisión aumentada MqlBookInfo.volume_real tiene prioridad en comparación con el habitual MqlBookInfo.volume. Si para un elemento de la profundidad de mercado se han indicado ambos, se usará volume_real.

El orden de secuencia de los elementos de MqlBookInfo en la matriz books no importa. Al guardar los datos, el terminal los clasifica por precio independientemente.

Al guardar los datos se comprueba el parámetro "Profundidad del mercado" (SYMBOL_TICKS_BOOKDEPTH) del instrumento personalizado que recibe. Si el número de solicitudes de venta en la profundidad de mercado transmitida supera este valor, los niveles sobrantes serán descartados. De una forma análoga sucederá con las solicitudes de compra.

Ejemplo de rellanado de la matriz books:

Estado de la profundidad de mercado

Rellenado de books[]

Ejemplo de profundidad de mercado

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;

Ejemplo:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- activamos la profundidad de mercado para el instrumento del que tomaremos los datos
   MarketBookAdd(Symbol());
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Tick function                                                    |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   MqlTick ticks[];
   ArrayResize(ticks,1);
//--- copiamos los precios actuales desde un instrumento habitual a uno personalizado
   if(SymbolInfoTick(Symbol(),ticks[0]))
     {
      string symbol_name=Symbol()+".SYN";
      CustomTicksAdd(symbol_name,ticks);
     }
  }
//+------------------------------------------------------------------+
//| Book function                                                    |
//+------------------------------------------------------------------+
void OnBookEvent(const string &book_symbol)
  {
//--- copiamos el estado actual de la profundidad de mercado desde un instrumento habitual a uno personalizado
   if(book_symbol==Symbol())
     {
      MqlBookInfo book_array[];
      if(MarketBookGet(Symbol(),book_array))
        {
         string symbol_name=Symbol()+".SYN";
         CustomBookAdd(symbol_name,book_array);
        }
     }
  }
//+------------------------------------------------------------------+

Ver también

MarketBookAdd, CustomTicksAdd, OnBookEvent