ABC del trading en Forex

MetaQuotes | 11 mayo, 2016

Introducción


Trabajar en los mercados financieros significa, en primer lugar, operaciones de trading. Todos nosotros, comenzando en la más temprana infancia, tenemos una idea intuitiva de qué es comprar y vender. Pero el trading en Forex es aún algo especial. Este artículo trata sobre las ideas necesarias para explicar algunos términos. También veremos las funciones MQL4 que se corresponden con dichos términos.

Un poco de historia


Sabemos por nuestro propios libros de texto sobre historia que el dinero no se usó en tiempos antiguos: eran economías naturales con un intercambio directo de productos. El origen (invención) del propio dinero supuso un gran paso en la historia del ser humano. Permitió a las personas intercambiar prácticamente cualquier cosa usando un artículo universal como mercancía: el dinero. Aunque la forma de ese artículo de intercambio universal varió de país a país y de época a época, el dinero siempre fue un artículo muy raro que podía dividirse en partes y también guardarse y transportarse fácilmente, por ejemplo, oro y plata. Y, por supuesto, cada país tiene ahora su propia historia y aduanas y su propia moneda: una forma de recursos monetarios. Pero ya en la remota antigüedad había relaciones comerciales entre los países y los comerciantes llevaban sus productos de un país a otro para venderlos. Las mercancías se intercambiaban por productos locales o por un equivalente universal, el oro en moneda.

Nuestros tiempos


En nuestros días, los metales preciosos no se usan en la práctica como medio de pago y los países usan los tipos de cambio en sus pagos. El tipo de cambio establece el precio de una unidad monetaria de un país en la unidad monetaria de otro. Por ejemplo, el tipo EUR/USD igual a 1.25 significa que por un euro puedes obtener 1.25 dólares estadounidenses. De este modo, para cualquier par de monedas libremente convertibles es posible calcular su tipo de cambio. Los grandes intercambios de moneda extranjera los suelen realizar los bancos en operaciones de importación/exportación, por lo que se hace necesario introducir pares de moneda estándar y cantidades estándar a intercambiar. El nombre de un par de monedas (un instrumento financiero, un símbolo) en el terminal de cliente de MetaTrader 4 se escribe como una combinación de las abreviaturas del nombre de la moneda. Por ejemplo, EURUSD es el tipo de cambio de euro a dólares estadounidenses, GBPJPY es el de libras esterlinas en yenes japoneses, es decir, la primera moneda siempre se define en términos de la segunda.

Moneda de depósito


Aunque es posible realizar transacciones usando varios pares de monedas, el resultado de la transacción siempre se escribe en una moneda: la moneda de depósito. Si la moneda de depósito es el dólar estadounidense, los beneficios y pérdidas se mostrarán en dólares estadounidenses, si es el euro, serán, por supuesto, en euros. Puede obtener información sobre la moneda de depósito usando la función AccountCurrency(). Puede usarse para convertir los resultados del trading en moneda de depósito.

Tamaño de contrato estándar - Lote estándar


Cuando se intercambia una moneda por otra, se utiliza la noción de "lote". El lote es la cantidad de productos comprados o vendidos. Un lote puede tener distintos valores para distintos pares de moneda. Actualmente, la mayoría de pares de monedas tienen un valor de lote igual a 100.000 (un centenar). Pero ¿un centenar de qué? Cuando compramos, damos dinero a cambio de productos. Cuando vendemos, obtenemos dinero a cambio de productos. Pero con las monedas, compramos y vendemos simultáneamente ya que obtenemos una moneda por otra. Por esta razón es práctica común considera que obtenemos la primera divisa del par cuando compramos y damos la segunda divisa, respectivamente. Un lote estándar para EURUSD es 100.000 euros. Si compramos un lote estándar de EURUSD, esto significa que obtenemos 100.000 euros y damos un número de dólares estadounidenses. Como las recepciones y pagos deben ser siempre iguales, 100.000 euros = X dólares estadounidenses. ¿Cómo podemos calcular entonces la cantidad de dólares estadounidenses? Sustituyamos los euros por dólares estadounidenses en la expresión:

EURO= k*USD
donde k es el tipo de cambio de EURUSD;
100 000 (k*USD) = X USD => X= k*100 000;
si el tipo de cambio actual de EURUSD es 1.25, entonces X=125 000.


De este modo, al comprar un lote de EURUSD, obtenemos 100.000 euros y damos 125.000 dólares estadounidenses. Algunas veces se dice que se compraron euros y se vendieron dólares estadounidenses, lo que significa que se compró EURUSD. Puede obtener información sobre el precio de un lote estándar para un par de divisas a partir de la especificación del contrato, así como usando la función MarketInfo(), por ejemplo:



MarketInfo(Symbol(), MODE_LOTSIZE);

También puede dar el nombre del texto de un par de divisas, y la función


