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

Автор: lexy Среда, Сентябрь 10th, 2014 Нет комментариев

Рубрика: Разное

Работа на финансовых рынках — это прежде всего торговые операции. Все мы на интуитивном уровне с детства получаем представление об операциях покупки и продажи. Но торговля на валютном рынке имеет свою специфику. В этой статье мы рассмотрим понятия, необходимые для толкования некоторых терминов, и рассмотрим соответствующие этим понятиям функции языка 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); } //+------------------------------------------------------------------+


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

 

Прикрепленные файлы:
 SimplySpecification.mq4 (3.7 Kb)
Источник: mql4.com

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты