Jump to content
Ugar68

Калькулятор корреляции символов

Recommended Posts

Ugar68

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

Скрипт считает коэффициент корреляции Пирсона для 2 символов на участке истории.

image.png.91ee981909ca8586dc4ebce65cc012aa.png
Start - задаётся начало участка истории
End - задаётся конец участка истории. Если задать будущее время и дату - будет считать до текущего бара.
Symbol_X, Symbol_Y - символы для расчёта.
Используются цены закрытия баров. Таймфрейм баров используется текущий графика, на котором запущен скрипт.
Естественно, перед запуском скрипта нужно позаботится о качестве истории по обоим символам.

Скрипт проверяет все бары участвующие в вычислении на наличие его пары, бара с тем же временем. Бары без пары пропускаются.

Correlations.mq4

  • Upvote 3

Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Ugar68

Нововведения в MQL5 позволили легко переделать скрипт для МТ5.

 

Correlation.mq5

  • Upvote 2

Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Ulantrade

может кому пригодится.

корнляция.jpg

Share this post


Link to post
Share on other sites
NewAlex

здравствуйте!

Можно глупый вопрос - а как эту корреляцию использовать? нет, серьезно...

если говорить обо всяких хеджированиях, расхождениях/схождениях, то зачем, напр. торговать одновременно EURUSD и USDJPY, если можно сразу EURJPY - сэкономим на спреде и свопах.

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

Если говорить об арбитраже тех же, напр. EURUSD, USDJPY и EURJPY - то это другая тема, и теоретически - да, но практически своп все съест.

Share this post


Link to post
Share on other sites
Ugar68

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

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

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

Приведу пару утрированных прибыльных примеров.
Допустим EURUSD = 1,19400, GBPUSD = 1,35400, спреды по 10п. Между ними 0,16000, спред по EURGBP 20п.
Потом допустим EURUSD ушла вверх на 100п 1,19500. GBPUSD = 1,35400. EURGBP=0,88257
Открыли EURUSD-Sell, GBPUSD-Buy, EURGBP-Sell. Закроем когда между EURUSD и GBPUSD будет опять 0,16000.
1. пример. EURUSD вернулась на 1,19400. GBPUSD осталась на месте 1,35400. EURGBP=0,88183.
По парному прибыль 1,19500-1,19400-10п-10п=80п. По кроссу 0,88257-0,88183-20п=54п.

2 пример. EURUSD осталась на месте 1,19500. GBPUSD поднялась вверх на 100п 1,35500. EURGBP=0,88192
По парному прибыль 1,35500-1,35400-10п-10п=80п. По кроссу 0,88257-0,88192-20п=45п.

 


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
AntFX

Продавая EURUSD и покупая GBPUSD мы остаемся в чистой продаже EURGBP, исключая из сделки доллар.  Никакого арбитража и статистических закономерностей здесь не прослеживается, пока мы не уберем из анализируемых инструментов одинаковую часть - доллар. Это одно из досадных и широко распространенных заблуждений в околофорексе.

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

Edited by AntFX

Статистика спредов | ПАММ-корректировщик | Section Divine

אף אדם לא לבד - כולנו איש אחד בלב אחד

Share this post


Link to post
Share on other sites
NewAlex

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

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

В общем, даже в тепличных условиях ждать долго (иногда днями). Для входа это некритично, а на выходе все съедается суммарным свопом. Ну, и да, на маленьких (или даже средних) объемах, не удается точно задать правильный размер лота.

Share this post


Link to post
Share on other sites
Ugar68
14 часов назад, NewAlex сказал:

вряд ли извернулся на разных парах в тестере.

Тестер МТ5 умеет работать по нескольким парам.

А по поводу свопов, они съедают прибыль только если сделки очень долгосрочные и ничтожные по прибыли.

Всё зависит от выбора символов и таймфрейма. Например хорошие сделки на EURUSD-GBPUSD H4. но они ооочень редкие. Месяцами, а то и годами ждать придётся. Свопы не съедают прибыль. А вот AUDUSD-NZDUSD разъезжаются очень надолго. Бессмысленно по свопам.

На более мелких таймфреймах сделки чаще, но мельче.

В общем, тестер МТ5 хороший помощник при разработке таких систем.

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


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
NewAlex

