CustomSymbolSetInteger

Setzt den Wert einer ganzzahligen Eigenschaft für das nutzerdefinierte Symbol.

bool  CustomSymbolSetInteger(
   const string              symbol_name,      // Symbolname
   ENUM_SYMBOL_INFO_INTEGER  property_id,      // Identifikator der Eigenschaft
   long                      property_value    // Wert der Eigenschaft
   );

Parameter

symbol_name

[in]  Name des nutzerdefinierten Symbols.

property_id

[in]  Identifikator der Eigenschaft des Symbols. Der Wert kann einer der Werte der Enumeration ENUM_SYMBOL_INFO_INTEGER sein.

property_value

[in]  Variable vom Typ long, die den Wert der Eigenschaft enthält.

Rückgabewert

true – bei Erfolg, andernfalls false. Um Fehlerdetails zu erhalten, muss die Funktion GetLastError() aufgerufen werden.

Hinweis

Die Minuten- und Tick-Historie des nutzerdefinierten Symbols wird komplett gelöscht, wenn man eine der folgenden Eigenschaften in der Spezifikation des Symbols ändert:

  • SYMBOL_CHART_MODE – Preistyp, der für das Zeichnen von Balken verwendet wird (Bid oder Last)
  • SYMBOL_DIGITS – Zahl der Nachkommastellen für die Anzeige des Preises

Nach dem Löschen der Historie des nutzerdefinierten Symbols versucht das Terminal eine neue Historie unter Verwendung der aktualisierten Eigenschaften zu erstellen. Das Gleiche geschieht bei manueller Änderung der Eigenschaften eines nutzerdefinierten Symbols.

 

Beispiel:

//+------------------------------------------------------------------+
//|                                       CustomSymbolSetInteger.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()
  {
//--- Abrufen des Fehlercodes beim Erstellen eines nutzerdefinierten Symbols
   int create=CreateCustomSymbol(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN);
   
//--- wenn der Fehlercode nicht 0 (erfolgreiche Symbolerstellung) und nicht 5304 (Symbol wurde bereits erstellt) ist - verlasse das Skript
   if(create!=0 && create!=5304)
      return;
      
//--- die Eigenschaften des Symbols abrufen und im Log drucken, auf dem das nutzerdefinierte Symbol basiert
//--- (Handelsmodus, Stop-Order-Installationsebene und Mindestabstand der Handelsoperationen)
   ENUM_SYMBOL_TRADE_EXECUTION origin_exe_mode = (ENUM_SYMBOL_TRADE_EXECUTION)SymbolInfoInteger(CUSTOM_SYMBOL_ORIGINSYMBOL_TRADE_EXEMODE);
   int origin_stops_level = (int)SymbolInfoInteger(CUSTOM_SYMBOL_ORIGINSYMBOL_TRADE_STOPS_LEVEL);
   int origin_freeze_level= (int)SymbolInfoInteger(CUSTOM_SYMBOL_ORIGINSYMBOL_TRADE_FREEZE_LEVEL);
   
   PrintFormat("The '%s' symbol from which the custom '%s' was created:\n"+
               "  Deal execution mode: %s\n  Stops Level: %d\n  Freeze Level: %d",
               CUSTOM_SYMBOL_ORIGINCUSTOM_SYMBOL_NAME,
               StringSubstr(EnumToString(origin_exe_mode), 23), origin_stops_levelorigin_freeze_level);
   
//--- andere Werte für die nutzerdefinierten Symboleigenschaften festlegen
   ResetLastError();
   bool res=true;
   res &=CustomSymbolSetInteger(CUSTOM_SYMBOL_NAMESYMBOL_TRADE_EXEMODESYMBOL_TRADE_EXECUTION_MARKET);
   res &=CustomSymbolSetInteger(CUSTOM_SYMBOL_NAMESYMBOL_TRADE_STOPS_LEVEL10);
   res &=CustomSymbolSetInteger(CUSTOM_SYMBOL_NAMESYMBOL_TRADE_FREEZE_LEVEL3);
 
//--- wenn beim Setzen einer der Eigenschaften ein Fehler aufgetreten ist, wird eine entsprechende Meldung im Log angezeigt
   if(!res)
      Print("CustomSymbolSetInteger() failed. Error "GetLastError());
   
//--- Abrufen und Drucken der geänderten nutzerdefinierten Symboleigenschaften im Log
//--- (Handelsmodus, Stop-Order-Installationsebene und Mindestabstand der Handelsoperationen)
   ENUM_SYMBOL_TRADE_EXECUTION custom_exe_mode = (ENUM_SYMBOL_TRADE_EXECUTION)SymbolInfoInteger(CUSTOM_SYMBOL_NAMESYMBOL_TRADE_EXEMODE);
   int custom_stops_level = (int)SymbolInfoInteger(CUSTOM_SYMBOL_NAMESYMBOL_TRADE_STOPS_LEVEL);
   int custom_freeze_level= (int)SymbolInfoInteger(CUSTOM_SYMBOL_NAMESYMBOL_TRADE_FREEZE_LEVEL);
   
   PrintFormat("Custom symbol '%s' based on '%s':\n"+
               "  Deal execution mode: %s\n  Stops Level: %d\n  Freeze Level: %d",
               CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_ORIGIN
               StringSubstr(EnumToString(custom_exe_mode), 23), custom_stops_levelcustom_freeze_level);
   
//--- einen Hinweis zu den Tasten zur Beendigung des Skripts im Kommentar des Charts anzeigen
   Comment(StringFormat("Press 'Esc' to exit or 'Del' to delete the '%s' symbol and exit"CUSTOM_SYMBOL_NAME));
 
//--- warten, bis die Tasten „Esc“ oder „Entf“ gedrückt werden, um die Endlosschleife zu verlassen
   while(!IsStopped() && TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE)==0)
     {
      Sleep(16);
      //--- durch das Drücken der Entf-Taste wird das erstellte nutzerdefinierte Symbol gelöscht
      if(TerminalInfoInteger(TERMINAL_KEYSTATE_DELETE)<0)
        {
         if(DeleteCustomSymbol(CUSTOM_SYMBOL_NAME))
            PrintFormat("Custom symbol '%s' deleted successfully"CUSTOM_SYMBOL_NAME);
         break;
        }
     }
//--- Chart vor dem Ende löschen
   Comment("");
   /*
   Ergebnis:
   The 'EURUSDsymbol from which the custom 'EURUSD.Cwas created:
     Deal execution modeINSTANT
     Stops Level0
     Freeze Level0
   Custom symbol 'EURUSD.Cbased on 'EURUSD':
     Deal execution modeMARKET
     Stops Level10
     Freeze Level3
   */
  }
//+------------------------------------------------------------------+
//| Nutzerdefiniertes Symbol erstellen, Fehlercode zurückgeben       |
//+------------------------------------------------------------------+
int CreateCustomSymbol(const string symbol_nameconst string symbol_pathconst string symbol_origin=NULL)
  {
//--- Definition des Namens eines Symbols, auf dem ein nutzerdefiniertes Symbol basieren soll.
   string origin=(symbol_origin==NULL ? Symbol() : symbol_origin);
   
//--- Wenn das Erstellen eines nutzerdefinierten Symbols fehlgeschlagen ist und nicht der Fehler 5304 aufgetreten ist, wird es im Log gemeldet.
   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);
     }
//--- Erfolg
   return(error);
  }
//+------------------------------------------------------------------+
//| Nutzerdefiniertes Symbol entfernen                               |
//+------------------------------------------------------------------+
bool DeleteCustomSymbol(const string symbol_name)
  {
//--- das Symbol aus dem Fenster der Marktübersicht ausblenden
   ResetLastError();
   if(!SymbolSelect(symbol_namefalse))
     {
      PrintFormat("SymbolSelect(%s, false) failed. Error %d"GetLastError());
      return(false);
     }
      
//--- Wenn das Löschen eines nutzerdefinierten Symbols fehlgeschlagen ist, wird das im Log gemeldet und „false“ zurückgegeben.
   ResetLastError();
   if(!CustomSymbolDelete(symbol_name))
     {
      PrintFormat("CustomSymbolDelete(%s) failed. Error %d"symbol_nameGetLastError());
      return(false);
     }
//--- Erfolg
   return(true);
  }

 

Siehe auch

SymbolInfoInteger