O ABC das negociações no Forex

MetaQuotes | 18 fevereiro, 2016

Introdução


O trabalho em mercados financeiros representa, antes de tudo, operações de comércio. Todos nós, desde a infância, temos uma ideia intuitiva do que significa comprar e vender. Mas as negociações no Forex são algo especial. Este artigo trata das ideias necessárias à explicação de alguns termos. Nós também vamos abordar as funções do MQL4 que correspondem a esses termos.

Um pouco de história


Nós aprendemos nos nossos livros de história que o dinheiro não era usado na antiguidade: havia economias naturais e o escambo de produtos. A gênese (invenção) do dinheiro em si se tornou um grande passo à frente na história humana. Ela permitiu que as pessoas trocassem praticamente de tudo usando um artigo universal de comércio: o dinheiro. Enquanto a forma daquele artigo universal de troca variou entre diferentes países e épocas, o dinheiro sempre foi um artigo bastante raro, que podia ser dividido em partes e também podia ser armazenado e transportado com facilidade, como o ouro e a prata, por exemplo. E então, é claro, cada país passou a ter tanto a sua própria história e costumes quanto a sua própria moeda: uma forma de recurso monetário. Mas desde a antiguidade remota, existiam relações de troca entre os países, e os mercadores levavam produtos de um país para serem vendidos em outros. Os produtos eram trocados por produtos locais ou por um equivalente universal, como o ouro cunhado, por exemplo.

Nossa época


Hoje, os metais preciosos praticamente já não são usados como forma de pagamento, então os países usam taxas de câmbio em seus pagamentos. A taxa de câmbio define o preço da unidade da moeda de um país em unidades da moeda de outro país. Por exemplo, caso a taxa de EUR/USD for igual a 1,25, isso significa que para cada euro você pode comprar 1,25 dólares norte-americanos. Assim, é possível calcular a taxa de câmbio de quaisquer moedas livremente convertíveis. O mercado cambial de grande escala é geralmente realizado em operações de importação/exportação, então se tornou necessário introduzir pares cambiais padrão e quantias padrão a serem trocadas. O nome do par cambial (instrumento financeiro, um símbolo) no terminal do cliente MetaTrade 4 é escrito como uma combinação das abreviaduras dos nomes de moedas. Por exemplo, EURUSD é a taxa do euro em dólares norte-americanos, GBPJPY, a de libras esterlinas em ienes japoneses. Ou seja, a primeira moeda é sempre definida em relação à segunda.

Moeda corrente de depósito


Ainda que seja possível realizar negociações através do uso de vários pares cambiais, o resultado da negociação sempre é escrito em apenas uma moeda: a moeda corrente de depósito. Se a moeda corrente de depósito for o dólar norte-americano, lucros e perdas serão mostradas em dólares norte-americanos. Caso seja o euro, elas estarão, é claro, em euros. Você pode obter informações a respeito da sua moeda corrente de depósito usando a função AccountCurrency(). Ela pode ser usada para converter os resultados de negociações para a moeda corrente de depósito.

Tamanho padrão do contrato - Lote padrão


Ao trocar uma moeda por outra, usa-se a noção de "lote". O lote é a quantidade de mercadorias compradas ou vendidas. Um lote pode ter valores diferentes para pares cambiais diferentes. Atualmente, a maioria dos pares cambiais tem um valor de lote igual a 100 000 (cem). Mas 100 000 de que? Quando compramos, nós damos dinheiro em troca de mercadorias. Quando vendemos, nós recebemos dinheiro em troca de mercadorias. Mas com moedas, nós compramos e vendemos simultaneamente, pois recebemos uma moeda em troca de outra. É por isso que é uma prática comum considerar que nós recebemos a primeira moeda do par quando compramos e que damos, respectivamente, a segunda moeda. Um lote padrão para EURUSD é de 100 000 euros. Se nós comprarmos um lote padrão de EURUSD, significa que vamos receber 100 000 euros e dar uma certa quantia de dólares norte-americanos. Como recibos e pagamentos sempre devem ser iguais, 100 000 euros = X dólares norte-americanos. Como então nós podemos calcular a quantia de dólares norte-americanos? Vamos substituir euros por dólares norte-americanos na expressão:

EURO= k*USD
onde k é a taxa de câmbio de EURUSD;
100 000 (k*USD) = X USD => X= k*100 000;
se a taxa de câmbio de EURUSD for 1,25, então X=125 000.


Assim, ao comprar um lote de EURUSD, nós recebemos 100 000 euros e damos 125 000 dólares norte-americanos. Diz-se, às vezes, que euros foram comprados e dólares norte-americanos foram vendidos, o que significa que EURUSD foi comprado. Você pode obter informações a respeito do preço de um lote padrão para um par cambial a partir das especificações do contrato, assim como através do uso da função MarketInfo(), por exemplo:


MarketInfo(Symbol(), MODE_LOTSIZE);

Você também pode fornecer o nome em texto de um par cambial, e a função


MarketInfo("EURUSD",  MODE_LOTSIZE);

irá responder 100 000. Isso está escrito nos arquivos de ajuda: MODE_LOTSIZE é o tamanho do contrato na moeda base do símbolo. A moeda base para EURUSD é EUR (*). A moeda base para CHFJPY é o franco suíço, e o preço de um lote será expresso em francos suíços, respectivamente.


Resultado de negociações



Vamos considerar outro exemplo. Nós compramos 1 lote de EURUSD a 1,2500. O preço atual é 1,2600, então nós decidimos fechar o negócio, ou seja, vender 1 lote de EURUSD.

Anote o balanço:

Compra de 1 lote de EURUSD a 1,2500 (abertura de um negócio): + 100 000 euros - 125 000 dólares norte-americanos.
Venda de 1 lote de EURUSD a 1,2600 (fechamento do negócio): - 100 000 euros + 126 000 dólares norte-americanos.
Lucro resultante da operação: 0 EURO + $ 1000.

Conclusão: O lucro resultante da operação em EURUSD é expresso em dólares americanos, ou seja, na segunda moeda do par cambial. Tente calcular os resultados de outra negociação sozinho: 1 lote de GBPCHF foi comprado a 2,30 e fechado a 2,40. Que lucro será obtido como resultado e em qual moeda?


Alavancagem e margem


As negociações em mercados financeiros são atraentes porque permitem aos traders lucrar com a alavancagem. No nosso exemplo de compra de um lote de EURUSD, nós teríamos que ter mais que 100 000 dólares norte-americanos (125 000 a uma taxa de 1,25). A maioria dos corretores permitem que os traders usem a chamada 'alavancagem'. O valor da alavancagem mostra quantas vezes menos capital deve estar disponível para a abertura de uma posição. A quantia de dinheiro necessária para a abertura de uma posição é chamada de margem. Sem alavancagem, um lote de EURUSD custa 100 000 euros, ou 125 000 dólares norte-americanos a uma taxa de 1,2500. Se o corretor lhe fornecer a alavancagem de 100, a quantia de dinheiro necessária para a abertura de uma posição será reduzida 100 vezes, resultando em 1250 dólares americanos. O lucro que nós já calculamos permanece igual. Você pode ver o valor da alavancagem em relação a uma determinada conta de negociações através do uso da função AccountLeverage(). Portanto, a margem para a abertura de um lote é definida como:

Margem (na moeda base do símbolo) = preço do lote (na moeda base do símbolo) / tamanho da alavancagem.

O preço da moeda base do símbolo em termos da moeda de depósito é a razão entre a moeda base do símbolo e a moeda de depósito.


Determinação da margem


Exemplo:

MarketInfo("GBPJPY", MODE_LOTSIZE) resulta no valor de 70 000 (LS).
AccountCurrency() responde "EUR" (AC).
AccountLeverage() responde 50 (AL).
Como podemos calcular o preço do contrato de GBPJPY no presente momento (M)?

A moeda base é o GBP, então
M = 70000 GBP / AL = 70 000*GBPEUR / AL = 70000 / EURGBP / AL.

Se a taxa de EURGBP é 0,6786 no momento, então
M = 70000 / 0,6786 / 50 = 2063,07 EURO.

Se a alavancagem é igual a 100, a margem será duas vezes menor, 1031,54 euros. Para uma alavancagem de dez, a margem será:

M = 70000 / 0,6786 / 10 = 10315,36.


Portanto, o tamanho da alavancagem influencia apenas o tamanho da margem necessário à abertura de uma posição, mas não tem impacto sobre o tamanho do lucro obtido ao se negociar por um contrato. Também devemos lembrar que o tamanho da margem em euros (moeda de depósito) irá flutuar junto à taxa do EURGBP, pois a moeda base do símbolo é a libra esterlina. No nosso exemplo, nós substituímos GBPEUR por 1/EURGBP, pois há apenas um símbolo EURGBP disponível.



Ponto - a mudança mínima de preço


No Forex, os pares cambiais diferem uns dos outros não apenas em relação aos seus movimentos especiais, mas também em relação ao número de casas decimais em suas taxas. Por exemplo, a taxa de GBPJPY, em 29t de dezembro de 2006, era de 233,18, enquanto o preço de fechamento do GBPUSD era de 1,9587 no mesmo dia. A quantidade de casas decimais (precisão) pode ser determinada usando a função

MarketInfo(Symbol(), MODE_DIGITS);

Por exemplo, a função

MarketInfo("GBPJPY", MODE_DIGITS);

irá responder 2.

De modo correspondente, a mudança mínima de preço para um par cambial diferente também será diferente. Este valor geralmente é igual a 0,01 para pares incluindo ienes, para EURUSD ele é de 0,0001. O valor da mudança mínima de preço na moeda da cota é chamado de ponto, é pode ser obtido através da função:

MarketInfo(Symbol(), MODE_POINT);

Para pares cambiais, os valores das funções

MarketInfo(Symbol(), MODE_POINT); and MarketInfo(Symbol(), MODE_TICKSIZE);

são iguais.


Preço de ponto na moeda de depósito


Para avaliar riscos, o trader deve saber o tamanho da perda de uma posição aberta quando o preço está se movendo uma certa quantidade de pontos. Ou vice-versa, calcular o tamanho da perda aceitável em pontos sobre o tamanho da perda em termos monetários. Para este fim, ele pode usar a função

MarketInfo(Symbol(), MODE_TICKVALUE);
que retorna o valor de um ponto na moeda depósito.
Deve ser lembrado que o preço de um ponto vai mudar para pares de moedas , o segundo valor que não é depósito em moeda .

Margem por lote


A última função a ser considerada,

MarketInfo(Symbol(), MODE_MARGINREQUIRED);

responde o valor de ativos livres necessários para a abertura de uma posição de compra de um lote, ou seja, um preço de lote padrão no preço de venda.

Uso exemplar das funções consideradas acima


Abaixo você pode ver o script que mostra os dados para as funções consideradas acima em doze pares cambiais. Deve-se notar que a função personalizada MarginCalculate() deste script responde o preço de um lote padrão na cotação para compra (preço de venda). O script permite que se aprenda a aplicar as funções do MQL4 no uso dos algoritmos de gerenciamento financeiro e de risco do expert advisor.


//+------------------------------------------------------------------+
//|                                          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);
  }
//+------------------------------------------------------------------+

* Na maioria dos casos, a moeda base do símbolo é a primeira moeda no par cambial, mas podem existir diferentes configurações de servidor, é claro.