MQL4 - automated forex trading   /  

Code Base

Code Base  Индикаторы  L_Correlation Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый код


Скачай MetaTrader 5 и посети MQL5.community Code Base
и торгуй мобильно!
Библиотека программ на новом MQL5
Готовься к Чемпионату -
Не нашёл подходящий код? Закажи его в разделе Работа

Этот скрипт для
MetaTrader 4

и торгуй мобильно!

Имя:
L_Correlation [ en | cn ]
Автор: lotos4u (27.06.2008 10:26)
Рейтинг: 5
Скачано: 1180
Скачать:
 ^L_Correlation.mq4 (7.2 Kb) View
 ^L_Correlation_v2.mq4 (25.8 Kb) View

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

В окне индикатора отображается:

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

Параметры индикатора

Mode = 0, 1, 2... - параметр, определяющий, для какого именно параметра ценового графика вычислять корреляцию (0 - для цены закрытия бара, 1 - для разности между ценой закрытия и ценой открытия, 2 - для отношения цены закрытия к максимальной цене бара,... полностью - см. комментарий в коде индикатора)

Pair = "USDCHF", "EURUSD"... - валютная пара, для которой требуется вычислить коэффицент корреляции
ShowCorrelation = true - если нужно отображать буфер коэффициента корреляции, = false, если не нужно
ShowMA = true - если нужно отображать буфер скользящей средней коэффициента корреляции, = false, если не нужно
CorrelationRadius = 15 - радиус корреляции
MA_Period = 10 - период скользящей средней
ResultingBars = 0 - количество баров, по которым вычисляется итоговое среднее значение коэффициента корреляции (это значение выводится в нижнем левом углу окна). Если ResultingBars = 0, то среднее считается по всем полученным значениям коэффициента корреляции

FontName = "Verdana" - фонт, которым выводится среднее значение коэф. корреляции
FontSize = 10 - размер фонта
FontColor = Black - цвет фонта

Дополнения

  • Добавлена возможность расчета автокорреляции (управляется параметром AutoCorrelation, параметр AutoCorrelationShift - величина смещения). В этом режиме параметр Pair игнорируется.
  • Выделяются существенные точки, т.е. экстремумы коэффициента (авто-)корреляции, которые превосходят некоторый заданный уровень (EssentialLevel)

          ShowEssentialPoints - Количество существенных точек для отображения. Если =0, то отображаются все точки, если =-1, то не отображаются

  • В режиме автокорреляции на чарте отображаются области, для которых были получены существенные значения коэффициента

          ShowEssentialRanges - Количество границ существенных интервалов (вертикальные линии) для отображения. Если =0, то отображаются границы, если =-1, то не отображаются

          ShowEssentialRectangles - Количество существенных областей (прямоугольники на чарте) для отображения. Если =0, то отображаются все области, если =-1, то не отображаются

  • Добавлена возможность автоматического выбора параметров CorrelationRadius и AutoCorrelationShift в зависимости от тайм-фрейма (для этого нужно установить им нулевые значения)
  • Добавлены новые варианты базовой функции (т.е. возможные значения параметра Mode). Подробнее см. комментарий к коду индикатора.
  • В итоговой надписи выводится два вида среднего значения коэф. корреляции: первое число - это максимум гистограммы, а второе - это скользящее среднее с периодом на всю длину истории (или только по последним ResultingBars барам)
  • Отображение итоговой надписи вкл(откл) параметром ShowSummary



10 комментариев  Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый комментарий
lotos4u писал(а):
StatBars писал(а):

Что за гистограмма? можно поподробней, что типа функции распределения?

Да :). Я бы именно так и сказал "что-то типа".

Строится она так: весь интервал от -1 до +1 разбивается 200 участков. Каждому участку соответствует столбик гистограммы. Высота столбика (т.е. длина в данном случае) определяется количеством значений коэффициента корреляции, которые укладываются в участке, соответствующем столбику.

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

Это не глюк,и не надо ничего обновлять. В теории вероятностей широко известен факт, что наиболее вероятное значение или, как его еще называют, "мода" (т.е. значение рассматриваемой величины, при котором плотность распределения вероятностей - ну или гистограмма в вашем случае - максимальна) и среднее значение (оно же математическое ожидание, оно же первый момент, оно же интеграл от x*W(x) по dx) той же величины не есть одно и то же. Они совпадают только в некоторых ситуациях, например, при равномерном распределении или гауссовом. Есть и еще одна интересная характеристика ряда - т.н. "медиана", т.е. то значение, которое делит вариационный ряд на две равные части: 50 % ряда имеет значение признака не больше, чем медиана, а 50 % - не меньше, чем медиана. Какое из "средних" выбирать, зависит от того, какова задача и что именно надо оценить.

