Работа с корзинами валютных пар на рынке Форекс

Andrei Novichkov | 1 сентября, 2016

Введение

Каждый день в финансовых сводках с мировых рынков мы слышим фразы такого образца: "Доллар ослаб по отношению к мировым валютам...". Это означает, что состояние одной валюты изменилось по отношению к группе других валют. Постоянное употребление такой словесной формулы вызывает желание каким-либо образом упорядочить весь перечень валютных пар, попытаться отделить определенное их количество, а возможно, сделать это несколько раз.

Мысли и предложения трейдеров на тему попыток распределения валютных пар по группам, или «корзинам», публикуются нередко. На трейдерских форумах появляются статьи и обсуждения, уже разработан ряд инструментов. Группировка валютных пар по «корзинам» делается с целью более точного анализа совместного поведения валютных пар — соседей по «корзине». Предполагается, что такие валютные пары во многом будут вести себя сходно — создавать экстремумы примерно одновременно, идти в одном и том же направлении в большинстве случаев. Такую группу валютных пар, или "корзину", можно даже попытаться представить в виде некой средней виртуальной валютной пары и работать с ней соответственно.

Принципы и определения

В основе всей идеи лежит перегруппировка валютных пар по признакам, которые представляются важными для трейдера. Некоторые такие признаки хорошо известны всем: например, связь между ценой на нефть и курсом рубля или же корреляция между парами EURUSD и USDCHF. Для демонстрации можно было бы выбрать их в одну группу с размером в две пары, в дальнейшем корзину валютных пар, или просто корзину валют. Определив состав корзины валют, можно говорить о действиях с ней, подразумевая действия одновременно со всеми валютными парами, входящими в её состав, в данном случае с EURUSD и USDCHF. Можно наблюдать за поведением обеих валютных пар, можно совершать торговые операции.

Продажа или покупка валютной корзины подразумевает одновременные торговые операции с каждой валютой, входящей в ее состав. В таком случае по принципу "одна валютная пара — один ордер" составляется корзина ордеров, причем не обязательно однонаправленных. Условия, при изменении которых будут совершаться торговые операции, будут характеризовать состояние корзины валют.

Для дальнейшей работы применим естественный и очевидный принцип группировки валютных пар. Все двадцать восемь основных валютных пар будут разбиты на корзины по признаку базовой валюты (или валюты котировки), которая должна будет присутствовать в каждой паре. Название корзины будет дано в соответствии с именем базовой валюты (пример см. в таблице 1). Состояние корзины в этом случае будет определяться состоянием ее базовой валюты. К параметрам этого состояния относятся, например, перекупленность, перепроданность и прочие подобные характеристики. Они предоставляются нам теми же средствами технического анализа, которые мы применяем и для оценки состояния обычных валютных пар.

Основные корзины валют

Разобьем весь пул валютных пар по вышеизложенному принципу. В итоге получим восемь корзин валют, в каждой из которых по семь валютных пар:

 Номер по порядку Наименование корзины Валюта корзины Валютные пары корзины
1
Корзина по австралийскому доллару
AUD
AUDUSD, AUDNZD, AUDJPY, AUDCAD, AUDCHF, EURAUD, GBPAUD
2
Корзина по канадскому доллару
CAD
USDCAD, AUDCAD, NZDCAD, GBPCAD, EURCAD, CADCHF, CADJPY
3
Корзина по франку
CHF
CHFJPY, USDCHF, GBPCHF, EURCHF, AUDCHF, NZDCHF, CADCHF
4
Корзина по евро
EUR
EURUSD, EURJPY, EURCHF, EURGBP, EURNZD, EURCAD, EURAUD
5
Корзина по фунту
GBP
EURGBP, GBPAUD, GBPCAD, GBPCHF, GBPJPY, GBPNZD, GBPUSD
6
Корзина по иене
JPY
AUDJPY, CADJPY, CHFJPY, EURJPY, GBPJPY, NZDJPY, USDJPY
7
Корзина по новозеландскому доллару
NZD
NZDUSD, AUDNZD, NZDJPY, NZDCAD, NZDCHF, EURNZD, GBPNZD
8
Корзина по доллару
USD
EURUSD, GBPUSD, AUDUSD, NZDUSD, USDCAD, USDCHF, USDJPY

