Есть ли смысл в арбитраже USDCAD vs USDRUB

 

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

Поэтому идея такая, если нефть растет, то продаем пару USDCAD  и покупаем USDRUB (а лучше Si) - при получении совокупной прибыли закрываемся.

Есть ли в этом смысл и как проверить, вот в чем вопрос.

 
Aleksey Vyazmikin:

Есть ли в этом смысл и как проверить, вот в чем вопрос.

робота написать и проверить на истории
 
elibrarius:
робота написать и проверить на истории

Пытаюсь разобраться с пользовательскими символами...

Пока не ясно, как на биржевой терминал подгрузить (заставить работать) пользовательский символ USDCAD.

И, я арбитражники не писал - пока не знаю, как описать точки входа/выхода - есть идеи - сообщайте.

 
Aleksey Vyazmikin:

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

Поэтому идея такая, если нефть растет, то продаем пару USDCAD  и покупаем USDRUB (а лучше Si) - при получении совокупной прибыли закрываемся.

Есть ли в этом смысл и как проверить, вот в чем вопрос.


Проверить очень просто.

Нужно написать элементарный индикатор, который будет выводить

два графика, приводя UCAD в рублёвые цены, т.е понадобится ещё USDFIX - текущее значение доллара

1 график sell_UCAD - buy_Si

2 график buy_UCAD - sell_Si

Ласты брать нельзя, т.к сделки по UCAD не частые

И  НИ В КОЕМ случае нельзя тестировать на ИСТОРИИ, по той же причине,

почему Ласты брать нельзя.

Добавлено

Вот "рыба" реал-тайм индикатора

Запустать ТОЛЬКО на реале

Вычисления сделаете сами

//+------------------------------------------------------------------+
//|                                               UCAD_Si_spread.mq5 |
//|                                   Copyright © 2017, prostotrader |
//|                                                  https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "UCAD-Si spread"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Deals
#property indicator_label1  "Ask" 
#property indicator_type1   DRAW_LINE 
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID 
#property indicator_width1  1
//--- plot 
#property indicator_label2  "Bid" 
#property indicator_type2   DRAW_LINE 
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID 
#property indicator_width2  1
//
input string UsdFix="USDFIX-INDEX"; //USDFIX индекс
input int    ABars=50;              //Видимая область (бары)
                                    //                                    
