Скачать MetaTrader 5

Азбука торговли валютами

23 января 2007, 12:28
MetaQuotes Software Corp.
10
5 092

Работа на финансовых рынках - это прежде всего торговые операции. Все мы на интуитивном уровне с детства получаем представление об операциях покупки и продажи. Но торговля на валютном рынке имеет свою специфику. В этой статье мы рассмотрим понятия, необходимые для толкования некоторых терминов, и рассмотрим соответствующие этим понятиям функции языка MQL 4 .

Немного истории


Из учебников истории мы знаем, что в древние времена деньги не использовались – существовало натуральное хозяйство и совершался натуральный обмен.  Возникновение (изобретение) денег само по себе явилось большим шагом вперед по пути прогресса в истории человечества. Появилась возможность обмена практически всех товаров на один универсальный вид товара - деньги. Хотя, в зависимости от страны и эпохи, вид универсального товара менялся, но всегда  в качестве денег выступал достаточно редкий вид товара, который к тому же допускал дробление и удобное хранение и перемещение, например, золото или серебро. И, естественно, что каждая страна (государство) к настоящему времени имеет не только свою историю и обычаи, но и свою валюту - вид денежных средств. Но еще в древности существовали торговые связи между государствами и купцы-торговцы везли товары из одной страны для продажи в другой стране. Продажа товара осуществлялась обменом либо на местные товары, либо на всеобщий эквивалент, например, золотые монеты.
 

Наше время


В наше время драгоценные металлы как способ оплаты практически не используются и при расчетах между собой страны используют обменные курсы. Обменный курс устанавливает цену валютной единицы одной страны в единицах валюты другой страны. Например, курс EUR/USD, равный 1.25, означает: за одну единицу европейской валюты «евро» дают 1.25 единицы валюты «доллар США». Таким образом, для любых двух свободно конвертируемых валют можно вычислить курс обмена одной валюты на другую. Крупные операции по обмену валют обычно совершают банки при осуществлении операций импорта-экспорта, поэтому потребовалось ввести стандартные валютные пары и стандартные размеры обмениваемых сумм. Название валютной пары (финансового инструмента) в терминале МетаТрейдер 4 записывается как сочетание сокращений от названий валют. Например, EURUSD - курс евро в долларах США, GBPJPY - курс британского фунта в японских иенах, то есть стоимость первой валюты всегда выражается в единицах второй валюты.

Валюта депозита


Несмотря на то, что имеется возможность проводить торговые операции со множеством валютных пар, результат операций всегда записывается в одной валюте - валюте депозита. Если валюта депозита доллар, то прибыли и убытки будут отражаться в долларах, если валюта депозита евро – то, соответственно, в евро. Информацию о валюте депозита позволяет получить функция  AccountCurrency(). Эту функцию можно использовать для конвертирования результатов торговых операций в валюту депозита.

Размер стандартного контракта - стандартный лот


При обмене одной валюты на другую пользуются понятием «лот». Лот - это количество покупаемого/продаваемого товара. Для каждой валютной пары лот может иметь свое значение, на данный момент большинство валютных пар имеют значение одного лота равным 100 000 (ста тысячам). Но 100 000 чего?   Когда мы покупаем, то мы отдаем деньги в обмен на товар. Когда мы продаем - мы получаем деньги в обмен на товар. В случае с валютами мы покупаем и продаем одновременно, так как в обмен на одну валюту получаем другую валюту. Поэтому принято, что мы при покупке получаем первую валюту, а отдаем вторую. Стандартный лот для инструмента EURUSD - 100 000 евро. Покупка одного стандартного лота EURUSD означает поступление 100 000 EURO и расход некоторого количества долларов США. Приход равен расходу, значит 100 000 EURO = X долларов США. Как узнать необходимое количество долларов США? Заменяем в выражении евро на доллары: 
    

       EURO= k*USD, 
      где k - обменный курс EURUSD;  
      100 000 (k*USD) = X USD         =>          X= k*100 000; 
      Если текущий курс EURUSD равен 1.25, то X=125 000.


Таким образом, при покупке одного лота EURUSD, мы получаем 100 000 EUR и отдаем 125 000 $. Иногда говорят - купили EURO и продали доллары, что равнозначно покупке EURUSD. Стоимость стандартного лота для валютной пары можно узнать из спецификации контракта, а также при помощи функции  MarketInfo(), например:


 
MarketInfo(Symbol(), MODE_LOTSIZE);

Можно указать текстовое название валютной пары и функция

 
MarketInfo("EURUSD",  MODE_LOTSIZE);

возвратит 100 000. В справке сказано: MODE_LOTSIZE -  размер контракта в базовой валюте инструмента. Базовой валютой инструмента EURUSD является EUR (*). Для валютной пары CHFJPY базовой валютой будет швейцарский франк, и стоимость одного лота будет выражаться уже в швейцарских франках.



Результат торговой операции


Теперь рассмотри дальше. Мы купили EURUSD в размере одного лота по цене 1.2500. Текущая цена 1.2600 и мы решили закрыть сделку, то есть продать EURUSD в том же объеме один лот.

Записываем Баланс:


      Покупка EURUSD 1 лот по 1.2500 (открыли сделку)  :     + 100 000 EURO    - $125 000; 
      Продажа EURUSD 1 лот по 1.2600 (закрываем сделку):  - 100 000 EURО    + $126 000;
      Итоговая прибыль от операции:                                      0 EURO              + $ 1000;

Вывод: полученная от операции по EURUSD прибыль выражена в долларах США, то есть во второй валюте пары. Попробуйте сами подсчитать результаты другой сделки: купили один лот GBPCHF по цене 2.30 и закрыли по цене 2.40. Какова будет прибыль и в какой валюте?


Плечо и маржа


Торговые операции на финансовых рынках привлекательны по той причине, что позволяют извлекать прибыль с эффектом рычага. В примере с покупкой одного лота  EURUSD нам потребовалось бы иметь на счету более 100 000 долларов ($125 000 при курсе 1.25). Большинство брокеров позволяют трейдерам использовать кредитное плечо. Значение плеча показывает, во сколько раз меньше средств требуется для открытия позиции. Средства, необходимые для открытия позиции, называются маржой. Без плеча стоимость одного лота EURUSD составляет 100 000 EUR или $125 000 по курсу 1.2500. Если брокер дает плечо 100, то сумма средств, необходимых для открытия позиции, уменьшается в 100 раз и составляет $1250. При этом прибыль, которую мы посчитали, остается такой же. Значение плеча на данном торговом счете можно узнать с помощью функции AccountLeverage(). Таким образом, маржа на открытие одного лота определяется как:


      Маржа (в базовой валюте инструмента) = Стоимость лота (в базовой валюте инструмента) / Размер_плеча.

При этом стоимость базовой валюты инструмента в валюте депозита можно узнать как курс базовой валюты инструмента к валюте депозита.


Расчет маржи


Пример:
 
      MarketInfo("GBPJPY", MODE_LOTSIZE) дает значение 70 000 (LS).
      AccountCurrency() возвращает значение "EUR" (AC). 
      AccountLeverage() возвращает 50 (AL).
      Как нам вычислить стоимость контракта GBPJPY на текущий момент (M)?  

Базовая валюта GBP, поэтому 

      M 
= 70000 GBP / AL = 70 000*GBPEUR / AL = 70000 / EURGBP / AL.

Если в данный момент EURGBP составляет 0.6786, то

      M
= 70000 / 0.6786 / 50 = 2063.07 EURO.

С плечом, равным 100, маржа будет в два раза меньше - 1031.54 евро. Для плеча, равного десяти, маржа будет равна


      M = 70000 / 0.6786 / 10 = 10315.36.

Таким образом, размер плеча влияет только на размер маржи, необходимой для открытия позиции, но не влияет на размер прибыли, получаемой при торговле одним контрактом. И не забудем, что размер маржи в евро (валюта депозита) будет колебаться вместе с курсом EURGBP, так как базовая валюта инструмента - британский фунт. В этом примере мы заменили курс GBPEUR на 1 / EURGBP, так как имеется инструмент EURGBP.





Пункт - минимальное изменение цены


Валютные пары на рынке Forex отличаются между собой не только характером движения, но и количеством знаков после запятой в обменном курсе. Например, курс GBPJPY на 29.12.2006 составлял 233.18, а значение GBPUSD на закрытие этого же дня составляет 1.9587. Количество значащих цифр (точность) можно узнать с помощью функции