MarketInfo("EURUSD",  MODE_LOTSIZE);

devolverá 100.000. Está escrita en los archivos de ayuda: MODE_LOTSIZE es el tamaño del contrato en la moneda base del símbolo. La moneda base para el EURUSD es EUR (*). La moneda base para CHFJPY es el franco suizo y el precio de un lote se expresará en francos suizos respectivamente.


Resultado de la transacción



Vamos a considerar otro ejemplo. Compramos 1 lote de EURUSD a 1.2500. El precio actual es 1.2600, por lo que decidimos cerrar la transacción, es decir, vender 1 lote de EURUSD.

Escribimos el saldo:

Compra de 1 lote de EURUSD a 1.2500 (abrió una transacción): + 100.000 euros - 125.000 dólares estadounidenses.
Venta de 1 lote de EURUSD a 1.2600 (cerró la transacción): - 100.000 euros + 126.000 dólares estadounidenses.
Beneficio resultante de la operación: 0 EURO + $ 1000.

Conclusión: El beneficio resultante de la operación en EURUSD se expresa en dólares estadounidenses, es decir, en la segunda divisa del par de divisas. Intente calcular los resultados de otra transacción usted mismo: 1 lote de GBPCHF se ha comprado a 2.30 y se ha cerrado a 2.40. ¿Qué beneficio se obtendrá como resultado y en qué divisa?


Apalancamiento y margen


El trading en los mercados financieros es atractivo ya que permite a los traders beneficiarse del apalancamiento. En nuestro ejemplo, al comprar un lote de EURUSD tendríamos que tener más de 100.000 dólares estadounidenses (125.000 al tipo de cambio de 1.25). La mayoría de brókeres permiten a los traders usar el llamado 'apalancamiento'. El valor del apalancamiento muestra cuántas veces un menor capital debe estar disponible para abrir una posición. La cantidad de dinero necesario para abrir una posición se llama margen. Sin apalancamiento, un lote de EURUSD cuesta 100.000 euros, o 125.000 dólares estadounidenses al tipo de cambio de 1.2500. Si su bróker le proporciona un apalancamiento de 100, la cantidad de dinero necesario para abrir una posición disminuirá 100 veces y dará lugar a 1250 dólares estadounidenses. El beneficio que ya hemos calculado sigue siendo el mismo. Puede ver el valor del apalancamiento en una cuenta de trading usando la función AccountLeverage(). De este modo, el margen para abrir un lote se define como:

Margen (en la moneda base del símbolo) = precio del lote (en la moneda base del símbolo) / tamaño del apalancamiento (Leverage_size).

El precio de la moneda base del símbolo en términos de la moneda de depósito es el cociente entre la moneda base del símbolo y la moneda de depósito.


Determinación del margen


Ejemplo:

MarketInfo("GBPJPY", MODE_LOTSIZE) da el valor de 70.000 (LS).
AccountCurrency() devuelve "EUR" (AC).
AccountLeverage() devuelve 50 (AL).
¿Cómo podemos calcular el precio del contrato GBOJPY en el momento actual (M)?

La moneda base es GBP, por lo que
M = 70000 GBP / AL = 70 000*GBPEUR / AL = 70000 / EURGBP / AL.

Si el tipo de cambio EURGBP es 0.6786 actualmente, entonces
M = 70000 / 0.6786 / 50 = 2063.07 EURO.

Si el apalancamiento es igual a 100, el margen será dos veces más pequeño - 1031.54 euros. Para un apalancamiento de diez, el margen será:

M = 70000 / 0.6786 / 10 = 10315.36.


De este modo, el tamaño del apalancamiento influye solo en el tamaño del margen necesario para abrir una posición, pero no afecta al tamaño del beneficio obtenido al operar con un contrato. Debe también recordarse que el tamaño del margen en euros (moneda de depósito) fluctuará junto con el tipo de cambio EURGBP ya que la moneda base del símbolo es la libra esterlina. En nuestro ejemplo, hemos sustituido GBPEUR por 1/EURGBP ya que solo está el símbolo EURGBP disponible.



Punto - El cambio del precio mínimo


Los pares de divisas en Forex se diferencian entre sí, no solo por sus movimientos especiales, sino también por el número de posiciones decimales en sus tipos de cambio. Por ejemplo, el tipo de cambio GBPJPY a 29 de diciembre de 2006 fue 233.18, mientras que el precio de cierre de GBPUSD fue 1.9587 el mismo día. La cantidad de posiciones decimales (precisión) puede establecerse usando la función

MarketInfo(Symbol(), MODE_DIGITS);

Por ejemplo, la función

MarketInfo("GBPJPY", MODE_DIGITS);

devolverá 2.

En consecuencia, el cambio del precio mínimo para distintos pares de divisas también será distinto. Este valor suele ser igual a 0.01 para los pares que incluyen yenes, para EURUSD es 0.0001. El valor del cambio del precio mínimo en la moneda cotizada se llama Punto y puede obtenerse usando la función:

MarketInfo(Symbol(), MODE_POINT);

Para los pares de divisas, los valores de las funciones

MarketInfo(Symbol(), MODE_POINT); and MarketInfo(Symbol(), MODE_TICKSIZE);
son los mismos.


Punto de precio en la moneda de depósito


Para evaluar los riesgos, el trader debe conocer el tamaño de la pérdida para una posición abierta cuando el precio se desplaza una cierta cantidad de puntos. O al contrario, calcular el tamaño aceptable de la pérdida en puntos sobre el tamaño de la pérdida en términos monetarios. Para este propósito, él o ella puede utilizar esta función

MarketInfo(Symbol(), MODE_TICKVALUE);


Margen por lote


La última función considerada,

MarketInfo(Symbol(), MODE_MARGINREQUIRED);

devuelve la cantidad de activos libres necesarios para abrir una posición de compra de un lote, es decir, un precio de lote estándar al precio Ask.

Ejemplo de uso de las funciones anteriores


A continuación puede ver el script que muestra los datos para las funciones consideradas anteriormente en doce pares de divisas. Debe recordarse que la función personalizada MarginCalculate() de este script devuelve el precio de un lote estándar al precio Bid (precio de venta). El siguiente script nos permite aprender a aplicar las funciones MQL4 para usar algoritmos de asesores expertos de gestión de dinero y gestión de riesgos.


//+------------------------------------------------------------------+
//|                                          SimplySpecification.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                       https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
string SymbolsArray[13] = {"","USDCHF","GBPUSD","EURUSD","USDJPY",
"AUDUSD","USDCAD","EURGBP","EURAUD","EURCHF","EURJPY","GBPJPY","GBPCHF"};
//+------------------------------------------------------------------+
//| string SymbolByNumber                                            |
//+------------------------------------------------------------------+
string GetSymbolString(int Number)
  {
//----
   string res = "";
   res = SymbolsArray[Number];   
//----
   return(res);
  }
//+------------------------------------------------------------------+
//| A very simple function to calculate margin for Forex symbols.    |
//| It automatically calculates in the account's base currency and   |
//| does not work for complicated rates that do not have direct      |
//| recalculation into the trade account's base currency.            |
//+------------------------------------------------------------------+
double MarginCalculate(string symbol, double volume)
  {
   string first    = StringSubstr(symbol,0,3); // the first symbol, for example,  EUR
   string second   = StringSubstr(symbol,3,3); // the second symbol, for example, USD
   string currency = AccountCurrency();        // deposit currency, for example,  USD
   double leverage = AccountLeverage();        // leverage, for example,          100
// contract size, for example, 100000
   double contract = MarketInfo(symbol, MODE_LOTSIZE);
   double bid      = MarketInfo(symbol, MODE_BID);      // Bid price
//---- allow only standard forex symbols like XXXYYY
   if(StringLen(symbol) != 6)
     {
      Print("MarginCalculate: '",symbol,"' must be standard forex symbol XXXYYY");
      return(0.0);
     }
//---- check for data availability
   if(bid <= 0 || contract <= 0) 
     {
      Print("MarginCalculate: no market information for '",symbol,"'");
      return(0.0);
     }
//---- check the simplest variations - without cross currencies
   if(first == currency)   
       return(contract*volume / leverage);           // USDxxx
   if(second == currency)  
       return(contract*bid*volume / leverage);       // xxxUSD
//---- check normal cross currencies, search for direct conversion through deposit currency
   string base = currency + first;                   // USDxxx
   if(MarketInfo(base, MODE_BID) > 0) 
       return(contract / MarketInfo(base, MODE_BID)*volume / leverage);
//---- try vice versa
   base = first + currency;                          // xxxUSD
   if(MarketInfo(base, MODE_BID) > 0) 
       return(contract*MarketInfo(base, MODE_BID)*volume / leverage);
//---- direct conversion is impossible
   Print("MarginCalculate: can not convert '",symbol,"'");
   return(0.0);
  }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   for(int i = 1; i < 13; i++)
     {
      Print("Symbol=",GetSymbolString(i),"  spread=",MarketInfo(GetSymbolString(i),
      MODE_SPREAD),"  margin at 1 lot=",MarginCalculate(GetSymbolString(i),1),
      "  MODE_TICKVALUE=",MarketInfo(GetSymbolString(i),MODE_TICKVALUE),
      ", MODE_TICKSIZE=",MarketInfo(GetSymbolString(i),MODE_TICKSIZE),
      " MODE_MARGINREQUIRED=",MarketInfo(GetSymbolString(i),MODE_MARGINREQUIRED));
     } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

* En la mayoría de los casos, la moneda base del símbolo es la primera moneda en el par de divisas, pero ahí puede haber distintas configuraciones del servidor, por supuesto.