я для МТ4 писал, пока нет времени перейти (изучить матчасть) на МТ5. Так, на мой взгляд, большинство таких сделок долгосрочные и ничтожные по прибыли :)  Большой таймфрейм тут нет смысла выбирать, т.к. надо на каждой секунде (тике) пытаться ловить, расхождение долго не держится. Не очень понял, какой смысл Н4 брать, или мы о разном говорим? :) я про треугольник - тогда в вашем примере надо еще добавить EURGBP. В моем советнике я сразу несколько треугольников мониторил. Условие входа (если упростить): расхождение настолько велико, что будет положительный профит, если расхождение вернется к 0. При этом я еще добавлял настраиваемый коэффициент, т.к. предполагал, что спреды на выходе могут увеличиться. Вариант 2: то же самое, но на выходе ждать не нулевого расхождения, а в противофазе. Деталей не помню, но, кажется, по первому варианту оч. долго входа ждать, по второму - выхода. по второму варианту однозначно свопы все съедают. по первому  (да и по второму) - мне так и не удалось достичь баланса с точки зрения размера лотов (при маленьком депо), т.е. погрешность превышала потенциальный профит.

Share this post


Link to post
Share on other sites
Ugar68
3 часа назад, NewAlex сказал:

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

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

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


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
NewAlex

возьму паузу, найду код, попытаюсь что-то вспомнить... вот сразу сходу - символы по принципу чтобы два символа были среди Fx Majors, возможно, размер спреда анализировал.

А как можно символы неправильно подобрать? ) допустим, есть 2 символа: AB, BC, значит, третий - AC, ну, или CA (тогда инвертируем)

Share this post


Link to post
Share on other sites
Ratamahatta
В 02.10.2018 в 19:23, AntFX сказал:

Продавая EURUSD и покупая GBPUSD мы остаемся в чистой продаже EURGBP...

Вряд ли это верное утверждение ! Кросс не синхронен.

Edited by Ratamahatta

Share this post


Link to post
Share on other sites
AntFX
5 минут назад, Ratamahatta сказал:

Вряд ли это верное утверждение ! Кросс не синхронен.

Аргументами по существу, как я понимаю, Вы себя утруждать не привыкли? 

Edited by AntFX

Статистика спредов | ПАММ-корректировщик | Section Divine

אף אדם לא לבד - כולנו איש אחד בלב אחד

Share this post


Link to post
Share on other sites
Ratamahatta
1 минуту назад, AntFX сказал:

Аргументами по существу, как я понимаю, Вы себя утруждать не привыкли? 

Виноват! Я откорректировал свое сообщение "Кросс не синхронен", точнее не на 100% синхронен.

Share this post


Link to post
Share on other sites
AntFX
Только что, Ratamahatta сказал:

Виноват! Я откорректировал свое сообщение "Кросс не синхронен", точнее не на 100% синхронен.

И тем не менее в этой фразе отсутствует что-либо, проливающее свет на обоснование сделанного Вами утверждения.


Статистика спредов | ПАММ-корректировщик | Section Divine

אף אדם לא לבד - כולנו איש אחד בלב אחד

Share this post


Link to post
Share on other sites
AntFX

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

Edited by AntFX

Статистика спредов | ПАММ-корректировщик | Section Divine

אף אדם לא לבד - כולנו איש אחד בלב אחד

Share this post


Link to post
Share on other sites
Ratamahatta

Вы сами за меня ответили!

Могу, кстати, если кому-то интересно, выложить свою заготовку такого индикатора (МТ5)

Было бы очень интересно!

Edited by Ratamahatta

Share this post


Link to post
Share on other sites
AntFX
28 минут назад, Ratamahatta сказал:

Было бы очень интересно!

Скрытый текст

 


//+------------------------------------------------------------------+
//|                                                        iRCCI.mq5 |
//|                                             Copyright AntFX 2018 |
//|                              https://www.mql5.com/en/users/AntFX |
//+------------------------------------------------------------------+
//#include <antfx_mt5_900.mqh>

#property copyright "Copyright AntFX 2018"
#property link      "https://www.mql5.com/en/users/AntFX"
#property version   "1.00"
#property indicator_separate_window

#property indicator_buffers 8
#property indicator_plots 8

#property indicator_label1 "USD"
#property indicator_type1  DRAW_LINE
#property indicator_style1 STYLE_SOLID
#property indicator_color1 clrBlue
#property indicator_width1 1

#property indicator_label2 "EUR"
#property indicator_type2  DRAW_LINE
#property indicator_style2 STYLE_SOLID
#property indicator_color2 clrYellow
#property indicator_width2 1

#property indicator_label3 "GBP"
#property indicator_type3  DRAW_LINE
#property indicator_style3 STYLE_SOLID
#property indicator_color3 clrCyan
#property indicator_width3 1

#property indicator_label4 "CHF"
#property indicator_type4  DRAW_LINE
#property indicator_style4 STYLE_SOLID
#property indicator_color4 clrRed
#property indicator_width4 1

#property indicator_label5 "JPY"
#property indicator_type5  DRAW_LINE
#property indicator_style5 STYLE_SOLID
#property indicator_color5 clrWhite
#property indicator_width5 1

#property indicator_label6 "AUD"
#property indicator_type6  DRAW_LINE
#property indicator_style6 STYLE_SOLID
#property indicator_color6 clrGreen
#property indicator_width6 1

#property indicator_label7 "CAD"
#property indicator_type7  DRAW_LINE
#property indicator_style7 STYLE_SOLID
#property indicator_color7 clrOrange
#property indicator_width7 1

#property indicator_label8 "NZD"
#property indicator_type8 DRAW_LINE
#property indicator_style8 STYLE_SOLID
#property indicator_color8 clrMagenta
#property indicator_width8 1

#define USD 0
#define EUR 1
#define GBP 2
#define CHF 3
#define JPY 4
#define AUD 5
#define CAD 6
#define NZD 7

input int extFastPeriod=60;
input int extSlowPeriod=15;
input bool extUSD=true;
input bool extEUR=true;
input bool extGBP=true;
input bool extCHF=true;
input bool extJPY=true;
input bool extAUD=true;
input bool extCAD=true;
input bool extNZD=true;
input uint extBars=1000;

double usd_buf[], eur_buf[], gbp_buf[], chf_buf[], jpy_buf[], aud_buf[], cad_buf[], nzd_buf[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(extBars==0){
      Print("Set extBars to positive!");
      return(INIT_FAILED);
   }
//--- indicator buffers mapping
   SetIndexBuffer(USD, usd_buf);
   SetIndexBuffer(EUR, eur_buf);
   SetIndexBuffer(GBP, gbp_buf);
   SetIndexBuffer(CHF, chf_buf);
   SetIndexBuffer(JPY, jpy_buf);
   SetIndexBuffer(AUD, aud_buf);
   SetIndexBuffer(CAD, cad_buf);
   SetIndexBuffer(NZD, nzd_buf);
   
   ArraySetAsSeries(usd_buf, true);
   ArraySetAsSeries(eur_buf, true);
   ArraySetAsSeries(gbp_buf, true);
   ArraySetAsSeries(chf_buf, true);
   ArraySetAsSeries(jpy_buf, true);
   ArraySetAsSeries(aud_buf, true);
   ArraySetAsSeries(cad_buf, true);
   ArraySetAsSeries(nzd_buf, true);
   
   IndicatorSetInteger(INDICATOR_DIGITS, 0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   static datetime last_bar=0;
   if(iTime(Symbol(), Period(), 1)==last_bar)   return(rates_total);
   if(prev_calculated==0){
      Comment("Start loading of data...");
   }
   if(rates_total<(int)extBars){
      Comment("RATES TOTAL = ", rates_total);
      return(prev_calculated);
   }
   bool sync=true;
   for(int i=0; i<8; i++)
      for(int j=(8-2); j>=0; j--)
         if(i!=j){
            string sym=GetPairName(i, j);
//            Comment("Синхронизируем ",sym);
            if(IsStopped()){
               return(prev_calculated);
            }
            if(/*!IsSync(sym, PERIOD_CURRENT) || */
               _ind(iMA(sym, PERIOD_CURRENT, extFastPeriod, 0, MODE_SMA, PRICE_CLOSE), 0, 1)==EMPTY_VALUE
            || _ind(iMA(sym, PERIOD_CURRENT, extSlowPeriod, 0, MODE_SMA, PRICE_CLOSE), 0, 1)==EMPTY_VALUE){
               Comment("Ждем синхронизации символов...", sym);
               sync=false;
            }
         }
   if(!sync)   return(prev_calculated);
   Comment("");//Синхронизация прошла успешно");
//---
   for(int j=(fmax(1, rates_total-prev_calculated-1))-1; j>=0; j--){
      if(j<=0 || j>=(int)extBars){
         usd_buf[j]=EMPTY_VALUE;
         eur_buf[j]=EMPTY_VALUE;
         gbp_buf[j]=EMPTY_VALUE;
         chf_buf[j]=EMPTY_VALUE;
         jpy_buf[j]=EMPTY_VALUE;
         aud_buf[j]=EMPTY_VALUE;
         cad_buf[j]=EMPTY_VALUE;
         nzd_buf[j]=EMPTY_VALUE;
         continue;
      }
      usd_buf[j]=extUSD?GetIndexOf(usd_buf[j+1]==EMPTY_VALUE?1.0:usd_buf[j+1], USD, j):EMPTY_VALUE;
      eur_buf[j]=extEUR?GetIndexOf(eur_buf[j+1]==EMPTY_VALUE?1.0:eur_buf[j+1], EUR, j):EMPTY_VALUE;
      gbp_buf[j]=extGBP?GetIndexOf(gbp_buf[j+1]==EMPTY_VALUE?1.0:gbp_buf[j+1], GBP, j):EMPTY_VALUE;
      chf_buf[j]=extCHF?GetIndexOf(chf_buf[j+1]==EMPTY_VALUE?1.0:chf_buf[j+1], CHF, j):EMPTY_VALUE;
      jpy_buf[j]=extJPY?GetIndexOf(jpy_buf[j+1]==EMPTY_VALUE?1.0:jpy_buf[j+1], JPY, j):EMPTY_VALUE;
      aud_buf[j]=extAUD?GetIndexOf(aud_buf[j+1]==EMPTY_VALUE?1.0:aud_buf[j+1], AUD, j):EMPTY_VALUE;
      cad_buf[j]=extCAD?GetIndexOf(cad_buf[j+1]==EMPTY_VALUE?1.0:cad_buf[j+1], CAD, j):EMPTY_VALUE;
      nzd_buf[j]=extNZD?GetIndexOf(nzd_buf[j+1]==EMPTY_VALUE?1.0:nzd_buf[j+1], NZD, j):EMPTY_VALUE;
//      if(j==1){
//         IndicatorSetString(INDICATOR_SHORTNAME,"RCCI:"+" USD="+_dts(usd_buf[1])+" EUR="+_dts(eur_buf[1])+" GBP="+_dts(gbp_buf[1])+
//            " CHF="+_dts(chf_buf[1])+" JPY="+_dts(jpy_buf[1])+" AUD="+_dts(aud_buf[1])+" CAD="+_dts(cad_buf[1])+" NZD="+_dts(nzd_buf[1]));
//      }
   }
//--- return value of prev_calculated for next call
   last_bar=iTime(Symbol(), Period(), 1);
   return(rates_total);
  }
//+------------------------------------------------------------------+

double GetIndexOf(double prev, int cur, int bar){
   double index=1;
//   if(extBars==5123 && (iTime(Symbol(), PERIOD_CURRENT, bar)==D'2018.06.13 20:30' || iTime(Symbol(), PERIOD_CURRENT, bar)==D'2018.06.13 20:45' || iTime(Symbol(), PERIOD_CURRENT, bar)==D'2018.06.13 21:00')){
//      Print("Time=",_tts(iTime(Symbol(), PERIOD_CURRENT, bar))," prev=",_dtsd(prev));
//   }
   for(int i=0; i<8; i++){
      if(cur==i)  continue;
      string pair=GetPairName(cur, i);
      int bar0=iBarShift(pair, PERIOD_CURRENT, iTime(Symbol(), PERIOD_CURRENT, bar));
      if(bar0<0){
         Print("Bar at time ",TimeToString(iTime(Symbol(), PERIOD_CURRENT, bar))," not found for ",pair);
         return(prev);
      }
      int bar1=iBarShift(pair, PERIOD_CURRENT, iTime(Symbol(), PERIOD_CURRENT, bar+1));
      if(bar1<0){
         Print("Bar at time ",TimeToString(iTime(Symbol(), PERIOD_CURRENT, bar+1))," not found for ",pair);
         return(prev);
      }
//      if(extBars==5123 && (iTime(Symbol(), PERIOD_CURRENT, bar)==D'2018.06.13 20:30' || iTime(Symbol(), PERIOD_CURRENT, bar)==D'2018.06.13 20:45' || iTime(Symbol(), PERIOD_CURRENT, bar)==D'2018.06.13 21:00')){
//         Print("Adding pair ",pair," with Close0= ",_dtsd(iClose(pair, PERIOD_CURRENT, bar0))," and Close1=",_dtsd(iClose(pair, PERIOD_CURRENT, bar1))," = ",_dts((iClose(pair, PERIOD_CURRENT, bar0) / iClose(pair, PERIOD_CURRENT, bar1)-1)*10000, 2)+"%");
//      }

// !!!
//      double change=(iClose(pair, PERIOD_CURRENT, bar1)==0?1.0:iClose(pair, PERIOD_CURRENT, bar0) / iClose(pair, PERIOD_CURRENT, bar1));
      ResetLastError();
      int h_ma_slow=iMA(pair, PERIOD_CURRENT, extSlowPeriod, 0, MODE_SMA, PRICE_CLOSE);
      int h_ma_fast=iMA(pair, PERIOD_CURRENT, extFastPeriod, 0, MODE_SMA, PRICE_CLOSE);
      double ma_slow=0, ma_fast=0;
      if(h_ma_slow!=INVALID_HANDLE && h_ma_fast!=INVALID_HANDLE){
         ma_slow=_ind(h_ma_slow, 0, bar);
         ma_fast=_ind(h_ma_fast, 0, bar);
      }
      double change=(ma_fast==0?1.0:ma_slow / ma_fast);

      if(StringFind(pair, CurName(cur))>1){
         change=1/change;
      }
      index*=change;
   }
//   if(extBars==5123 && (iTime(Symbol(), PERIOD_CURRENT, bar)==D'2018.06.13 20:30' || iTime(Symbol(), PERIOD_CURRENT, bar)==D'2018.06.13 20:45' || iTime(Symbol(), PERIOD_CURRENT, bar)==D'2018.06.13 21:00')){
//     Print("Resulting value is ",_dtsd(prev * (MathPow(index, 1.0/7))));
//   }
//   return(prev * (MathPow(index, 1.0/7)));
   return(100000*(MathPow(index, 1.0/7)-1));
}

string GetPairName(int base, int quote){
   string name=CurName(base)+CurName(quote);
   if(!SymbolSelect(name, true)){
      name=CurName(quote)+CurName(base);
      if(!SymbolSelect(name, true)){
         Print("Cannot find pair for ", CurName(base)," and ",CurName(quote),"!");
         double a=10;
         double b=a;
         Print(1/(b-a));
      }
   }
   return(name);
}

string CurName(int cur){
   switch(cur){
      case USD: return("USD"); break;
      case EUR: return("EUR"); break;
      case GBP: return("GBP"); break;
      case CHF: return("CHF"); break;
      case JPY: return("JPY"); break;
      case AUD: return("AUD"); break;
      case CAD: return("CAD"); break;
      case NZD: return("NZD"); break;
   }
   return("XXX");
}

double _ind(int hnd, int _buf, int index, double empty=EMPTY_VALUE){
   if(index < 0) return(EMPTY_VALUE);
   double Arr[];
   return(CopyBuffer(hnd, _buf, index, 1, Arr)==1?Arr[0]:empty);
}

 

 

 

Это не индексы валют, а индексы их относительного изменения на основе усредненных отношений быстрых и медленных МА на данном ТФ по доступным для них кроссам. Relative Currencies Change Index - RCCI

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

 

П.С. Если на каком-то символе "застревает" "синхронизация символов", рекомендую открыть этот символ на текущем ТФ в отдельном окне рядом, сразу все появится. Синхронизация и загрузка данным по символам/тФ, отличным от открытых графиков в МТ5 до сих пор жесть страшная...

Edited by AntFX

Статистика спредов | ПАММ-корректировщик | Section Divine

אף אדם לא לבד - כולנו איש אחד בלב אחד

Share this post


Link to post
Share on other sites
Ugar68
8 часов назад, NewAlex сказал:

возьму паузу, найду код, попытаюсь что-то вспомнить... вот сразу сходу - символы по принципу чтобы два символа были среди Fx Majors, возможно, размер спреда анализировал.

А как можно символы неправильно подобрать? ) допустим, есть 2 символа: AB, BC, значит, третий - AC, ну, или CA (тогда инвертируем)

