Статистический Carry Trading

Ruslan Lunev | 1 сентября, 2012

Экономические регуляторы

Согласно теории Адама Смита, изложенной в его книге «Исследование о природе и причинах богатства народов»[1], рыночная экономика должна автоматически за счет спроса и предложения регулировать все экономические процессы, удерживая их в оптимальном состоянии.

Но, к сожалению, практика показывает иное. Спрос и предложение на рынках зачастую приводит к перекосам финансовых отношений и создает экономические кризисы.

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

Задачи государственных регуляторов сводятся к косвенному управлению экономическими процессами с помощью:


Процентные ставки

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


Регулируемая экономика


Не стоит строить иллюзий насчет того, что мы живем в эпоху «свободной» рыночной экономики. Идеи Адама Смита более чем утопичны. Участники рынков вовсе не обязаны на свой страх и риск и за свой счет регулировать экономические процессы. А в силу меркантильности, нередко инвестируют в антирыночные. Например:

Мы живем в эпоху регулируемой экономики. Не плановой, когда экономические процессы регулируются государством напрямую, но все же регулируемой.


Учетная ставка рефинансирования

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

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

Однако не стоит строить иллюзий. Высокий процент учетной ставки вовсе не означает привлекательность валюты. Есть еще один немаловажный фактор, который учитывают инвесторы – инфляция. Если рост инфляции значительно перекрывает ставку рефинансирования, то смысла от инвестиций в такую экономику нет.

Например, центральный банк Республики Зимбабве подымал учетную ставку и до 950%, но инвесторов это только распугивало, т.к. печатный станок этой страны уже не успевал за инфляцией и бумага, на которой печатались денежные знаки, стоила дороже номинала.

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


Стратегии керри трейд

Carry Trade - стратегия заработка на положительных свопах.

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

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

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

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


Математика статистического керри трейдинга

Основой для статистического керри трейдинга являются допущения:

  1. Движение котировок валютных пар должно иметь направление в сторону положительных свопов.
  2. Если две или более валютные пары котируются в одной высоколиквидной валюте, то их корреляции положительны. Следовательно, можно гасить движения котировок за счет разнонаправлено открытых и положительно коррелированных позиций.

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

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

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

v1 * d1 + v2 * d2 + …  + vn * dn  = profit

где:

n – общее количество финансовых инструментов.
v1, v2, …, vn – объемы открываемых позиций соответствующих финансовых. инструментов. Если значение объема отрицательно, то открывается короткая позиция.
d1, d2, …, dn – среднестатистическое изменение цены за один торговый день для финансового инструмента.
profit – среднестатистический профит за один торговый день.

Если в упрощенном виде для двух финансовых инструментов, формула будет более короткой:
v1 * d1 + v2 * d2 = profit

Преобразуем ее:
d1  =  (-v2 * d2 + profit) / v1

В этом случае, если принять, что:
v1 = 1
y = d1
a = -v2
b = profit
Мы получаем классическую формулу линейного уравнения c одним аргументом и двумя неизвестными:
y = a * x + b

Вычислить значения неизвестных a и b можно с помощью классического метода наименьших квадратов.

После чего, необходимо уточнить размер профита с помощью свопов и получить окончательный результат потенциальной прибыли за один торговый день:
b’ = b – swap1 + a * swap2


где:

swap1, swap2 – свопы валютных пар, начисляемые за один торговый день, для соответствующих направлений открытых позиций.


Поскольку в приведенном статье алгоритме, стратегия рассчитана на соблюдение одновременно двух условий:

  1. Объемы и направления валютных пар подбираются так, чтобы они были среднестатистически прибыльны.
  2. Свопы всех валютных пар, задействованных в стратегии, должны быть положительны.

то дополнительная проверка с помощью последней формулы в соответствии с вышеприведенными условиями теряет необходимость.


Пояснение на примере

Почему в нашей формуле y = a * x + b, b = profit?

Пример расчета


Предположим, что совместные ежедневные движения котировок двух валютных пар, обозначаемых идентификаторами y и x, соответствуют  формуле:

y = 2 * x + 1

Преобразуем ее в аналогичную формулу:
y – 2 * x = 1


Т.е. нам необходимо открыть длинную позицию на первом финансовом инструменте (знак положителен) и короткую (знак отрицателен) в два раза большим объемом (т.к. a = 2) на втором.

Для примера текущие цены инструментов сейчас: 10 и 8.

Предположим, что цена на втором инструменте за один торговый день увеличилась на 1, т.е.  стала 9, тогда на первом среднестатистически она изменится на 2 * x + 1 = 2 * 1 + 1 = 3 и станет 13 (цены обоих инструментов одновременно увеличились, т.к. корреляция положительна). Поскольку второй инструмент у нас в короткой позиции, то убыток по нему составит 2, а первый в длинной позиции заработает 3. Разница, т.е. прибыль, составит +1.

Предположим, что по итогам следующего торгового дня, цена второго инструмента уменьшилась на 1 и опять вернулась к прежнему значению 8. В этом случае цена первого инструмента тоже уменьшится, но на значение 2 * x + 1 = 2 * -1 + 1 = -1 и станет равной 12. Считаем результат: по первому инструменту убыток в размере 1, а по второму прибыль в размере 2. Итоговый результат опять равен +1. Т.е. куда бы ни пошла цена и на сколько бы она не пошла, среднестатистически мы все равно получим профит в размере указанном в формуле и обозначенном идентификатором b.

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


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

Реализация

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

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

Исходный код советника:

//+------------------------------------------------------------------+
//|                                        StatisticCarryTrading.mq5 |
//|                                  Copyright 2012, Ruslan V. Lunev |
//|                              https://www.mql5.com/ru/articles/491 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Ruslan V. Lunev"
#property link      "https://www.mql5.com/ru/articles/491"
#property version   "1.00"

// Вторая валютная пара
input string secondpair="AUDUSD";
// Период сбора статистики в барах
input int p=100;


// Массивы для хранения исторических цен открытия
double open0[];
double open1[];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // Cчитываем таймсерии цен открытия
   // для задействованных валютных пар
   CopyOpen(_Symbol,PERIOD_D1,0,p+1,open0);
   ArraySetAsSeries(open0,true);
   CopyOpen(secondpair,PERIOD_D1,0,p+1,open1);
   ArraySetAsSeries(open1,true);

   int i=0;

   double pp=p;

   double s1 = 0;
   double s2 = 0;
   double s3 = 0;
   double s4=open1[0]-open1[p];
   double s5=open0[0]-open0[p];

   double averagex = s4 / pp;
   double averagey = s5 / pp;

   for(i=0; i<p; i++) 
     {
      double x0 = open1[i] - open1[i + 1];
      double y0 = open0[i] - open0[i + 1];
      double x1 = x0 - averagex;
      double y1 = y0 - averagey;
      s1 = s1 + x1 * x1;
      s2 = s2 + y1 * y1;
      s3 = s3 + x1 * y1;
     }
   
   // Коэффициент линейной корреляции Пирсона
   double r=s3/MathSqrt(s1*s2);

   // Вычисление пропорций объемов открываемых позиций с учетом размеров контрактов
   double a = signum(r) * SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE) * MathSqrt(s2) 
   / (MathSqrt(s1) * SymbolInfoDouble(secondpair, SYMBOL_TRADE_CONTRACT_SIZE));
   
   // Вычисление среднестатистического ежедневного профита
   double b = averagey - averagex * a;

   // Выводим полученную формулу взаимного движения котировок
   if(b>0) 
     {
      Print(_Symbol+" = ",a," * "+secondpair+" + ",b);
        } else {
      Print(_Symbol+" = ",a," * "+secondpair+" - ",MathAbs(b));
     }

   a=-a*signum(b);

   // Рекомендации
   string recomendation="Купить "+_Symbol;

   if(b<0) 
     {
      recomendation="Продать "+_Symbol;
      if(SymbolInfoDouble(_Symbol,SYMBOL_SWAP_SHORT)<0.0) 
        {
         recomendation="Своп коротких позиций для "+_Symbol+" отрицателен";
         MessageBox(recomendation,"Не рекомендуется",1);
         return(0);
        }
        } else {
      if(SymbolInfoDouble(_Symbol,SYMBOL_SWAP_LONG)<0.0) 
        {
         recomendation="Своп длинных позиций для "+_Symbol+" отрицателен";
         MessageBox(recomendation,"Не рекомендуется",1);
         return(0);
        }
     }

   if(a<0) 
     {
      recomendation=recomendation+"\r\nПродать "+a+" "+secondpair;
      if(SymbolInfoDouble(secondpair,SYMBOL_SWAP_SHORT)<0.0) 
        {
         recomendation="Своп коротких позиций для "+secondpair+" отрицателен";
         MessageBox(recomendation,"Не рекомендуется",1);
         return(0);
        }
        } else {
      recomendation=recomendation+"\r\nКупить "+a+" "+secondpair;
      if(SymbolInfoDouble(secondpair,SYMBOL_SWAP_LONG)<0.0) 
        {
         recomendation="Своп длинных позиций для "+secondpair+" отрицателен";
         MessageBox(recomendation,"Не рекомендуется",1);
         return(0);
        }
     }

   double profit=MathAbs(b)/SymbolInfoDouble(_Symbol,SYMBOL_POINT);

   if((SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==5) || (SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==3)) 
     {
      profit=profit/10;
     }

   recomendation = recomendation + "\r\nКоэффициент корреляции: " + r;
   recomendation = recomendation + "\r\nСреднестатистический ежедневный профит: "
   + profit + " пунктов";


   MessageBox(recomendation,"Рекомендация",1);

   return(0);
  }

// Ступенчатая математическая функция - Signum
double signum(double x) 
  {
   if(x<0.0) 
     {
      return(-1.0);
     }
   if(x==0.0) 
     {
      return(0);
     }
   return(1.0);
  }
//+-----------------------The End ------------------------

У советника есть два входных параметра:


Советник необходимо установить на график первой валютной пары с таймфреймом D1, а во входных параметрах задать вторую валютную пару.

После этого будет произведен расчет, за указанное во входном параметре  «p» количество баров и выводится рекомендация.

Если трейдера устраивает рекомендация, то он может вручную открыть позиции, соблюдая указанные советником направления и пропорции объемов. После этого советник не надо удалять с чарта, т.к. стратегия низкочастотная и держать терминал все время подключенным к серверу нет необходимости. Зато при каждом следующем входе в терминал, установленный советник либо даст прежнюю рекомендацию, либо при изменении свопов у брокера или статистики по историческим данным,  выдаст сообщение с заголовком «Не рекомендуется», что позволит оперативно отказаться от ранее выбранной стратегии и закрыть уже выставленные торговые ордера.


Предупреждение

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


Литература

  1. Смит А. Исследование о природе и причинах богатства народов. — М.: Эксмо, 2007. — (Серия: Антология экономической мысли) — 960 с. — ISBN 978-5-699-18389-0