Таблица 1. Составы валютных корзин

Определившись с составом корзин, уточним смысл основных торговых операций с ними. Примем, что покупка или продажа корзины сводится к покупке или продаже ее валюты.

Рассмотрим следующую ситуацию. Предположим, что выходят положительные новости по иене, следовательно, можно ожидать её укрепления. Инвестор решает купить иену. В рамках рассматриваемой парадигмы, для покупки корзины по иене, ему нужно будет войти в ПРОДАЖУ по всем ее валютным парам. И наоборот, желая продать корзину по иене, он должен будет войти в покупки по всем парам, входящим в ее состав.

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

Чтобы исключить путаницу с торговыми операциями, составим следующую таблицу-подсказку:

Номер по порядку Наименование корзины Торговая операция с валютой корзины
Торговая операция с валютными парами корзины

1

Корзина по австралийскому доллару

 

AUDUSD AUDNZD AUDJPY AUDCAD AUDCHF EURAUD GBPAUD
SELL sell sell sell sell sell buy buy
BUY buy buy buy buy buy sell sell

2

Корзина по канадскому доллару

 

USDCAD AUDCAD NZDCAD GBPCAD EURCAD CADCHF CADJPY
SELL buy buy buy buy buy sell sell
BUY sell sell sell sell sell buy buy

3

Корзина по франку

 

CHFJPY USDCHF GBPCHF EURCHF AUDCHF NZDCHF CADCHF
SELL sell buy buy buy buy buy buy
BUY buy sell sell sell sell sell sell

4

Корзина по евро

 

EURUSD EURJPY EURCHF EURGBP EURNZD EURCAD EURAUD
SELL sell sell sell sell sell sell sell
BUY buy buy buy buy buy buy buy

5

Корзина по фунту

 

EURGBP GBPAUD GBPCAD GBPCHF GBPJPY GBPNZD GBPUSD
SELL buy sell sell sell sell sell sell
BUY sell buy buy buy buy buy buy

6

Корзина по иене

 

AUDJPY CADJPY CHFJPY EURJPY GBPJPY NZDJPY USDJPY
SELL buy buy buy buy buy buy buy
BUY sell sell sell sell sell sell sell

7

Корзина по новозеландскому доллару

 

NZDUSD AUDNZD NZDJPY NZDCAD NZDCHF EURNZD GBPNZD
SELL sell buy sell sell sell buy buy
BUY buy sell buy buy buy sell sell

8

Корзина по доллару

 

EURUSD GBPUSD AUDUSD NZDUSD USDCAD USDCHF USDJPY
SELL buy buy buy buy sell sell sell
BUY sell sell sell sell buy buy buy

Таблица 2. Торговые операции с корзинами

Состояние валюты корзины

Как принять решение о совершении торговой операции с корзиной валют? На основании только поведения валютных пар сделать это довольно затруднительно, ввиду большого размера самих корзин. Нам потребуются дополнительные технические данные о параметрах состояния валюты корзины. Обратим внимание на график индикатора RSI для трех валютных пар из корзины по фунту, а именно — для GBPUSD, GBPJPY, GBPCHF. На данном рисунке изображен график с таймфреймом D1:


Легко заметить схожесть этих трех графиков: многие экстремумы расположены одинаково, интервалы подъемов и спусков тоже схожи. Напрашивается предположение, что это сходство объясняется одной и той же валютой корзины — британским фунтом. Ослабление его приводит к появлению нисходящих участков, усиление — к тому, что на графике появляются восходящие участки.

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

Выявив, как изменяется общий для всех валютных пар корзины параметр и нивелировав его различия между парами, мы решим главную задачу — визуализируем этот параметр.  В данном примере таким параметром состояния валюты корзины станет состояние перекупленности / перепроданности фунта, некий "объединенный RSI", показывающий состояние не валютной пары, как привыкли трейдеры, а только одной валюты — валюты корзины.

Разумеется, можно не ограничиваться только RSI. Возможно наличие и других подобных индикаторов, рассчитанных на основе стандартных. Договоримся применять к таким индикаторам обобщающее название "объединенные индикаторы".


Методики вычислений параметров состояния валюты корзины

