CustomSymbolSetMarginRate

Establece para el símbolo personalizado las tasas del margen de carga dependiendo del tipo y la dirección de la orden.

bool  CustomSymbolSetMarginRate(
   const string       symbol_name,              // nombre del símbolo
   ENUM_ORDER_TYPE    order_type,               // tipo de orden
   double             initial_margin_rate,      // tasa de margen de carga inicial
   double             maintenance_margin_rate   // tasa de margen de carga de mantenimiento
   );

Parámetros

symbol_name

[in]  Nombre del símbolo personalizado.

order_type

[in]  Tipo de orden.

initial_margin_rate

[in] Variable del tipo double  con el valor de la tasa de margen de carga inicial. El margen inicial es la cantidad mínima para ejecutar una transacción con un volumen de 1 lote en la dirección existente. Al multiplicar la tasa por el margen inicial, podemos obtener la cantidad de recursos que se reservará en la cuenta al colocar una orden del tipo indicado.

maintenance_margin_rate

[in] Variable del tipo double con el valor de la tasa de margen de carga de mantenimiento. El margen de mantenimiento es la cantidad mínima para mantener una posición abierta con un volumen de 1 lote en la dirección existente. Al multiplicar la tasa por el margen de mantenimiento, podemos obtener la cantidad de recursos que se reservará en la cuenta después de activarse una orden del tipo indicado.

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().

 

Ejemplo:

//+------------------------------------------------------------------+
//|                                    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"  // 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
 
#define   INITIAL_MARGIN_RATE       1.5         // coeficiente de cobro del margen inicial
#define   MAINTENANCE_MARGIN_RATE   1.5         // coeficiente de cobro del margen de mantenimiento
 
//+------------------------------------------------------------------+
//| 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
//--- (coeficientes de cobro de margen inicial y de mantenimiento para órdenes Buy y Sell)
   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);
   
//--- establecemos estas propiedades del símbolo personalizado en valores diferentes
   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);
 
//--- si se ha producido un error al configurar alguna de las propiedades, mostraremos un mensaje en el registro
   if(!res)
      Print("CustomSymbolSetMarginRate() failed. Error "GetLastError());
   
//--- obtenemos e imprimimos en el registro las propiedades modificadas del símbolo personalizado
//--- (coeficientes de cobro de margen inicial y de mantenimiento para órdenes Buy y Sell)
   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);
   
//--- 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:
     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
   */
  }
//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+
//| Retorna  los coeficientes de cobro de margen                     |
//+------------------------------------------------------------------+
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;
  }

 

Vea también

SymbolInfoMarginRate