CustomSymbolCreate

Erstellt ein nutzerdefiniertes Symbol mit dem angegebenen Namen in der angegebenen Gruppe.

bool  CustomSymbolCreate(
   const string     symbol_name,         // Name des nutzerdefinierten Symbols
   const string     symbol_path="",      // Name der Gruppe in der das Symbole erstellt werden soll
   const string     symbol_origin=NULL   // Name des Basissymbols für die Erstellung des nutzerdefinierten Symbols
   );

Parameter

symbol_name

[in]  Name des nutzerdefinierten Symbols. Es sollte keine Gruppen oder Untergruppen enthalten, in denen sich das Symbol befindet.

symbol_path=""

[in]  Der Gruppenname, in der sich das Symbol befindet.

symbol_origin=NULL

[in]  Name des Basissymbols, dessen Eigenschaften für nutzerdefinierte Symbol kopiert werden. Nach dem Erstellen des nutzerdefinierten Symbols kann jede Eigenschaft auf das Benötigte mittels der entsprechenden Funktionen geändert werden.

Rückgabewert

true – bei Erfolg, sonst – false. Um Informationen über den Fehler zu erhalten, rufen Sie die Funktion GetLastError() auf.

Hinweis

Alle nutzerdefinierten Symbole werden im speziellen Nutzerbereich erstellt. Wenn der Gruppenname nicht angegeben wurde (der Parameter symbol_path der Funktion CustomSymbolCreate ist entweder eine leere Zeichenkette oder enthält den Wert NULL), wird das nutzerdefinierte Symbol im Stammordner des Nutzerbereichs erstellt. Das ist analog zum Dateisystem, das Gruppen und Untergruppen in Form von Ordnern und Unterordnern anzeigt.

Die Namen der Symbole und Gruppen dürfen nur lateinische Buchstaben ohne Interpunktion, Leer- oder Sonderzeichen enthalten (mit Ausnahme von ".", "_", "&" und "#"). Es wird nicht empfohlen folgende Zeichen zu verwenden <, >, :, ", /, |, ?, *.

Der Name des nutzerdefinierten Symbols sollte eindeutig sein, unabhängig von der Gruppe, in der es erstellt wurde. Wenn bereits ein Symbol gleichen Namens existiert, gibt die Funktion CustomSymbolCreate() 'false' zurück, und der nachfolgende Aufruf GetLastError() wirft den Fehler 5300 (ERR_NOT_CUSTOM_SYMBOL) oder 5304 (ERR_CUSTOM_SYMBOL_EXIST) aus.

Die Länge des Symbolnamens sollte 31 Zeichen nicht überschreiten. Andernfalls gibt CustomSymbolCreate() 'false' zurück und der Fehler 5302 - ERR_CUSTOM_SYMBOL_NAME_LONG wird gesetzt.

Der Parameter symbol_path kann auf zwei Arten bestimmt werden:

  • nur einen Gruppennamen ohne Namen des nutzerdefinierten Symbols - "CFD\\Metals". Es ist am besten, diese Option zu verwenden, um Fehler zu vermeiden.
  • oder <Gruppe> Name + Gruppenseparator "\\"+<nutzerdefinierter Symbolname>, zum Beispiel - "CFD\\Metalle\\Platin". In diesem Fall sollte der Gruppenname mit dem genauen Namen des nutzerdefinierten Symbols enden. Stimmen sie nicht überein, wird das nutzerdefinierte Symbol dennoch erstellt, jedoch nicht in der beabsichtigten Gruppe. Zum Beispiel, wenn symbol_path="CFD\\Metals\\Platinum" und symbol_name="platinum" (Fehler der Groß-/Kleinschreibung), dann wird in der Gruppe "Custom\CFD\Metals\Platinum" ein nutzerdefiniertes Symbol namens "platinum" erstellt. Die Funktion SymbolInfoGetString("platinum",SYMBOL_PATH) gibt den Wert "Custom\CFD\Metals\Platinum\Platinum\platinum" zurück.

 

Beachten Sie, das die Eigenschaft SYMBOL_PATH den Pfad mit dem Symbolnamen am Ende zurückgibt. Daher kann er nicht ohne Änderungen kopiert werden, wenn Sie ein nutzerdefiniertes Symbol in genau der gleichen Gruppe erstellen möchten. In diesem Fall ist es notwendig, den Symbolnamen zu kürzen, um nicht das oben beschriebene Ergebnis zu erhalten.

Wenn ein nicht vorhandenes Symbol als Parameter symbol_origin verwendet wird, wird ein 'leeres', nutzerdefinierte Symbol erstellt, als ob der Parameter symbol_origin nicht gesetzt wäre. Der Fehler 4301 - ERR_MARKET_UNKNOWN_SYMBOL wird in diesem Fall ausgeworfen.

Die Länge des Parameters symbol_path sollte, unter Berücksichtigung von "Custom\\", den Gruppenseparatoren "\\" und dem Symbolnamen, 127 Zeichen nicht überschreiten, wenn der Name am Ende angegeben ist.

 

Beispiel:

//+------------------------------------------------------------------+
//|                                           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"  // Name des nutzerdefinierten Symbols
#define   CUSTOM_SYMBOL_PATH     "Forex"        // Name der Gruppe, in der das Symbol erstellt werden soll
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()       // Name des Symbols, das als Basis des nutzerdefinierten dienen soll
 
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- wenn das Erstellen eines nutzerdefinierten Symbols fehlgeschlagen ist, wird im Log darüber informiert
   if(!CustomSymbolCreate(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN))
     {
      Print("CustomSymbolCreate() failed. Error "GetLastError());
      return;
     }
 
//--- die Existenz des erstellten Symbols prüfen und die Gruppe abrufen, in der es erstellt wurde
   bool   customfalse;
   bool   exist = SymbolExist(CUSTOM_SYMBOL_NAMEcustom);
   string path  = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_PATH);
 
//--- das Ergebnis der Symbolerstellung und den Namen der Gruppe (angegeben und aus den Symboleigenschaften erhalten) im Log drucken
   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);
 
//--- zwei Sekunden warten und das erstellte Symbol mit der resultierenden Nachricht im Log löschen
   Sleep(2000);
   ResetLastError();
   bool deleted = CustomSymbolDelete(CUSTOM_SYMBOL_NAME);
   Print(deleted ? StringFormat("Custom symbol '%s' removed"CUSTOM_SYMBOL_NAME) : StringFormat("CustomSymbolDelete() failed. Error ",GetLastError()));
   /*
   Ergebnis:
   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
   */
  }

 

Siehe auch

SymbolName, SymbolSelect, CustomSymbolDelete