Возможно по этому и не получен положительный результат. Например взять EURUSD - AUDUSD. Корреляция низкая. Даже если добавить их кросс, это мало поможет. А значит движение у них относительно друг друга близко к хаотичному. А значит что если они разъехались, то это не означает что с высокой вероятностью съедутся обратно. Открывать встречные сделки в надежде что они съедутся всё равно что торговать по рандому.

Вот для определения корреляции символов и сделан калькулятор.


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
NewAlex

Ugar68 , мне продолжает казаться, что мы о разном говорим :) Вы рассматриваете корреляцию 2 пар, я даже спорить не буду, что она разная, если разные пары брать, т.к. согласен с этим. Только мне кажется, что это знание бесполезно, т.к. для арбитража надо рассматривать три пары (треугольник). В идеале он сбалансирован: если правльно высчитать размеры лотов и одновременно открыть три позиции, то вы всегда будете в 0 (если игнорировать спреды, свопы и т.д.). На практике иногда возникает арбитражная ситуация, которую в теории можно использовать. Как я понимаю, на вероятность (частоту) возникновения арбитражной ситуации никак не влияет значение корреляции между 2 (из 3!) пар, используемых в данной стратегии. По крайней мере, мне это не очевидно, буду признателен, если обоснуете. Наверно, волатильность влияет, но не уверен. Поэтому я и говорю, что наличие/отсутствие корреляции не должно учитываться при арбитраже,  при хеджировании - тоже, т.к. проще одной парой (кроссом?) торговать... остается диверсификация...которая тоже обеспечивается "на глаз" - просто не надо торговать символы, в которых присутствет название валюты, которая уже использовалась в других символах :)

 

по поводу кода: я набирал статистику за заданный (настраиваемый) промежуток времени и считал минимальную и максимальную дивергенцию. После этого входил (открывал 3 позиции), если текущая дивергенция была больше, чем максимальная (умноженная на настраиваемый к-т). Выходил - при достижении минимальной дивергенции (умноженной на другой настраиваемый к-т) или максимальной дивергенции (умноженной на третий настраиваемый к-т). Аналог TP и SL. Если честно, не до конца разобрался, как я этими 3 к-тами играл, но, по большому счету, это (плюс время для сбора статистики) единственные настраиваемые параметры. Думаю, идея понятна, и тем самым я решил вот эту проблему:

21 час назад, Ugar68 сказал:

А может расхождение для них нормально, а сходиться они не собираются?

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

Share this post


Link to post
Share on other sites
NewAlex
8 часов назад, AntFX сказал:

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

есть такой индикатор, я его скопипастил откуда-то с CodeBase и чуть поработал напильником, пытался торговать, но потом понял, что изменение чистого индекса валюты вовсе не означает, что он в ближайшее время вернется обратно к прежнему значению :)

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

Share this post


Link to post
Share on other sites
Ugar68
17 минут назад, NewAlex сказал:

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

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

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

Статистический арбитраж, это обширная область. Хеджирование это одно из направлений. Но хеджирование по EURUSD-GBPUSD это совсем не то же самое что торговля по EURGBP, это больше похоже на торговлю индексам EUR - GBP по кластерным индикаторам. Вообще хеджирование было придумано для торговли символами с одинаковым образованием цен. Например акции сбера обыкновенные и привилегированные, или нефть WTI и Brent... Но и на форекс можно применять для арбитража индексов валют стран, экономики которых взаимозависимы.


Пишу советники и индикаторы по вашим алгоритмам. Пишите на ugar68@bk.ru.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
NewAlex
39 минут назад, Ugar68 сказал:

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

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

 

40 минут назад, Ugar68 сказал:

Но хеджирование по EURUSD-GBPUSD это совсем не то же самое что торговля по EURGBP

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

 

...по последней части не могу комментировать - вообще не владею темой :(

Share this post


Link to post
Share on other sites
ZeleBoba
8 минут назад, NewAlex сказал:

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

 

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

 

...по последней части не могу комментировать - вообще не владею темой :(

Вы совсем не учитываете движение соотношения экономик Евро и Великобритании в независимой части от США


Лучше маленький профит, чем большие рога.

Share this post


Link to post
Share on other sites
DVargo

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

Тогда вероятность спреда меньше среднего достаточна велика.

 

Только у Альпари он какой-то странный - по кросу меньше чем по фунту. А если перевести фунты в баксы то одинаковый.

 

Как я понимаю, арбитражники зарабатывают в основном на хаосе - рыночном шуме, по чуть-чуть и с минимальными рисками.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×