CustomSymbolCreate

Crée un symbole personnalisé avec le nom spécifié dans le groupe spécifié.

bool  CustomSymbolCreate(
   const string     symbol_name,         // nom du symbole personnalisé
   const string     symbol_path="",      // nom du groupe dans lequel le symbole doit être créé
   const string     symbol_origin=NULL   // nom d'un symbole servant de base pour créer le symbole personnalisé
   );

Paramètres

symbol_name

[in]  Nom du symbole personnalisé. Il ne doit pas contenir les groupes ou sous-groupes dans lesquels le symbole est situé.

symbol_path=""

[in]  Le nom du groupe dans lequel se trouve le symbole.

symbol_origin=NULL

[in]  Nom d'un symbole à partir duquel les propriétés du symbole personnalisé créé seront copiées. Après avoir créé un symbole personnalisé, n'importe quelle valeur de propriété peut être changée en utilisant les fonctions correspondantes.

Valeur de Retour

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

Note

Tous les symboles personnalisés sont créés dans une section spéciale nommée Custom. Si aucun nom de groupe n'est spécifié (le paramètre symbol_path de la fonction CustomSymbolCreate contient une chaîne vide ou NULL), le symbole personnalisé est généré à la racine de la section Custom. Nous pouvons dessiner une analogie avec le système de fichiers, où les groupes et les sous-groupes peuvent être vus comme des dossiers et des sous-dossiers

Les noms du symbole et du groupe ne peuvent contenir que des caractères latins avec la ponctuation, des espaces ou des caractères spéciaux (ne peut contenir que ".", "_", "&" et "#"). Il n'est pas recommandé d'utiliser les caractères <, >, :, ", /, |, ?, *.

Le nom du symbole personnalisé doit être unique dans le groupe dans lequel il est créé. Si un symbole existe déjà avec le même nom, la fonction CustomSymbolCreate() retourne 'false', et l'appel suivant à GetLastError() retourne l'erreur 5300 (ERR_NOT_CUSTOM_SYMBOL) ou 5304 (ERR_CUSTOM_SYMBOL_EXIST).

La longueur du nom du symbole ne doit pas être supérieure à 31 caractères. Sinon, CustomSymbolCreate() retourne 'false' et l'erreur 5302 — ERR_CUSTOM_SYMBOL_NAME_LONG est générée.

Le paramètre symbol_path peut être défini de 2 façons :

  • seul un nom de groupe sans un nom pour le symbole personnalisé, par exemple — "CFD\\Metals". C'est la meilleure façon de faire pour éviter les erreurs.
  • ou nom du <groupe> + séparateur de groupes "\\"+<nom du symbole personnalisé>, par exemple — "CFD\\Metals\\Platinum". Dans ce cas, le nom du groupe doit se terminer avec le nom exact du symbole personnalisé. En cas de différence, le symbole personnalisé sera quand même créé, mais pas dans le groupe désiré. Par exemple, si symbol_path="CFD\\Metals\\Platinum" et symbol_name="platinum" (erreur d'enregistrement), alors un symbole personnalisé nommé "platinum" est créé dans le groupe "Custom\CFD\Metals\Platinum". La fonction SymbolInfoGetString("platinum",SYMBOL_PATH) retourne la valeur "Custom\CFD\Metals\Platinum\platinum".

 

Notez que la propriété SYMBOL_PATH retourne le chemin avec le nom du symbole à la fin. Il ne peut donc pas être copié sans changement si vous voulez créer un symbole personnalisé dans le même groupe. Dans ce cas, il est nécessaire de couper le nom du symbole pour ne pas obtenir le résultat décrit ci-dessus.

Si un symbole non existant est utilisé comme paramètre symbol_origin, alors le symbole personnalisé est créé vide comme si le paramètre symbol_origin n'était pas donné. L'erreur 4301 — ERR_MARKET_UNKNOWN_SYMBOL est générée dans ce cas.

La longueur du paramètre symbol_path ne doit pas être supérieure à 127 caractères en tenant compte de "Custom\\", des séparateurs de groupes "\\" et du nom du symbole s'il est spécifié à la fin.

 

Exemple :

//+------------------------------------------------------------------+
//|                                           CustomSymbolCreate.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   CUSTOM_SYMBOL_NAME     Symbol()+".C"  // nom du symbole personnalisé
#define   CUSTOM_SYMBOL_PATH     "Forex"        // nom du groupe dans lequel le symbole personnalisé sera créé
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()       // nom d'un symbole qui servira de base au symbole personnalisé à créer
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- si le symbole personnalisé n'a pas pu être créé, rapporte cette erreur dans le journal
   if(!CustomSymbolCreate(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN))
     {
      Print("CustomSymbolCreate() failed. Error "GetLastError());
      return;
     }
 
//--- vérifie si le symbole créé existe bien et récupère le groupe dans lequel il a été créé
   bool   customfalse;
   bool   exist = SymbolExist(CUSTOM_SYMBOL_NAMEcustom);
   string path  = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_PATH);
 
//--- affiche dans le journal le résultat de la création du symbole et le nom du groupe (spécifié et obtenu depuis les propriétés du symbole)
   PrintFormat("Custom symbol '%s' created\n"+
               "Symbol '%s' is exist: %s\n"+
               "Symbol '%s' is custom: %s\n"+
               "Path specified in the settings: '%s'\n"+
               "Path returned from the 'SYMBOL_PATH' property: '%s'",
               CUSTOM_SYMBOL_NAME
               CUSTOM_SYMBOL_NAME, (string)exist
               CUSTOM_SYMBOL_NAME, (string)custom,
               CUSTOM_SYMBOL_PATH,
               path);
 
//--- attends 2 secondes et supprime le symbole créé avec le message du résultat dans le journal
   Sleep(2000);
   ResetLastError();
   bool deleted = CustomSymbolDelete(CUSTOM_SYMBOL_NAME);
   Print(deleted ? StringFormat("Custom symbol '%s' removed"CUSTOM_SYMBOL_NAME) : StringFormat("CustomSymbolDelete() failed. Error ",GetLastError()));
   /*
   résultat :
   Custom symbol 'EURUSD.Ccreated
   Symbol 'EURUSD.Cis existtrue
   Symbol 'EURUSD.Cis customtrue
   Path specified in the settings: 'Forex'
   Path returned from the 'SYMBOL_PATHproperty: 'Custom\Forex\EURUSD.C'
   Custom symbol 'EURUSD.Cremoved
   */
  }

 

Voir aussi

SymbolName, SymbolSelect, CustomSymbolDelete