Для решения этой задачи стоит вспомнить уже имеющиеся методики и попытаться действовать аналогично. Первое, что вспоминается в этой связи, — индекс доллара. Вспомним, что он показывает состояние доллара по отношению к шестерке других мировых валют,  обратим внимание на формулу расчета. Это среднее геометрическое с весовыми коэффициентами. Сделаем попытку перенести данный принцип на нашу корзину по доллару, т.е. используем свой набор валютных пар. Согласимся с еще одним допущением — удалим весовые коэффициенты и сведем формулу к расчету обычного среднего геометрического. Эти изменения мы вносим для того, чтобы использовать принцип среднего геометрического для расчетов по всем корзинам. Практически же по всем валютным парам весовые коэффициенты будут неизвестны.

Проверим, насколько сильным будет влияние внесенных изменений. Для этого используем простейший индикатор:

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict

#property indicator_separate_window
#property indicator_buffers 1

input int     iBarsTotal=300;       

string pair[]={"EURUSD","GBPUSD","AUDUSD","NZDUSD","USDCAD","USDCHF","USDJPY"};
bool bDirect[]={false,false,false,false,true,true,true};
int iCount=7;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetValue(int shift)
  {
   double res=1.0,t;
   for(int i=0; i<iCount; i++)
     {
      t=iClose(pair[i],0,shift);
      if(!bDirect[i]) t=1/t;
      res*=t;
     }//end for (int i = 0; i < iCount; i++)
   return (NormalizeDouble(MathPow (res, (double)1/iCount), _Digits) );
  }

double upp[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorShortName("testBasket");
   IndicatorDigits(_Digits);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2,clrGreen);
   SetIndexBuffer(0,upp);
   SetIndexLabel(0,"testBasket");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(prev_calculated==0)
     {

      int total;
      if(iBarsTotal==0) total=rates_total;
      else total= MathMin(iBarsTotal,rates_total);
      for(int i = 0; i<total; i++) upp[i] = GetValue(i);
     }//end if (prev_calculated == 0)
   else
     {
      upp[0]=GetValue(0);
     }
   return(rates_total);
  }

Для сравнения использовался бесплатный индикатор USDX.mq4, отрисовывающий индекс доллара классическим способом. Вот что получилось в результате (таймфрейм H1):


На данном изображении темно-зеленым цветом изображен график индикатора testBasket.mq4, а красным и светло-зеленым (которым отрисована средняя) — индикатор USDX.mq4. Можно заметить очень хорошее совпадение на таймфрейме H1. Видно, что направления движения на большинстве участков совпадают, равно как и подавляющее большинство локальных экстремумов.


На дневном таймфрейме картина менее благоприятная, но все равно вполне приемлемая. Положение большинства локальных экстремумов совпадает, как и направление движения на большинстве участков. Отличия в отдельных местах легко объяснимы отсутствием весовых коэффициентов и другим набором валютных пар. Кроме того, дают о себе знать различия в масштабе графиков, наложенных друг на друга.

Итак, на основании полученных результатов следует признать формулу вычисления среднего геометрического приемлемой для вычисления различных параметров состояния валюты корзины. В дальнейшем будем называть её методикой № 1. Но нужно помнить и об ограничениях данной формулы, а именно: будет плохой идеей использовать её для вычислений с аргументами, могущими принимать отрицательные значения. Мы знаем, что таковые — не редкость среди технических индикаторов. Кроме того, вычисления среднего геометрического могут сильно загрузить терминал, если не выносить их в отдельную библиотеку.

Для снятия ограничений на использование отрицательных величин в качестве аргументов, можно попытаться применить другую формулу, к примеру,  формулу обычного среднего арифметического. Создадим еще один тестовый индикатор для вычислений по этой формуле, в качестве аргументов будем использовать значения индикатора Stochastic:

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict

#property indicator_separate_window
#property indicator_minimum    0
#property indicator_maximum    100

#property indicator_buffers 2

input int     iBarsTotal=3000;

string pair[]={"EURUSD","EURJPY","EURCHF","EURGBP","EURNZD","EURCAD","EURAUD"};
int iCount=7;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void GetValue(int shift,double &s1,double &s2)
  {
   s1=0; s2=1;
   for(int i=0; i<iCount; i++) 
     {
      s1 += iStochastic(pair[i],0,5,3,3,MODE_SMA,0,0,shift);
      s2 *= iStochastic(pair[i],0,5,3,3,MODE_SMA,0,0,shift);
     }
   s1 = NormalizeDouble(s1/iCount, _Digits);
   s2 = NormalizeDouble(MathPow (s2, (double)1/iCount), _Digits);
  }

double upp[],upp1[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorShortName("testBasketS");
   IndicatorDigits(_Digits);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2,clrRed);
   SetIndexBuffer(0,upp);
   SetIndexLabel(0,"testBasketSA");
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2,clrGreen);
   SetIndexBuffer(1,upp1);
   SetIndexLabel(1,"testBasketSG");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(prev_calculated==0)
     {

      int total;
      if(iBarsTotal==0) total=rates_total;
      else total= MathMin(iBarsTotal,rates_total);
      for(int i = 0; i<total; i++) GetValue(i,upp[i],upp1[i]);
     }//end if (prev_calculated == 0)
   else
     {
      GetValue(0,upp[0],upp1[0]);
     }
   return(rates_total);
  }

Загрузим этот индикатор на дневной график пары EURGBP. Вот что получилось в результате:


На данном изображении тонкими линиями отрисован график оригинального индикатора Stochastic, красная линия двойной толщины — это новый, объединенный Stochastic, вычисленный по формуле среднего арифметического, а линия двойной толщины зеленого цвета получена применением формулы среднего геометрического и приведена для сравнения.

Непосредственно по формулам можно сделать вывод, что они дают очень схожие результаты. График, построенный с использованием среднего геометрического имеет более выраженные экстремумы, а с использованием среднего арифметического носит более сглаженный характер. Хотя, возможно, это несколько субъективное мнение. Представляется, что для конкретного применения решающими будут ограничения, связанные с наличием отрицательных аргументов и мощностью компьютера. В целом, можно допустить возможность применения формулы среднего арифметического для расчетов в качестве методики № 2.

Первые практические выводы

После прочтения предыдущих абзацев невольно приходит мысль: "А зачем все это?". Получен новый индикатор, рисующий график, похожий на график индекса доллара и другой, рисующий график, похожий на график Stochastic. Может быть получен еще один индикатор, рисующий график, похожий на классический RSI. Но у трейдеров уже есть RSI и Stochastic, зачем нужны еще какие-то похожие, что с ними делать? Попробуем ответить на этот вопрос.

  1. Вспомним, что объединенные индикаторы предоставляют трейдеру информацию о состоянии валюты корзины, а следовательно, позволяют прогнозировать движения всех валютных пар корзины. В свою очередь, такой прогноз позволяет совершать торговые операции со всеми валютными парами корзины.
  2. Обратим внимание на то, что сочетание объединенных индикаторов с аналогичными классическими, как на последнем рисунке со Stochastic-ом, предоставляет трейдеру фильтр, позволяющий воздерживаться от входа на определенных валютных парах корзины валют, анализировать точки пересечения графиков, обнаруживать дивергенции.
  3. Не будем забывать, что в формировании графика валютной пары участвуют две валюты, и каждая из них является валютой своей корзины. Для каждой из них трейдер может получить информацию о состоянии, используя объединенные индикаторы. Уже на этом основании можно делать выводы о дальнейших действиях.

Любой из этих пунктов может служить основанием для построения прибыльной торговой системы. Кроме того, объединенными индикаторами можно дополнять и уже готовые торговые системы, по которым работает трейдер. Однако эта тема решительно выходит за рамки данной статьи, имеющей целью познакомить читателя с самим принципом, если таковой ему еще не известен.


Заключение

Следует помнить, что решение о входе на рынок и выходе с рынка следует принимать на основании нескольких сигналов, если речь не идет о безиндикаторной торговле. В статье рассмотрен способ получения таких сигналов несколько новым способом, что ни в коем случае не отменяет и не заменяет применение стандартных средств. Совместное применение набора объединенных индикаторов RSI, Stochastic-а и других, в сочетании со стандартными, может предоставить нужное количество и качество сигналов для подтверждения, или отказа от совершения торговых операций и получения профита.