CustomBookAdd

Passe le statut du Depth of Market pour un symbole personnalisé. Le fonction permet de diffuser le Depth of Market comme si les prix arrivaient du serveur du courtier.

bool  CustomBookAdd(
   const string        symbol,            // nom du symbole
   const MqlBookInfo&  books[]            // tableau contenant les descriptions des éléments du Depth of Market
   uint                count=WHOLE_ARRAY  // nombre d'éléments à utiliser
   );

Paramètres

symbol

[in]  Nom du symbole personnalisé.

books[]

[in]   Le tableau de données de type MqlBookInfo décrivant totalement le statut du Depth of Market – toutes les demandes d'achats et de ventes. Le statut passé du Depth of Market remplace totalement le précédent.

count=WHOLE_ARRAY

[in]   Le nombre d'éléments du tableau 'books' à passer à la fonction. Le tableau entier est utilisé par défaut.

Valeur de Retour

true — en cas de succès, sinon — false. Pour obtenir des informations sur l'erreur, appelez la fonction GetLastError().

Note

La fonction CustomBookAdd ne fonctionne que pour les symboles personnalisés pour lesquels le Depth of Market est ouvert – via la plateforme ou via la fonction MarketBookAdd.

Lorsque vous injectez le Depth of Market, les prix Bid et Ask du symbole ne sont pas mis à jour. Vous devez contrôler le changement des meilleurs prix et injecter les ticks avec la fonction CustomTicksAdd.

La fonction vérifie l'exactitude des données transmises : le type, le prix et le volume doivent être indiqués pour chaque élément. De plus, MqlBookInfo.volume et MqlBookInfo.volume_real ne doivent pas être nuls ou négatifs ; si les deux volumes sont négatifs, cela sera considéré comme une erreur. Vous pouvez spécifier n'importe lequel des volumes ou les deux : celui qui est indiqué ou qui est positif sera utilisé :

volume=-1 && volume_real=2 – volume_real=2 will sera utilisé,
volume=3 && volume_real=0 – volume=3 will sera utilisé.

L'ordre des éléments MqlBookInfo dans le tableau 'books' est sans importance. Lors de la sauvegarde des données, le terminal les trie lui-même par prix.

Lors de la sauvegarde des données, le paramètre "Profondeur du livre (Book depth)" (SYMBOL_TICKS_BOOKDEPTH) du symbole personnalisé destination est vérifié. Si le nombre de demandes de ventes (sell) est supérieur à cette valeur dans le Depth of Market passé, les niveaux en excès sont rejetés. Ceci est également valable pour les demandes d'achat (buy).

Exemple de remplissage du tableau 'books' :

Statut du Depth of Market

Remplissage de books[]

Depth of Market exemple

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;

Exemple :

//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- active le Depth of Market pour un symbole pour lequel nous allons récupérer les données
   MarketBookAdd(Symbol());
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Fonction de désinitialisation de l'expert                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Fonction Tick                                                    |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   MqlTick ticks[];
   ArrayResize(ticks,1);
//--- copie les prix courants du symbole en cours dans le symbole personnalisé
   if(SymbolInfoTick(Symbol(),ticks[0]))
     {
      string symbol_name=Symbol()+".SYN";
      CustomTicksAdd(symbol_name,ticks);
     }
  }
//+------------------------------------------------------------------+
//| Fonction Book                                                    |
//+------------------------------------------------------------------+
void OnBookEvent(const string &book_symbol)
  {
//--- copie le statut courant du Depth of Market du symbole courant vers le symbole personnalisé
   if(book_symbol==Symbol())
     {
      MqlBookInfo book_array[];
      if(MarketBookGet(Symbol(),book_array))
        {
         string symbol_name=Symbol()+".SYN";
         CustomBookAdd(symbol_name,book_array);
        }
     }
  }
//+------------------------------------------------------------------+

Voir aussi

MarketBookAdd, CustomTicksAdd, OnBookEvent