Пожалуйста, вставляйте код в сообщения правильно: Правильно вставляем код на форуме
Добрый день всем форумчанам !
Возник вопрос в подходе расчета корреляции валютных пар, есть несколько подходов на сколько мне известно спирмен, пирсон, может еще какие есть, я расчитываю так:
1.
еще есть метод, немного побольше кода, но значения выдает примерно теже что и этот за аналогичный период расчета и таймфрейм (разнича не более 0.01), но есть онлайн калькуляторы корреляции, (не знаю можно ли выкладывать ссылки), так вот ихние результаты отличаются от того что выдает данных подход, причем иногда очень существенно, по методу CORRELATION() за 150 баров по М5 например = 0.24, а на сайте 0.46 (корреляция 2х пар например EURGBP / GBPCHF - значения с потолка это не суть, суть в том что есть отличия ) Причем на нескольких онлайн калькуляторах цифры одинаковы...
Так вот вопрос к Вам, каким образом Вы расчитываете корреляцию, может быть Спермен, я его попробовал но значения получаются 145.34, 235.54 и что то подобное, может что не так сделал.
Если примеры расчета кто выложит буду признателен. Спасибо.
Добрый день всем форумчанам !
Возник вопрос в подходе расчета корреляции валютных пар, есть несколько подходов на сколько мне известно спирмен, пирсон, может еще какие есть, я расчитываю так:
1.
еще есть метод, немного побольше кода, но значения выдает примерно теже что и этот за аналогичный период расчета и таймфрейм (разнича не более 0.01), но есть онлайн калькуляторы корреляции, (не знаю можно ли выкладывать ссылки), так вот ихние результаты отличаются от того что выдает данных подход, причем иногда очень существенно, по методу CORRELATION() за 150 баров по М5 например = 0.24, а на сайте 0.46 (корреляция 2х пар например EURGBP / GBPCHF - значения с потолка это не суть, суть в том что есть отличия ) Причем на нескольких онлайн калькуляторах цифры одинаковы...
Так вот вопрос к Вам, каким образом Вы расчитываете корреляцию, может быть Спермен, я его попробовал но значения получаются 145.34, 235.54 и что то подобное, может что не так сделал.
Если примеры расчета кто выложит буду признателен. Спасибо.
Я как-то встречал в сети рекламу советников, в которых торговая система построена на астрологически-астрономических показателях.Так надо понимать, что создатели этих торговых систем смогли вычислить корреляцию между расположением небесных тел и движением рыночных цен ... Скорей всего, метод применяемый для определения корреляции в этом случае, отличается от метода расчёта, где ставится задача поиска корреляции по статистическим данным к примеру, частота котирования по инструменту в зависимости от времени по Гринвичу...
Из собственной практики - как критерий для исследования использую направление движения цены, при расчёте пользуюсь формулой Фехнера.
Alexander Lasygin, Vladimir Suschenko спасибо за комментарии, собственно мне нужен метод для хэджевого советника, для понимания характера движения ПП или корзины. Может быть есть варианты расчета чего либо(корреляции или нет) для того чтобы понимать какам образом ведут себя пары относительно друг друга ? Метод нужен как фильтр, чтобы отбрасывать не имеющие ничего общего связи.
lmsnn:
Возможно Вам подойдёт этот индикатор.
Считает коэффициент ранговой корреляции Спирмена между двумя инструментами.
Функцию я взял отсюда.
//+------------------------------------------------------------------+ //| Spearman-rank-correlation.mq4 | //| Copyright © 2005-2015, Igor Korepin | //| https://www.mql5.com/ru/users/xupypr | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005-2015, Igor Korepin" #property link "https://www.mql5.com/ru/users/xupypr" #property strict #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 SteelBlue #property indicator_minimum -1.1 #property indicator_maximum 1.1 #property indicator_level1 -1 #property indicator_level2 1 input ushort Cor_Period=12; //Spearman's Rank Correlation Period input ushort Cal_Bars=100; //Calculated Bars input string Symbol_2="EURUSD"; //Second Symbol double Buffer[]; double V1[],V2[]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0,Buffer); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2); SetIndexLabel(0,"Coefficient"); ArrayResize(V1,Cor_Period); ArrayResize(V2,Cor_Period); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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[]) { int begin; if(prev_calculated==0) begin=Cal_Bars-1; else { begin=rates_total-prev_calculated; if(begin>Cal_Bars-1) begin=Cal_Bars-1; } for(int b=begin;b>=0;b--) { CopyClose(_Symbol,0,b,Cor_Period,V1); CopyClose(Symbol_2,0,b,Cor_Period,V2); if(GetLastError()==4066) return(0); Buffer[b]=GetSpearmanRankCorr(V1,V2); } return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int GetRank(double &vector[],double &rank[]) { double tmp,vtmp[][2]; int i,count,res=0,period=ArraySize(vector); ArrayResize(rank,period); ArrayResize(vtmp,period); for(i=0;i<period;i++) { vtmp[i][0]=vector[i]; vtmp[i][1]=i; } ArraySort(vtmp); for(i=0;i<period;i++) { count=0; while(i<period-1) { if(vtmp[i][0]!=vtmp[i+1][0]) break; count++; i++; } tmp=i; if(count>0) { tmp-=count/2.0; res+=count*(count+1)*(count+2); } while(count>=0) { vtmp[i-count][0]=vtmp[i-count][1]; vtmp[i-count][1]=tmp; count--; } } ArraySort(vtmp); for(i=0;i<period;i++) rank[i]=vtmp[i][1]; return(res); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double GetSpearmanRankCorr(double &vector1[],double &vector2[]) { double res=0; double rank1[],rank2[]; int a1,a2,n=ArraySize(vector1); a1=GetRank(vector1,rank1); a2=GetRank(vector2,rank2); for(ushort i=0;i<n;i++) res+=MathPow(rank1[i]-rank2[i],2); n=n*(n*n-1); if((a1==0) && (a2==0)) res=1-6*res/n; else { if((n-a1)==0 || (n-a2)==0) res=0.0; else res=(n-(a1+a2)/2.0-6*res)/MathSqrt((double)(n-a1)*(double)(n-a2)); } return(res); } //+------------------------------------------------------------------+
- www.mql5.com
Возможно Вам подойдёт этот индикатор.
Считает коэффициент ранговой корреляции Спирмена между двумя инструментами.
Функцию я взял отсюда.
....в отличии от пирсона при одинаковых параметрах выдает немного отличные от него результаты....
Не удивительно, это всё таки ранговая корреляция
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день всем форумчанам !
Возник вопрос в подходе расчета корреляции валютных пар, есть несколько подходов на сколько мне известно спирмен, пирсон, может еще какие есть, я расчитываю так:
1.
еще есть метод, немного побольше кода, но значения выдает примерно теже что и этот за аналогичный период расчета и таймфрейм (разнича не более 0.01), но есть онлайн калькуляторы корреляции, (не знаю можно ли выкладывать ссылки), так вот ихние результаты отличаются от того что выдает данных подход, причем иногда очень существенно, по методу CORRELATION() за 150 баров по М5 например = 0.24, а на сайте 0.46 (корреляция 2х пар например EURGBP / GBPCHF - значения с потолка это не суть, суть в том что есть отличия ) Причем на нескольких онлайн калькуляторах цифры одинаковы...
Так вот вопрос к Вам, каким образом Вы расчитываете корреляцию, может быть Спермен, я его попробовал но значения получаются 145.34, 235.54 и что то подобное, может что не так сделал.
Если примеры расчета кто выложит буду признателен. Спасибо.