CustomSymbolSetMarginRate

Setzt die Koeffizienten der Margin je nach Typ und Richtung einer Order für das nutzerdefinierte Symbol.

bool  CustomSymbolSetMarginRate(
   const string       symbol_name,              // Symbolname
   ENUM_ORDER_TYPE    order_type,               // Auftragstyp
   double             initial_margin_rate,      // Koeffizient der Initial Margin
   double             maintenance_margin_rate   // Koeffizient der Maintenance Margin
   );

Parameter

symbol_name

[in]  Name des nutzerdefinierten Symbols.

order_type

[in]  Auftragstyp.

initial_margin_rate

[in] Variable vom Typ double mit dem Wert des Koeffizienten der Initial Margin. Initial Margin - der Betrag einer Sicherheitsleistung für die Ausführung eines Handels mit dem Volumen von einem Lot in der entsprechenden Richtung. Wenn wir den Koeffizienten mit der Initial Margin multiplizieren, erhalten wir den Betrag, der bei der Platzierung einer Order des angegebenen Typs auf dem Konto reserviert wird.

maintenance_margin_rate

[in] Variable vom Typ double mit dem Wert des Koeffizienten der Maintenance Margin. Maintenance Margin – der Mindestbetrag für den Erhalt einer offenen Position mit dem Volumen von einem Lot in die entsprechende Richtung. Wenn wir den Koeffizienten mit der Maintenance Margin multiplizieren, erhalten wir den Betrag, der nach der Auslösung einer Order des angegebenen Typs reserviert wird.

Rückgabewert

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

 

Beispiel:

//+------------------------------------------------------------------+
//|                                    CustomSymbolSetMarginRate.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
 
#define   INITIAL_MARGIN_RATE       1.5         // Rate der Initial Margin
#define   MAINTENANCE_MARGIN_RATE   1.5         // Rate der Maintenance Margin
 
//+------------------------------------------------------------------+
//| 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
//--- (Initial Margin und Maintenance Margin für Kauf- und Verkaufsaufträge)
   double initial_margin_rate_buy=0;
   double maintenance_margin_rate_buy=0;
   double initial_margin_rate_sell=0;
   double maintenance_margin_rate_sell=0;
   
   if(!GetSymbolMarginRate(CUSTOM_SYMBOL_ORIGINORDER_TYPE_BUYinitial_margin_rate_buymaintenance_margin_rate_buy))
      return;
   if(!GetSymbolMarginRate(CUSTOM_SYMBOL_ORIGINORDER_TYPE_SELL,initial_margin_rate_sell,maintenance_margin_rate_sell))
      return;
   
   PrintFormat("The '%s' symbol from which the custom '%s' was created:\n"+
               "  Buy order initial margin rate: %f\n  Buy order maintenance margin rate: %f\n"+
               "  Sell order initial margin rate: %f\n  Sell order maintenance margin rate: %f",
               CUSTOM_SYMBOL_ORIGINCUSTOM_SYMBOL_NAME,
               initial_margin_rate_buymaintenance_margin_rate_buyinitial_margin_rate_sellmaintenance_margin_rate_sell);
   
//--- andere Werte für die nutzerdefinierten Symboleigenschaften festlegen
   ResetLastError();
   bool res=true;
   res &=CustomSymbolSetMarginRate(CUSTOM_SYMBOL_NAMEORDER_TYPE_BUYINITIAL_MARGIN_RATEMAINTENANCE_MARGIN_RATE);
   res &=CustomSymbolSetMarginRate(CUSTOM_SYMBOL_NAMEORDER_TYPE_SELL,INITIAL_MARGIN_RATEMAINTENANCE_MARGIN_RATE);
 
//--- wenn beim Setzen einer der Eigenschaften ein Fehler aufgetreten ist, wird eine entsprechende Meldung im Log angezeigt
   if(!res)
      Print("CustomSymbolSetMarginRate() failed. Error "GetLastError());
   
//--- Abrufen und Drucken der geänderten nutzerdefinierten Symboleigenschaften im Log
//--- (Initial Margin und Maintenance Margin für Kauf- und Verkaufsaufträge)
   if(!GetSymbolMarginRate(CUSTOM_SYMBOL_NAMEORDER_TYPE_BUYinitial_margin_rate_buymaintenance_margin_rate_buy))
      return;
   if(!GetSymbolMarginRate(CUSTOM_SYMBOL_NAMEORDER_TYPE_SELL,initial_margin_rate_sell,maintenance_margin_rate_sell))
      return;
   
   PrintFormat("Custom symbol '%s' based on '%s':\n"+
               "  Buy order initial margin rate: %f\n  Buy order maintenance margin rate: %f\n"+
               "  Sell order initial margin rate: %f\n  Sell order maintenance margin rate: %f",
               CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_ORIGIN
               initial_margin_rate_buymaintenance_margin_rate_buyinitial_margin_rate_sellmaintenance_margin_rate_sell);
   
//--- 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:
     Buy order initial margin rate1.000000
     Buy order maintenance margin rate0.000000
     Sell order initial margin rate1.000000
     Sell order maintenance margin rate0.000000
   Custom symbol 'EURUSD.Cbased on 'EURUSD':
     Buy order initial margin rate1.500000
     Buy order maintenance margin rate1.500000
     Sell order initial margin rate1.500000
     Sell order maintenance margin rate1.500000
   */
  }
//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+
//| Return margin ratios                                             |
//+------------------------------------------------------------------+
bool GetSymbolMarginRate(const string symbolconst ENUM_ORDER_TYPE order_typedouble &initial_margin_ratedouble &maintenance_margin_rate)
  {
   ResetLastError();
   if(!SymbolInfoMarginRate(symbolorder_typeinitial_margin_ratemaintenance_margin_rate))
     {
      PrintFormat("%s: SymbolInfoMarginRate(%s, %s) failed. Error %d",__FUNCTION__symbolEnumToString(order_type), GetLastError());
      return false;
     }
   return true;
  }

 

Siehe auch

SymbolInfoMarginRate