CustomSymbolCreate

Crea un simbolo personalizzato con il nome specificato nel gruppo specificato.

bool  CustomSymbolCreate(
   const string     symbol_name,         // nome del simbolo personalizzato
   const string     symbol_path="",      // nome di un gruppo in cui dev'essere creato il simbolo
   const string     symbol_origin=NULL   // nome del simbolo usato come base per creare un simbolo personalizzato
   );

Parametri

symbol_name

[in]  Nome simbolo personalizzato. Non dovrebbe contenere gruppi o sottogruppi in cui si trova il simbolo.

symbol_path=""

[in] Il nome del gruppo in cui si trova un simbolo.

symbol_origin=NULL

[in] Nome del simbolo le cui proprietà di un simbolo personalizzato creato devono essere copiate. Dopo aver creato un simbolo personalizzato, qualsiasi valore di proprietà può essere modificato in uno necessario utilizzando le funzioni appropriate.

Valore Restituito

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

Nota

Tutti i simboli personalizzati vengono creati nella sezione speciale personalizzata. Se il nome di un gruppo non è specificato (il parametro symbol_path nella funzione CustomSymbolCreate contiene una stringa vuota o NULL), un simbolo personalizzato viene generato nella sezione principale Personalizzata. Qui possiamo tracciare un'analogia con il file system, dove gruppi e sottogruppi possono essere visualizzati come cartelle e sottocartelle

I nomi di simboli e gruppi possono contenere solo lettere latine senza punteggiatura, spazi o caratteri speciali (possono contenere solo ".", "_", "&" E "#"). Non è raccomandato l'uso dei caratteri <, >, :, ", /, |, ?, *.

Il nome del simbolo personalizzato deve essere univoco indipendentemente dal nome del gruppo in cui è stato creato. Se esiste già un simbolo con lo stesso nome, la funzione CustomSymbolCreate() restituisce "false", mentre la successiva chiamata GetLastError() restituisce l'errore 5300 (ERR_NOT_CUSTOM_SYMBOL) o 5304 (ERR_CUSTOM_SYMBOL_EXIST).

La lunghezza del nome del simbolo non deve superare 31 caratteri. In caso contrario, CustomSymbolCreate() restituisce 'false' e l'errore 5302 - ERR_CUSTOM_SYMBOL_NAME_LONG viene attivato.

Il parametro symbol_path può essere impostato in due modi:

  • solo un nome di gruppo senza un nome del simbolo personalizzato, ad esempio – "CFD\\Metals". È meglio usare questa opzione per evitare errori.
  • o nome <gruppo> + separatore gruppi "\\" +<nome simbolo personalizzato> ad esempio – "CFD\\Metals\\Platinum". In questo caso, il nome del gruppo dovrebbe terminare con il nome esatto del simbolo personalizzato. In caso di mancata corrispondenza, il simbolo personalizzato viene comunque creato, ma non nel gruppo desiderato. Ad esempio, se symbol_path="CFD\\Metals\\Platinum" e symbol_name="platinum" (register error), allora viene creato un simbolo personalizzato denominato "platinum" nel gruppo "Custom\CFD\Metals\Platinum". La funzione SymbolInfoGetString("platinum", SYMBOL_PATH) restituisce il valore "Custom\CFD\Metals\Platinum\platinum".

 

Si noti che la proprietà SYMBOL_PATHrestituisce il percorso con il nome del simbolo alla fine. Pertanto, non può essere copiato senza modifiche se si desidera creare un simbolo personalizzato nello stesso identico gruppo. In questo caso, è necessario tagliare il nome del simbolo per non ottenere il risultato sopra descritto.

Se un simbolo inesistente è impostato come parametro symbol_origin, quindi il simbolo personalizzato viene creato vuoto come se il parametro symbol_origin non fosse impostato. In questo caso viene attivato l'errore 4301 - ERR_MARKET_UNKNOWN_SYMBOL.

La lunghezza del parametro symbol_path non deve superare i 127 caratteri considerando "Custom\\", "\\" i separatori dei gruppi e il nome del simbolo se è specificato alla fine.

 

Esempio:

//+------------------------------------------------------------------+
//|                                           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"  // nome del simbolo personalizzato
#define   CUSTOM_SYMBOL_PATH     "Forex"        // nome del gruppo in cui un simbolo è stato creato
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()       // nome di un simbolo su cui è basata la personalizzazione
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- se la creazione di un simbolo personalizzato non va a buon fine, informarne nel journal
   if(!CustomSymbolCreate(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN))
     {
      Print("CustomSymbolCreate() failed. Error "GetLastError());
      return;
     }
 
//--- verificare l'esistenza del simbolo creato e ottenere il gruppo in cui è stato creato
   bool   customfalse;
   bool   exist = SymbolExist(CUSTOM_SYMBOL_NAMEcustom);
   string path  = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_PATH);
 
//--- stampare il risultato della creazione del simbolo e il nome del gruppo (specificato e ottenuto dalle proprietà del simbolo) nel journal
   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);
 
//--- attendere due secondi e cancellare il simbolo creato con il messaggio risultante nel 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()));
   /*
   risultato:
   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
   */
  }

 

Guarda anche

SymbolName, SymbolSelect, CustomSymbolDelete