CustomBookAdd

Passa lo status del Depth of Market per un simbolo personalizzato. La funzione consente di trasmettere il Depth of Market come se i prezzi arrivassero dal server di un broker.

bool  CustomBookAdd(
   const string        symbol,            // nome del simbolo
   const MqlBookInfo&  books[]            // array con la descrizione degli elementi del Depth of Market
   uint                count=WHOLE_ARRAY  // numero di elementi da usare
   );

Parametri

simbolo

[in] Nome simbolo personalizzato.

books[]

[in] L'array di tipo di dati MqlBookInfo che descrivono completamente lo status del Depth of Market — tutte le richieste di buy e sell. Lo status del Depth of Market passato sostituisce completamente il precedente.

count=WHOLE_ARRAY

[in] Il numero di elementi dell'array 'books' da passare alla funzione. L'intero array viene utilizzato per impostazione predefinita.

Valore di ritorno

true - successo, altrimenti - false. Per ottenere informazioni sull'errore, chiamare la funzione GetLastError().

Nota

La funzione CustomBookAdd funziona solo per i simboli personalizzati per cui viene aperto il Depth of Market — tramite l'interfaccia della piattaforma o la funzione MarketBookAdd.

Quando si lancia il Depth of Market, i prezzi Bid e Ask del simbolo non vengono aggiornati. Dovresti controllare il cambiamento dei prezzi migliori e lanciare i ticks usando CustomTicksAdd.

La funzione verifica l'esattezza dei dati trasmessi: per ogni elemento deve essere indicato il tipo, il prezzo e il volume. Inoltre, MqlBookInfo.volume e MqlBookInfo.volume_real non devono essere zero o negativi; se entrambi i volumi sono negativi, questo sarà considerato un errore. Puoi specificare uno qualsiasi dei volumi o entrambi — verrà utilizzato quello indicato o positivo:

volume=-1 && volume_real=2 — verrà utilizzato volume_real=2,
volume=3 && volume_real=0 — verrà utilizzato volume=3.

Quando si salvano i dati, viene verificato il parametro "Profondità del Book" (SYMBOL_TICKS_BOOKDEPTH) del simbolo personalizzato destinatario. Se il numero di richieste di Sell supera questo valore nella Depth of Market passato, i livelli in eccesso vengono scartati. Lo stesso vale per le richieste di Buy.

Esempio di riempimento dell'array "books":

Status del Depth of Market

Riempimento books[]

Esempio Depth of Market

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;

Esempio:

//+------------------------------------------------------------------+
//| Funzione inizializzazione expert                                 |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- ailita il Depth of Market per un simbolo da cui prendiamo i dati
   MarketBookAdd(Symbol());
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Funzione deinizializzazione expert                               |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Funzione Tick                                                    |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   MqlTick ticks[];
   ArrayResize(ticks,1);
//--- copia i prezzi correnti dal simbolo comune a quello personalizzato
   if(SymbolInfoTick(Symbol(),ticks[0]))
     {
      string symbol_name=Symbol()+".SYN";
      CustomTicksAdd(symbol_name,ticks);
     }
  }
//+------------------------------------------------------------------+
//| Funzione Book                                                    |
//+------------------------------------------------------------------+
void OnBookEvent(const string &book_symbol)
  {
//--- copia lo stato attuale della Profondità di mercato dal simbolo comune a quello personalizzato
   if(book_symbol==Symbol())
     {
      MqlBookInfo book_array[];
      if(MarketBookGet(Symbol(),book_array))
        {
         string symbol_name=Symbol()+".SYN";
         CustomBookAdd(symbol_name,book_array);
        }
     }
  }
//+------------------------------------------------------------------+

Guarda anche

MarketBookAdd, CustomTicksAdd, OnBookEvent