#property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Red extern string Pair2 = "GBPUSD"; extern int CorrelationPeriod = 50; double Cor[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { SetIndexBuffer(0,Cor); SetIndexStyle(0,DRAW_LINE); //---- indicators //---- return(0); } //+------------------------------------------------------------------+ int start() { double sum1,sum2,m1,m2,s1,s2; double cov,sd1,sd2,Den; int counted_bars=IndicatorCounted(); if (counted_bars>0) counted_bars--; //---- for (int i=Bars-CorrelationPeriod-1; i>=0; i--) { m1 = iMA(NULL,0,CorrelationPeriod,0,MODE_SMA,PRICE_CLOSE,i); m2 = iMA(Pair2,0,CorrelationPeriod,0,MODE_SMA,PRICE_CLOSE,i); sum1 = 0; sum2 = 0; for (int j=i; j<=i+CorrelationPeriod; j++) { sum1 += Close[j]-m1; sum2 += iClose(Pair2,0,j)-m2; s1 += (Close[j]-m1)*(Close[j]-m1); s2 += (iClose(Pair2,0,j)-m2)*(iClose(Pair2,0,j)-m2); } cov = (sum1*sum2)/CorrelationPeriod; sd1 = MathSqrt(s1/CorrelationPeriod); sd2 = MathSqrt(s2/CorrelationPeriod); Den = sd1*sd2; if (Den == 0) Den = 0.0001; Cor[i] = cov/Den; } //---- return(0); }
подскажите, пожалуйста, где ошибка. Вроде бы всё по формулам, но индикатор не работает
Заранее благодаренЧто вы проверяете на кореляцию? Какие 2 массива. Можно словами, т.к. из кода не все понимаю. Правильно ли я понял, что Вы проверяете кореляцию Close какой то валюты (та на которой висит индикатор) с GBPUSD, а 50 означает размер массива.
подскажите, пожалуйста, где ошибка. Вроде бы всё по формулам, но индикатор не работает
Заранее благодаренЧто вы проверяете на кореляцию? Какие 2 массива. Можно словами, т.к. из кода не все понимаю. Правильно ли я понял, что Вы проверяете кореляцию Close какой то валюты (та на которой висит индикатор) с GBPUSD, а 50 означает размер массива.
Именно так, как Вы и описали: Close валюты на которой висит индикатор и Close GBPUSD, 50 же означает размер массива.
Странный какой-то метод определения корреляции. Нет x*y
Почему нет? По определению корреляция это ковариация делённая на произведение стандартных отклонений (если я правильн понял, именно то самое х*у). Вот этот кусок кода:
sd1 = MathSqrt(s1/CorrelationPeriod); sd2 = MathSqrt(s2/CorrelationPeriod); Den = sd1*sd2; if (Den == 0) Den = 0.0001; Cor[i] = cov/Den;
Я действительно изначально не определил цвет линии, но теперь линия то есть, но во-первых терминал зависает (почему это происходит не знаю), а во-вторых та ли это линия - её колебания должны происходить в пределах -1 и 1, но этого нет...
Вроде вот так она должна рассчитываться, это маткад. mean() эта фунция вычисляет МОЖ
подскажите, пожалуйста, где ошибка. Вроде бы всё по формулам, но индикатор не работает
Заранее благодаренЧто вы проверяете на кореляцию? Какие 2 массива. Можно словами, т.к. из кода не все понимаю. Правильно ли я понял, что Вы проверяете кореляцию Close какой то валюты (та на которой висит индикатор) с GBPUSD, а 50 означает размер массива.
Именно так, как Вы и описали: Close валюты на которой висит индикатор
и Close GBPUSD, 50 же означает размер массива.
Странный какой-то метод определения корреляции. Нет x*y
Почему нет? По определению корреляция это ковариация делённая на произведение стандартных отклонений (если я правильн понял, именно то самое х*у). Вот этот кусок кода:
sd1 = MathSqrt(s1/CorrelationPeriod); sd2 = MathSqrt(s2/CorrelationPeriod); Den = sd1*sd2; if (Den == 0) Den = 0.0001; Cor[i] = cov/Den;
Я действительно изначально не определил цвет линии, но теперь
линия то есть, но во-первых терминал зависает (почему это происходит
не знаю), а во-вторых та ли это линия - её колебания должны происходить
в пределах -1 и 1, но этого нет...
если больше - начинает умирать
Вроде вот так она должна рассчитываться, это маткад. mean() эта фунция вычисляет МОЖ
Хм... да я в принципе так и пытаюсь сделать... Только вот теперь меня смущает формула расчёта ковариации, сравните со справкой Excel:
я имею ввиду её начало: 1/n в Excel и 1/m*n в Mathcad. Или я что-то неправильно понимаю?
сейчас ещё попробую counted_bars = 1000
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
подскажите, пожалуйста, где ошибка. Вроде бы всё по формулам, но индикатор не работает
Заранее благодарен