MarketInfo(Symbol(), MODE_DIGITS);

Например, функция


MarketInfo("GBPJPY", MODE_DIGITS);

вернет 2.

Соответственно, минимальное изменение цены для различных валютных пар будет тоже отличаться. Для иеновыx пар это значение обычно равно 0.01, а для EURUSD оно составляет 0.0001 . Значение минимального изменения цены в валюте котировки называют пунктом (Point), и получить его можно с помощью  функции:


MarketInfo(Symbol(), MODE_POINT);

Для валютных пар значения функций


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


равны.


Стоимость пункта в валюте депозита


Для расчета рисков трейдеру требуется знать величину убытка по открытой позиции при движении цены на определенное количество пунктов. Или наоборот - рассчитать допустимый размер убытка в пунктах от размера убытка в денежном выражении. Для этих целей подойдет функция


MarketInfo(Symbol(), MODE_TICKVALUE);
 

которая возвращает значение одного пункта в валюте депозита. Необходимо помнить, что стоимость одного пункта будет меняться для валютных пар,  у которых вторая валюта не равна валюте депозита.

Размер маржи на один лот


Последняя рассматриваемая функция


MarketInfo(Symbol(), MODE_MARGINREQUIRED);

возвращает размер свободных средств, необходимых для открытия одного лота на покупку, то есть стоимость одного стандартного лота по цене Ask.

Пример использования рассмотренных функций


Ниже приводится скрипт, который выводит данные по рассмотренным функциям для двенадцати валютных пар. Необходимо отметить, что пользовательская функция MarginCalculate() в этом скрипте возвращает стоимость одного стандартного лота по цене Bid  (продажи). Приведенный скрипт позволяет научиться применять функции языка MQL 4 для использования в экспертах алгоритмов Money Management (MM - управление капиталом) и Risk Management (RM - управление рисками).


//+------------------------------------------------------------------+
//|                                          SimplySpecification.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                       http://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);
  }
//+------------------------------------------------------------------+
//| Очень простая функция расчета маржи для форексных символов.      |
//| Расчет автоматически идет в базовой валюте счета и не работает   |
//| для сложных видов курсов, которые не имеют прямого пересчета     |
//| в базовую валюту торгового счета.                                |
//+------------------------------------------------------------------+
double MarginCalculate(string symbol, double volume)
  {
   string first    = StringSubstr(symbol,0,3); // первый символ,   например EUR
   string second   = StringSubstr(symbol,3,3); // второй символ,   например USD
   string currency = AccountCurrency();        // валюта депозита, например USD
   double leverage = AccountLeverage();        // кредитное плечо, например 100
// размер контракта, например 100000
   double contract = MarketInfo(symbol, MODE_LOTSIZE);
   double bid      = MarketInfo(symbol, MODE_BID);      // цена бид
//---- допускаем только стандартные форексные символы XXXYYY
   if(StringLen(symbol) != 6)
     {
      Print("MarginCalculate: '",symbol,"' must be standard forex symbol XXXYYY");
      return(0.0);
     }
//---- проверка наличия данных
   if(bid <= 0 || contract <= 0) 
     {
      Print("MarginCalculate: no market information for '",symbol,"'");
      return(0.0);
     }
//---- проверяем самые простые варианты - без кроссов
   if(first == currency)   
       return(contract*volume / leverage);           // USDxxx
   if(second == currency)  
       return(contract*bid*volume / leverage);       // xxxUSD
//---- проверяем обычные кроссы, ищем прямое преобразование через валюту депозита
   string base = currency + first;                   // USDxxx
   if(MarketInfo(base, MODE_BID) > 0) 
       return(contract / MarketInfo(base, MODE_BID)*volume / leverage);
//---- попробуем наоборот
   base = first + currency;                          // xxxUSD
   if(MarketInfo(base, MODE_BID) > 0) 
       return(contract*MarketInfo(base, MODE_BID)*volume / leverage);
//---- нет возможности прямого перерасчета
   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);
  }
//+------------------------------------------------------------------+

* В подавляющем большинстве случаев базовой валютой инструмента является первая валюта валютной пары, но могут быть и другие настройки сервера.

Прикрепленные файлы |
Последние комментарии | Перейти к обсуждению на форуме трейдеров (10)
Rosh
Rosh | 24 янв 2007 в 17:48
Diam0nd:

Попробуйте сами подсчитать результаты другой сделки: купили один лот GBPCHF по цене 2.30 и закрыли по цене 2.40. Какова будет прибыль и в какой валюте?

Uvagaemiy Rosh, sovetuiu v takih slu4ayah davaty pravilnie otveti v konce statii (nu ili tam gde Vi sami s4itaete nugnim) t.k. dumaiu te kto v etom nov, hoteli bi proverity pravilno li oni vse pos4itali :)


Да, наверно, надо. Спасибо за замечание.


Покупка 1 лота GBPCHF по цене 2.3000: +100'000 GBP - 230'000 CHF

Продажа 1 лота GBPCHF по цене 2.4000: -100'000 GBP + 240'000 CHF

Итого: 0 GBP +10'000 CHF


Значит результатом этой торговой операции будет прибыль в 10'000 швейцарских франков.

Валюта депозита - USD. Значит нам нужно перевести эту прибыль в доллары США.

Курс на 27.12.2006 (тогда GBPCHF впервые достиг значения 2.40) составлял USDCHF~1.2250. То есть 1 USD=1.225 (CHF) => 1CHF=1/1.225 (USD)

Тогда прибыль составит 10'000 CHF = 10'000/ 1.2250 (USD) = 8.163.27 USD.

При этом можно подсчитать маржу, задействованную для этой операции (с разными значениями плеча), и можно пересчитать прибыль в EUR, если валюта депозита EUR.

MQL4 Comments
MQL4 Comments | 21 июн 2007 в 03:01
Додбрый день!

Немного не в тему вопрос: а есть ли у когонибудь експерт или скрипт который записывает все сделки и операции по ним в логфайл в риалтайме?
и второй: есть ли советник который читает этот лог файл и ставит такие же ордера на другом терминале?
Rosh
Rosh | 21 июн 2007 в 16:16
Ищите по словам "копировщик сигналов". В основном продают.
Sart
Sart | 21 авг 2007 в 15:50
Diam0nd:
Otli4naya statia! Ya kone4no mnogo vsiakih 4ital, no 4tobi TAK vse bilo podrobno obyasneno. Klass! Pobolee bi takih, uveren mnogim prigoditsia :))
Странно, а мне кажется тут все сложней.
Пусть, например, имеем инструмент
ij,
где:
i - базовая валюта
j - валюта котировки
Понятно, что i = ASKij(t) * j, i = BIDij(t) *j

Предположим, мы покупаем единицу базовой валюты в момент времени t1:
i = ASKij(t1) * j (1)

А теперь мы продаем единицу базовой валюты в момент времени t2:

i = BIDij(t2) * j (2)

Таким образом мы имеем навар/убыток:

P/L = [BIDij(t2) - ASKij(t1)] * j (3)

(3) - В валюте котировки

Переведем (3) в валюту депозита при условии, что имеем инструмент - dj, где d - валюта депозита.

Для этого сначала переведем (1),покупку: i = ASKij(t1) * j в валюту депозита.
Валюту d мы имеем, значит мы ее можем обменять по курсу в момент времени t1: d = BIDdj(t1) * j, отсюда - j = d/BIDdj(t1)
После подстановки в (1) имеем выражение операции покупки единицы базовой валюты:
i = ASKij(t1) * d/BIDdj(t1) (1-1)

Теперь переведем (2) продажу: i = BIDij(t2) * j в валюту депозита.
Валюту j мы имеем, значит мы можем ее обменять по курсу в момент времени t2: d = ASKdj(t2) * j, отсюда - j = d/ASKdj(t2)
После подстановки в (2) имеем выражение операции продажи единицы базовой валюты:
i = BIDij(t2) * d/ASKdj(t2) (2-2)

а теперь прибыли/убытки:

P/L = [BIDij(t2) * ASKdj(t2) - ASKij(t1)*BIDdj(t1)] * d это уже все в валюте депозита.

Если мы имеем инструмент jd, а не dj, то все изменится.

На пальцах тут трудно объяснять.

С уважением - С.Д.




Sart
Sart | 21 авг 2007 в 15:53
Странно, а мне кажется тут все сложней.
Пусть, например, имеем инструмент
  ij,
