CustomSymbolSetString

Establece para el símbolo personalizado el valor de propiedad de tipo string.

bool  CustomSymbolSetString(
   const string              symbol_name,      // nombre del símbolo
   ENUM_SYMBOL_INFO_STRING   property_id,      // identificador de la propiedad
   string                    property_value    // valor de la propiedad
   );

Parámetros

symbol_name

[in]  Nombre del símbolo personalizado.

property_id

[in]  Identificador de la propiedad del símbolo. El valor puede ser uno de los valores de la enumeración ENUM_SYMBOL_INFO_STRING.

property_value

[in]  Variable del tipo string, que contiene el valor de la propiedad.

Valor devuelto

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

Nota

La historia de minutos y ticks del símbolo personalizado se eliminará por completo, si en las especificaciones del símbolo se cambia la propiedad SYMBOL_FORMULA, que establece la fórmula para la construcción del precio del instrumento personalizado. Después de eliminar la historia del símbolo personalizado, el terminal intentará crear una nueva historia según la fórmula nueva. Lo mismo sucede al cambiar manualmente la fórmula del símbolo personalizado.

 

Ejemplo:

//+------------------------------------------------------------------+
//|                                        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"  // nombre del símbolo personalizado
#define   CUSTOM_SYMBOL_PATH     "Forex"        // nombre del grupo en el que se creará el símbolo
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()       // nombre del símbolo a partir del cual se creará el símbolo personalizado
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- obtenemos el código de error al crear un símbolo personalizado
   int create=CreateCustomSymbol(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN);
   
//--- si el código de error no es 0 (el símbolo se ha creado con éxito) y no es 5304 (símbolo ya creado), salimos.
   if(create!=0 && create!=5304)
      return;
      
//--- obtenemos e imprimimos en el registro las propiedades del símbolo en base al cual se ha creado el símbolo personalizado
//--- (volumen mínimo, volumen máximo, paso de cambio de volumen mínimo para cerrar una transacción)
   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);
   
//--- establecemos estas propiedades del símbolo personalizado en valores diferentes
   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));
 
//--- si se ha producido un error al configurar alguna de las propiedades, mostraremos un mensaje en el registro
   if(!res)
      Print("CustomSymbolSetString() failed. Error "GetLastError());
   
//--- obtenemos e imprimimos en el registro las propiedades modificadas del símbolo personalizado
//--- (volumen mínimo, volumen máximo, paso de cambio de volumen mínimo para cerrar una transacción)
   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);
   
//--- mostramos en el gráfico en el comentario la pista sobre las teclas de finalización del script
   Comment(StringFormat("Press 'Esc' to exit or 'Del' to delete the '%s' symbol and exit"CUSTOM_SYMBOL_NAME));
 
//--- en un ciclo infinito esperamos que Esc o Del para la salida
   while(!IsStopped() && TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)==0)
     {
      Sleep(16);
      //--- pulsando Del, eliminaremos el símbolo personalizado creado
      if(TerminalInfoInteger(TERMINAL_KEYSTATE_DELETE)<0)
        {
         if(DeleteCustomSymbol(CUSTOM_SYMBOL_NAME))
            PrintFormat("Custom symbol '%s' deleted successfully"CUSTOM_SYMBOL_NAME);
         break;
        }
     }
//--- antes de la salida, limpiamos el gráfico
   Comment("");
   /*
   resultado:
   The 'EURUSDsymbol from which the custom 'EURUSD.Cwas created:
     Basis
     Category
     Formula
   Custom symbol 'EURUSDbased on 'EURUSD.C':
     BasisEURUSD
     CategoryFX
     Formula1.0 / EURUSD
   */
  }
//+------------------------------------------------------------------+
//| Crea un símbolo personalizado, devuelve el código de error       |
//+------------------------------------------------------------------+
int CreateCustomSymbol(const string symbol_nameconst string symbol_pathconst string symbol_origin=NULL)
  {
//--- determinamos el nombre del símbolo a partir del cual se creará uno personalizado
   string origin=(symbol_origin==NULL ? Symbol() : symbol_origin);
   
//--- si no hemos podido crear el símbolo personalizado, y no se trata de un error 5304, informaremos sobre ello en el registro
   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);
     }
//--- con éxito
   return(error);
  }
//+------------------------------------------------------------------+
//| Elimina el símbolo personalizado                                |
//+------------------------------------------------------------------+
bool DeleteCustomSymbol(const string symbol_name)
  {
//--- ocultamos el símbolo de la ventana de Observación de mercado
   ResetLastError();
   if(!SymbolSelect(symbol_namefalse))
     {
      PrintFormat("SymbolSelect(%s, false) failed. Error %d"GetLastError());
      return(false);
     }
      
//--- si no se ha podido eliminar el símbolo personalizado, informaremos de ello en el registro y retornaremos false
   ResetLastError();
   if(!CustomSymbolDelete(symbol_name))
     {
      PrintFormat("CustomSymbolDelete(%s) failed. Error %d"symbol_nameGetLastError());
      return(false);
     }
//--- con éxito
   return(true);
  }

 

Vea también

SymbolInfoString