double AskBuff[],BidBuff[];
double si_sell,si_buy,ucad_sell,ucad_buy;
double usd_last;
string usd_symbol,ucad_symbol;
//
int event_cnt;
//+------------------------------------------------------------------+
//| Indicator Expert set second symbol function                      |
//+------------------------------------------------------------------+
string SetUCADSymbol(const string aSymbol)
  {
   int str_tire = StringFind(aSymbol, "-");
   int str_size = StringLen(aSymbol);
   if((str_tire>0) && (str_size>0))
     {
      return("UCAD" + StringSubstr(aSymbol, str_tire, str_size - str_tire));
     }
   return("");
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   int ch_bars=Bars(Symbol(),Period());
   if(ch_bars<ABars+2)
     {
      Alert("Не хватает баров, перейдите на меньший тамфрейм!");
      return(INIT_FAILED);
     }
   event_cnt=0;
//---
   IndicatorSetInteger(INDICATOR_DIGITS,0);
   IndicatorSetString(INDICATOR_SHORTNAME,"UCAD_Si_spread");
//--- indicator buffers mapping
   SetIndexBuffer(0,AskBuff,INDICATOR_DATA);
   ArraySetAsSeries(AskBuff,true);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);

   SetIndexBuffer(1,BidBuff,INDICATOR_DATA);
   ArraySetAsSeries(BidBuff,true);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---
   if(StringFind(Symbol(),"Si-")<0)
     {
      Alert("Индикатор должен быть на графике Si");
      return(INIT_FAILED);
     }
   else
     {
      ucad_symbol=SetUCADSymbol(Symbol());
      if(ucad_symbol=="")
        {
         Alert("Символ не установлен "+ucad_symbol);
         return(INIT_FAILED);
        }
      else
        {
         if(!SymbolSelect(ucad_symbol,true))
           {
            Alert("Неизвестный символ: "+ucad_symbol);
            return(INIT_FAILED);
           }
         else
           {
            if(!MarketBookAdd(ucad_symbol))
              {
               Alert("Second Book not added!");
               return(INIT_FAILED);
              }
            usd_symbol=UsdFix;
            if(!SymbolSelect(usd_symbol,true))
              {
               Alert("Неизвестный символ: "+usd_symbol);
               return(INIT_FAILED);
              }
            else
              {
               if(!MarketBookAdd(Symbol()))
                 {
                  Alert("Main Book not added!");
                  return(INIT_FAILED);
                 }
              }
           }
        }
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   MarketBookRelease(Symbol());
   MarketBookRelease(ucad_symbol);
//
   if(reason==REASON_INITFAILED)
     {
      int window=ChartWindowFind(ChartID(),"UCAD_Si_spread");
      ChartIndicatorDelete(ChartID(),window,"UCAD_Si_spread");
     }
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
   if((symbol==Symbol()) || (symbol==ucad_symbol))
     {
      si_sell= SymbolInfoDouble(Symbol(),SYMBOL_ASK);
      si_buy = SymbolInfoDouble(Symbol(),SYMBOL_BID);
      ucad_sell= SymbolInfoDouble(ucad_symbol,SYMBOL_ASK);
      ucad_buy = SymbolInfoDouble(ucad_symbol, SYMBOL_BID);
      usd_last = SymbolInfoDouble(usd_symbol, SYMBOL_LAST);
      //--- call OnCalculate      
      double price[];
      OnCalculate(event_cnt,event_cnt,0,price);
     }
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   if(prev_calculated==0)
     {
      ArrayInitialize(AskBuff,EMPTY_VALUE);
      ArrayInitialize(BidBuff,EMPTY_VALUE);
     }
   else
     {
      int diff= rates_total-prev_calculated;
      if(diff == 0)
        {
         for(int i=ABars-1; i>0; i--)
           {
            AskBuff[i] = AskBuff[i-1];
            BidBuff[i] = BidBuff[i-1];
           }
        }
      else
        {
         for(int i=1; i>(ABars+diff); i++)
           {
            AskBuff[i] = AskBuff[i+diff];
            BidBuff[i] = BidBuff[i+diff];
           }
        }
      //Вычисления спредов !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      //AskBuff[0] =
      //BidBuff[0] = 
     }
   event_cnt=rates_total;
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

Скорее всего арбитража не получится (см. скрин, история по close)

Добавлено

Предыдущая пара (9-17)

Добавлено

6-17


Добавлено

3,17


 
prostotrader:

Скорее всего арбитража не получится (см. скрин, история по close)

Добавлено

Предыдущая пара (9-17)



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

Кроме того, нужно смотреть на точки, которые свидетельствуют о резком росте/падении нефти и соответственно на дельту, если она образовывается.

Фьючерс UCAD торгуется не очень активно, как я понимаю - поэтому думаю арбитражить USDCAD на форексе, а Si на MOEX- так будет дешевле, только вот надо понять, есть ли в этом смысл. 

 
Aleksey Vyazmikin:

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

Кроме того, нужно смотреть на точки, которые свидетельствуют о резком росте нефти и соответственно на дельту, если она образовывается.

Фьючерс UCAD торгуется не очень активно, как я понимаю - поэтому думаю арбитражить USDCAD на форексе, а Si на MOEX- так будет дешевле, только вот надо понять, есть ли в этом смысл. 


На графиках и есть дельта между Si и UCAD (в рублях)

Я, пока, не вижу смысла, потому что нет явной корреляции.

 
prostotrader:

Я, пока, не вижу смысла, потому что нет явной корреляции.


Что лучше сейчас коррелирует с нефтью, канадец или рубль?

 
Aleksey Vyazmikin:

Что лучше сейчас коррелирует с нефтью, канадец или рубль?


Я не смотрел, но думаю, что канадец (в силу экономики Канады)

не так сильно зависит от нефти, как рубль.

Но, сейчас, цена рубля не сильно коррелирует с нефтью, потому что

есть политически-экономические причины в России.

"Денег нет, но Вы держитесь!"

Добавлено

Если уж торговать, отталкиваясь от волатильности нефти, то

лучше самой нефтью. До марта картина не изменится, т.е

нефть не должна превышвть 60$ за барель, т.к если цена

выше, то американцам уже выгодно продавать свою сланцевую нефть.

Поэтому, когда нефть поднялась выше 58,5 можно смело шортить большими объёмами.

Добавлено

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

ожидание рынка направлено на падение стоимости нефти...

Добавлено

Вышевыложенные скрины НЕ точно отображают картину пары Si - UCAD, т.к перевод пунктов UCAD в рубли

осуществлялся по единой ТЕКУЩЕЙ цене тика, что в КОРНЕ не правильно, а СПОТа по UCAD нет, поэтому

для корректного определения цены UCAD в рублях, нужно собирать данные в реал-таме, а потом

анализировать их...

 
Aleksey Vyazmikin:

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

Поэтому идея такая, если нефть растет, то продаем пару USDCAD  и покупаем USDRUB (а лучше Si) - при получении совокупной прибыли закрываемся.

Есть ли в этом смысл и как проверить, вот в чем вопрос.


Слабая линейная взаимосвязь на разных ТФ:

т.е. возможно придется вводить дополнительные признаки для уменьшения дисперсии, а какие я не знаю

Для примера вот между EURUSD и USDCHF (как должна выглядеть более менее хорошая)


 

Я не стал собирать тики, а просто ввёл максимальный и минимальный уровень цен.

Индикатор находился на чарте с 10-00 до 15-30, для арбирража нужно, чтобы синяя линия уровня была выше

красной линии уровня, хотя бы на 20 пунктов, но этого не произошло.

Вывод - арбитраж Si -UCAD не возможен

 

Добавлено

Даже, если бы был возможен, то только в период между вечерними клирингами, из-за того, что

нет СПОТ цены на UCAD, а именно в вечерний клиринг меняется цена тика UCAD (может меняться довольно сильно).

Причина обращения: