Скачать MetaTrader 5

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

1 сентября 2016, 15:40
Andrei Novichkov
9
4 647

Введение

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

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

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

В основе всей идеи лежит перегруппировка валютных пар по признакам, которые представляются важными для трейдера. Некоторые такие признаки хорошо известны всем: например, связь между ценой на нефть и курсом рубля или же корреляция между парами 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-а и других, в сочетании со стандартными, может предоставить нужное количество и качество сигналов для подтверждения, или отказа от совершения торговых операций и получения профита.


Прикрепленные файлы |
testBasket.mq4 (2.73 KB)
USDX.mq4 (9.48 KB)
Must1980
Must1980 | 21 сен 2016 в 13:26
Ну и где обещанные паттерны?  И вы еще писали, что будете выкладывать индикаторы по этой методике.
Heroix
Heroix | 22 сен 2016 в 09:29

Автор, а где иллюстрация применения на практике ваших теоретических излияний? Какую пользу они дают реально - не понятно.

Иными словами: где профит?

Не вижу его.

Aleksandr Praslov
Aleksandr Praslov | 22 сен 2016 в 16:05
Andrei Novichkov:

Добрый день.

Был (да и есть) индикатор, называемый Kuklovod. С первого взгляда было ясно, что к его созданию приложил руку хороший трейдер, но не очень знающий разработчик. Пользоваться им было весьма сложно.

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

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

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

Есть и другие индикаторы для корзинных стратегий. Например семейство  Megatrend Monitor...
Dennis Kirichenko
Dennis Kirichenko | 22 сен 2016 в 16:06
Heroix:

Автор, а где иллюстрация применения на практике ваших теоретических излияний? Какую пользу они дают реально - не понятно.

Иными словами: где профит?

Не вижу его.

А зачем Вам профит? - Вам скорее сразу ключи от квартиры, где деньги лежат ;-))

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

Andrei Novichkov
Andrei Novichkov | 22 сен 2016 в 16:32
Heroix:

Автор, а где иллюстрация применения на практике ваших теоретических излияний? Какую пользу они дают реально - не понятно.

Иными словами: где профит?

Не вижу его.

Я буду выкладывать индикаторы по этой методике и описывать паттерны. Возможно там Вы сможете что то увидеть полезное для себя. Мне просто сейчас немного некогда.
Aleksandr Praslov:
Есть и другие индикаторы для корзинных стратегий. Например семейство  Megatrend Monitor...
Эти индикаторы мне неизвестны, признаюсь. Спасибо за полезную информацию.
Переход на новые рельсы: пользовательские индикаторы в MQL5 Переход на новые рельсы: пользовательские индикаторы в MQL5

Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.

Вот мы и получили долгожданные MetaTrader 5 и MQL5 Вот мы и получили долгожданные MetaTrader 5 и MQL5

Это очень краткий обзор MetaTrader 5. Я не могу описать все новшества системы за столь короткий период времени - тестирование стартовало 09-09-2009. Это символическая дата, и я уверен, что это будет счастливым числом. Всего несколько дней у меня на руках бета-версия терминала MetaTrader 5 и MQL5. Я не успел опробовать все, что в нем есть нового, но то, что есть, уже впечатляет.

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

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