где:
i - базовая валюта
j - валюта котировки
Понятно, что  i = ASKij(t) * j,  i = BIDij(t) *j
 
Предположим, мы покупаем единицу базовой валюты в момент времени t1:
i = ASKij(t1) * j                   (1)
 
А теперь          мы продаем  единицу базовой валюты   в момент времени t2:
 
i = BIDij(t2) * j                    (2)
 
Таким образом мы имеем навар/убыток:
 P/L = BIDij(t2)* j - ASKij(t1) * j   (3)
 
(3) - В валюте котировки
 
Переведем (3) в валюту депозита при условии, что имеем инструмент  - dj,
где d - валюта депозита.
 
Для этого сначала переведем (1),покупку:   i = ASKij(t1) * j  в валюту 
депозита. Валюту d мы имеем, значит  мы ее можем обменять по курсу в 
момент времени t1: d = BIDdj(t1) * j,  отсюда - j = d/BIDdj(t1)
После подстановки в (1) имеем выражение операции покупки единицы 
базовой валюты: i = ASKij(t1) * d/BIDdj(t1)     (1-1)
 
Теперь переведем (2) продажу: i  = BIDij(t2) * j  в валюту депозита.
Валюту j мы имеем, значит мы можем ее обменять по курсу в момент времени t2:
d = ASKdj(t2) * j, отсюда - j = d/ASKdj(t2)
После подстановки в (2) имеем выражение операции продажи единицы базовой
валюты: i = BIDij(t2) * d/ASKdj(t2)     (2-2)
 
а теперь прибыли/убытки:
 
P/L = [BIDij(t2) * ASKdj(t2) - ASKij(t1)*BIDdj(t1)] * d        
это уже все в валюте депозита.
 
Если мы имеем инструмент jd, а не dj, то все изменится.
 
На пальцах тут трудно объяснять.
 
С уважением - С.Д.
Ошибки начинающего трейдера при работе с клиентским терминалом MetaTrader 4 Ошибки начинающего трейдера при работе с клиентским терминалом MetaTrader 4

Все люди ошибаются - кто-то чаще, кто-то реже, кто-то по незнанию, кто-то по невнимательности. Вы спрашиваете - мы отвечаем: время в терминале, результаты тестирования, Print в журнал, символы, история для тестера, импорт истории, плечо, трафик, всплывающие подсказки, масштаб, неверный счет, Invalid account, пустые новости, Price changed, Not Enough Money, Market Is Closed.

Работа MetaTrader 4 под защитой антивирусов и файрволов Работа MetaTrader 4 под защитой антивирусов и файрволов

Большинство пользователей используют для защиты своих компьютеров специализированные программы. К сожалению, эти программы не только защищают компьютеры от вторжений, вирусов и троянов, но и потребляют достаточное количество ресурсов. В первую очередь это касается сетевого трафика, который на 100% контролируется разнообразными интеллектуальными файрволами и антивирусами. Поводом для написания этой статьи послужили обращения трейдеров, которые жаловались на замедление работы терминала МетаТрейдер при работе с Outpost Firewall. Мы решили провести собственные исследования на примере Антивируса Касперского 6.0 и файрвола Outpost Pro 4.0

Эффективные алгоритмы усреднения с минимальным лагом и их использование в индикаторах Эффективные алгоритмы усреднения с минимальным лагом и их использование в индикаторах

В статье изложены авторские разработки пользовательских функций для более качественного по сравнению с обычным усреднением сглаживания: JJMASeries(), JurXSeries(), JLiteSeries(), ParMASeries(), LRMASeries(), T3Series(). Данная статья посвящена применению этих функций в индикаторах. В ней автор также знакомит с созданной на основе использования этих функций большой библиотекой индикаторов.

Реализация трёхцветных индикаторов  и некоторые возможности для максимального упрощения написания индикаторов Реализация трёхцветных индикаторов и некоторые возможности для максимального упрощения написания индикаторов

В этой статье автор рассматривает некоторые способы повышения информативности индикаторов для визуального трейдинга. Автор рассматривает реализацию трёхцветных индикаторов, индикаторов, для построения которых используются данные с других таймфреймов и производит дальнейшее знакомство с библиотекой индикаторов, начатое в статье " Эффективные алгоритмы усреднения с минимальным лагом и их использование в индикаторах."