CustomSymbolSetString

Assigne une valeur de type string à la propriété d'un symbole personnalisé.

bool  CustomSymbolSetString(
   const string              symbol_name,      // nom du symbole
   ENUM_SYMBOL_INFO_STRING   property_id,      // identifiant de la propriété
   string                    property_value    // valeur de la propriété
   );

Paramètres

symbol_name

[in]  Nom du symbole personnalisé.

property_id

[in]  Identifiant de la propriété du symbole. La valeur peut être l'une des valeurs de l'énumération ENUM_SYMBOL_INFO_STRING.

property_value

[in]  Une variable de type string contenant la valeur de la propriété.

Valeur de Retour

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

Note

L'historique 1 minute et par ticks du symbole personnalisé est complétement supprimé si la propriété SYMBOL_FORMULA (l'équation de construction du prix du symbole personnalisé) est changée dans la spécification du symbole : Après avoir supprimé l'historique du symbole personnalisé, le terminal tente de créer un nouvel historique avec la nouvelle équation. La même chose se produit lorsque l'équation du symbole personnalisé est changée manuellement.

 

Exemple :

//+------------------------------------------------------------------+
//|                                        CustomSymbolSetString.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()
  {
//--- obtient le code d'erreur lors de la création d'un symbole personnalisé
   int create=CreateCustomSymbol(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN);
   
//--- si le code d'erreur est différent de 0 (symbole créé avec succès) et pas 5304 (le symbole a déjà été créé) - on sort
   if(create!=0 && create!=5304)
      return;
      
//--- récupère et affiche dans le journal les propriétés du symbole sur lequel le symbole personnalisé est basé
//--- (volume minimum, volume maximum, le pas de changement du volume minimum pour l'exécution d'une transaction)
   string origin_basis    = SymbolInfoString(CUSTOM_SYMBOL_ORIGINSYMBOL_BASIS);
   string origin_category = SymbolInfoString(CUSTOM_SYMBOL_ORIGINSYMBOL_CATEGORY);
   string origin_formula  = SymbolInfoString(CUSTOM_SYMBOL_ORIGINSYMBOL_FORMULA);
   
   PrintFormat("The '%s' symbol from which the custom '%s' was created:\n"+
               "  Basis: %s\n  Category: %s\n  Formula: %s",
               CUSTOM_SYMBOL_ORIGINCUSTOM_SYMBOL_NAME,
               origin_basisorigin_categoryorigin_formula);
   
//--- définit les autres valeurs pour les propriétés du symbole personnalisé
   ResetLastError();
   bool res=true;
   res &=CustomSymbolSetString(CUSTOM_SYMBOL_NAMESYMBOL_BASISCUSTOM_SYMBOL_ORIGIN);
   res &=CustomSymbolSetString(CUSTOM_SYMBOL_NAMESYMBOL_CATEGORY"FX");
   res &=CustomSymbolSetString(CUSTOM_SYMBOL_NAMESYMBOL_FORMULA, ("1.0 / "+CUSTOM_SYMBOL_ORIGIN));
 
//--- s'il y a eu une erreur lors de la définition d'une des propriétés, affiche un message correspondant dans le journal
   if(!res)
      Print("CustomSymbolSetString() failed. Error "GetLastError());
   
//--- récupère et affiche dans le journal les propriétés modifiées du symbole personnalisé
//--- (volume minimum, volume maximum, le pas de changement du volume minimum pour l'exécution d'une transaction)
   string custom_basis    = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_BASIS);
   string custom_category = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_CATEGORY);
   string custom_formula  = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_FORMULA);
   
   PrintFormat("Custom symbol '%s' based on '%s':\n"+
               "  Basis: %s\n  Category: %s\n  Formula: %s",
               CUSTOM_SYMBOL_ORIGINCUSTOM_SYMBOL_NAME,
               custom_basiscustom_categorycustom_formula);
   
//--- affiche une infobulle sur les touches de fin de script dans le commentaire du graphique
   Comment(StringFormat("Press 'Esc' to exit or 'Del' to delete the '%s' symbol and exit"CUSTOM_SYMBOL_NAME));
 
//--- attend que la touche Echap ou Suppr soit appuyée pour sortir de la boucle sans fin
   while(!IsStopped() && TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)==0)
     {
      Sleep(16);
      //--- lors de l'appui sur la touche Suppr, le symbole personnalisé est supprimé
      if(TerminalInfoInteger(TERMINAL_KEYSTATE_DELETE)<0)
        {
         if(DeleteCustomSymbol(CUSTOM_SYMBOL_NAME))
            PrintFormat("Custom symbol '%s' deleted successfully"CUSTOM_SYMBOL_NAME);
         break;
        }
     }
//--- efface le graphique avant de sortir
   Comment("");
   /*
   résultat :
   The 'EURUSDsymbol from which the custom 'EURUSD.Cwas created:
     Basis
     Category
     Formula
   Custom symbol 'EURUSDbased on 'EURUSD.C':
     BasisEURUSD
     CategoryFX
     Formula1.0 / EURUSD
   */
  }
//+------------------------------------------------------------------+
//| Crée un symbole personnalisé, retourne un code d'erreur          |
//+------------------------------------------------------------------+
int CreateCustomSymbol(const string symbol_nameconst string symbol_pathconst string symbol_origin=NULL)
  {
//--- définit le nom du symbole à partir duquel le symbole personnalisé sera construit
   string origin=(symbol_origin==NULL ? Symbol() : symbol_origin);
   
//--- si le symbole personnalisé n'a pas pu être créé et que le code de l'erreur n'est pas 5304, rapporte cette erreur dans le journal
   ResetLastError();
   int error=0;
   if(!CustomSymbolCreate(symbol_namesymbol_pathorigin))
     {
      error=GetLastError();
      if(error!=5304)
         PrintFormat("CustomSymbolCreate(%s, %s, %s) failed. Error %d"symbol_namesymbol_pathoriginerror);
     }
//--- succès
   return(error);
  }
//+------------------------------------------------------------------+
//| Supprime un symbole personnalisé                                 |
//+------------------------------------------------------------------+
bool DeleteCustomSymbol(const string symbol_name)
  {
//--- cache le symbole de la fenêtre du Market Watch
   ResetLastError();
   if(!SymbolSelect(symbol_namefalse))
     {
      PrintFormat("SymbolSelect(%s, false) failed. Error %d"GetLastError());
      return(false);
     }
      
//--- en cas d'échec de la suppression du symbole personnalisé, rapporte cette erreur dans le journal et retourne 'false'
   ResetLastError();
   if(!CustomSymbolDelete(symbol_name))
     {
      PrintFormat("CustomSymbolDelete(%s) failed. Error %d"symbol_nameGetLastError());
      return(false);
     }
//--- succès
   return(true);
  }

 

Voir aussi

SymbolInfoString