P.S. Кстати, несовпадение моды и матожидания - один из распространенных методов проверки распределения ряда на "негауссовость". А вообще, lotos4u, ваше бы рвение да на серьезное дело:)

15.11.2008 21:25 alsu
Жаль, Integer сюда не заглянул. Полезно было бы услышать его мнение, он крупный спец по корреляции.
09.07.2008 21:16 granit77

StatBars писал(а):

Я не понял что значит сопоставляемые бары относились к одной дате? Вообще мне показалось что здесь дата не нужна... Типа дыры в графике что ли?

Да, именно дыры в истории. Бывает так, что по одному инструменту есть бар, а по другому инструменту бара с таким временем нет. Если пытаться сопоставить, валюту и, скажем, сою и т.п., то нестыковок может быть очень много.
29.06.2008 19:00 lotos4u
StatBars писал(а):

Кстати, вот это могло бы помочь. n - кол-во элементов для которых надо вычислить корр.

Да, спасибо. Так удобно, если есть уже два готовые массива.
29.06.2008 18:56 lotos4u

Кстати, вот это могло бы помочь. n - кол-во элементов для которых надо вычислить корр.

double Corr(double M1[], double M2[])
{
   double mx=0,my=0;
   double chislitel=0, znamenatel=0;
   double X=0,Y=0;
   double res=0,f;
   
   int i=0;
   f=n;
   for(i=0;i<n;i++){mx+=M1[i];my+=M2[i];}
   
   mx/=f;my/=f;
   
   for(i=0; i<n; i++)
   {
      chislitel+=(M1[i]-mx)*(M2[i]-my);
      X+=MathPow((M1[i]-mx),2);
      Y+=MathPow((M2[i]-my),2);
      
   }
   
   chislitel/=f;
   X/=(f-1);
   Y/=(f-1);
   X=MathSqrt(X);
   Y=MathSqrt(Y);
   znamenatel=X*Y;
   res=chislitel/znamenatel;
   
   return(res);
}
29.06.2008 18:52 StatBars
lotos4u писал(а):

А, кстати, что за результаты Эксель выдает? Сильные расхождения есть?

И еще, не знаю, как Эксель считает, но я смотрел, чтобы сопоставляемые бары относились к одной дате (времени). Если в Экселе это не учитывать (а там автоматом, кажется, это не учитывается и надо руками чистить данные), то значения, скорее всего, не совпадут.

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

Я не понял что значит сопоставляемые бары относились к одной дате? Вообще мне показалось что здесь дата не нужна... Типа дыры в графике что ли?

29.06.2008 18:41 StatBars
StatBars писал(а):

"Строится она так: весь интервал от -1 до +1 разбивается на 200 участков. Каждому участку соответствует столбик гистограммы. Высота столбика (т.е. длина в данном случае) определяется количеством " - это и есть функция распределения(почти ф-я рапр. вероятности). Разве не так?

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

Ну, да, она и есть. Просто очень лихо звучит - "функция распределения вероятности значений коэффициента корреляции". Хотя, наверно, так правильнее.

А, кстати, что за результаты Эксель выдает? Сильные расхождения есть?

И еще, не знаю, как Эксель считает, но я смотрел, чтобы сопоставляемые бары относились к одной дате (времени). Если в Экселе это не учитывать (а там автоматом, кажется, это не учитывается и надо руками чистить данные), то значения, скорее всего, не совпадут.

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

29.06.2008 18:21 lotos4u

"Строится она так: весь интервал от -1 до +1 разбивается на 200 участков. Каждому участку соответствует столбик гистограммы. Высота столбика (т.е. длина в данном случае) определяется количеством " - это и есть функция распределения(почти ф-я рапр. вероятности). Разве не так?

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

29.06.2008 18:08 StatBars
StatBars писал(а):

Что за гистограмма? можно поподробней, что типа функции распределения?

Да :). Я бы именно так и сказал "что-то типа".

Строится она так: весь интервал от -1 до +1 разбивается 200 участков. Каждому участку соответствует столбик гистограммы. Высота столбика (т.е. длина в данном случае) определяется количеством значений коэффициента корреляции, которые укладываются в участке, соответствующем столбику.

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

29.06.2008 16:55 lotos4u

Что за гистограмма? можно поподробней, что типа функции распределения?

29.06.2008 15:31 StatBars