Теория случайных потоков и FOREX - страница 38

 

Прикрепляю исходный код заголовочного файла lapack.mqh. Там описаны основные функции для вычисления обратной матрицы.

Правда все комментарии на английском (взяты из исходных кодов библиотеки LAPACK), думаю разберётесь.

Работу функций проверял неоднократно. Результаты сравнивал с результатами, полученными в Матлабе. Пока нареканий нет. 

Привожу код скрипта, где показан пример работы с функциями lapack.mqh.

// Скрипт для демонстрации работы с функциями обращения квадратной матрицы.
//
#include <lapack.mqh>
//
#define n 4 //размерность матрицы
//+------------------------------------------------------------------+
//| Основная функция скрипта                                              |
//+------------------------------------------------------------------+
int start()
{
    double a[n][n];
    int info, ipiv[n];
    string sM;
//
// Заполняем матрицу
    a[0,0] = Close[0]; a[0,1] = Close[1]; a[0,2] = Close[2]; a[0,3] = Close[3];
    a[1,0] = Close[4]; a[1,1] = Close[5]; a[1,2] = Close[6]; a[1,3] = Close[7];
    a[2,0] = Close[8]; a[2,1] = Close[9]; a[2,2] = Close[0]; a[2,3] = Close[1];
    a[3,0] = Close[2]; a[3,1] = Close[3]; a[3,2] = Close[4]; a[3,3] = Close[5];
//
// Сохраняем матрицу для отображения
    sM = MatrixPrint(a,n,n);
//
// Вычисляем LU-разложение матрицы
    dgetf(n,n,a,ipiv,info);
    if(info<0) return(0);
    else if(info>0) { Print("U(",info-1,",",info-1,") is exactly zero. Inverse can not be computed"); return(0);}
//
// Вычисляем обратную матрицу, заданным LU-разложением
    dgetri(n,a,ipiv,info);
//
// Сохраняем обратную матрицу для отображения
    sM = sM+MatrixPrint(a,n,n);
//
// Выполним обратную операцию для проверки результатов вычислений
//
    ArrayInitialize(ipiv,0);
//
// Вычисляем LU-разложение обратной матрицы
    dgetf(n,n,a,ipiv,info);
    if(info<0) return(0);
    else if(info>0) { Print("U(",info-1,",",info-1,") is exactly zero. Inverse can not be computed"); return(0);}
//
// Вычисляем обратную матрицу, заданным LU-разложением
    dgetri(n,a,ipiv,info);
//
// Сохраняем матрицу для отображения
    sM = sM+MatrixPrint(a,n,n);
//
// Выводим на экран результат работы
    Comment(sM);
//
   return(0);
}
//+------------------------------------------------------------------+
//| Функция преобразования матрицы в строку для вывода на экран                    |
//+------------------------------------------------------------------+
string MatrixPrint(double array[][], int r, int c)
{
   int i, j;
   string sComment = "";
//----
   for(j=0; j<r; j++)
   {
      sComment = sComment+"\n";
      for(i=0; i<c; i++) sComment = sComment+DoubleToStr(array[j,i],4)+ " ";
   }
   sComment = sComment+"\n";
//----
   return(sComment);
}
Файлы:
lapack.mqh  10 kb
 

to Mathemat

Статью (по применению Калмана) видно не получиться написать. Если что то писать, то нужно делать это хорошо, а на это нужно время.

Нашел ссылку там, на простом примере показано как все работает.

http://www.navgeocom.ru/gps/kalman/

Пример самый простой, оценка постоянной величины. Но сама теория позволяет оперировать с матрицами. А в матрицу как я говорил (и приводил пример выше по ветке) можно вложить следующие данные по котировкам – цена, скорость, ускорение, время автокорреляции и т.д. Можно это делать не с одной парой, а сразу все валюты, добавить туда взаимную корреляцию и получать текущую оценку с учетом всех взаимосвязей и что самое важное прогнозировать … (по аналогии с навигационной аппаратурой, куча датчиков, спутников (читать валют), куча измерений (котировок), есть взаимная корреляция и ошибки (шумы) и все это движется со своей скоростью и ускорением), и нам нужно точно знать где мы сейчас находимся (пусть будет USD) и куда он движется там координаты XYZ( + связанные, несвязанные, сферические, полярные …) у нас вместо этого EUR/USD, GBP/USD и т.д.

У меня кое-что вроде получилось, но потратил на это более 3-х месяцев, и до сих пор не могу отловить все неточности работы, и это только анализ одной валюты. Матрица 2*2. А если взять, 12 валютных пар, на каждую 3 уравнения, то надо будет вращать матрицы 36*36, а это уже ….

Вот пример работы, как отработался гэп в понедельник.

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

 

Да, гэп он хорошо отработал. А насчет "хочется поучаствовать с ним в чемпионате ((" - это сильно сказано. Как ты думаешь, пройдет ли советник на этом фильтре 5-минутный барьер при тестировании с начала 2008 по август?

P.S. Вот попробовал поискать в Правилах об этих 5 минутах. Нет ничего. Хотя вполне можно было бы четко прописать: "не более 5 минут на компьютере MQ с конфигурацией такой-то". Но я помню, что об этом говорилось в отдельных ветках форума.

 
Mathemat писал (а) >>

Да, гэп он хорошо отработал. А насчет "хочется поучаствовать с ним в чемпионате ((" - это сильно сказано. Как ты думаешь, пройдет ли советник на этом фильтре 5-минутный барьер при тестировании с начала 2008 по август?

P.S. Вот попробовал поискать в Правилах об этих 5 минутах. Нет ничего. Хотя вполне можно было бы четко прописать: "не более 5 минут на компьютере MQ с конфигурацией такой-то". Но я помню, что об этом говорилось в отдельных ветках форума.

Индикатор шустро работает. Не хуже обычной машки

 

to Mathemat

вот нашол теорему, проверка адекватности.

"Теорема : Процесс тогда и только тогда адекватен модели,
когда невязка является белым шумом.
Замечание: Это может случиться только тогда, когда
Проблема качества определяется проблемой экстраполяции."

 
Нашол подборку по ЦОС. Там есть и Тихонов В.И. на которого я часто ссылаюсь. Может кому и пригодиться http://dsp-book.narod.ru/books.html
 
Конечно пригодится. Осталось только найти время, чтобы все это осилить :)
 
Prival >>:

to Mathemat

Статью (по применению Калмана) видно не получиться написать. Если что то писать, то нужно делать это хорошо, а на это нужно время.

Нашел ссылку там, на простом примере показано как все работает.

http://www.navgeocom.ru/gps/kalman/

Пример самый простой, оценка постоянной величины. Но сама теория позволяет оперировать с матрицами. А в матрицу как я говорил (и приводил пример выше по ветке) можно вложить следующие данные по котировкам – цена, скорость, ускорение, время автокорреляции и т.д. Можно это делать не с одной парой, а сразу все валюты, добавить туда взаимную корреляцию и получать текущую оценку с учетом всех взаимосвязей и что самое важное прогнозировать … (по аналогии с навигационной аппаратурой, куча датчиков, спутников (читать валют), куча измерений (котировок), есть взаимная корреляция и ошибки (шумы) и все это движется со своей скоростью и ускорением), и нам нужно точно знать где мы сейчас находимся (пусть будет USD) и куда он движется там координаты XYZ( + связанные, несвязанные, сферические, полярные …) у нас вместо этого EUR/USD, GBP/USD и т.д.

У меня кое-что вроде получилось, но потратил на это более 3-х месяцев, и до сих пор не могу отловить все неточности работы, и это только анализ одной валюты. Матрица 2*2. А если взять, 12 валютных пар, на каждую 3 уравнения, то надо будет вращать матрицы 36*36, а это уже ….

Вот пример работы, как отработался гэп в понедельник.

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

T3_mod. У меня перед гэпом котировок нехватает.В некоторых местах Калман получше себя ведёт,а так очень похожи.Я думаю всё-таки можно создать машку со стат.преимуществом в точках перегиба,просто нужно как-то по другому представить данные котировок.
 
FOXXXi >>:

... просто нужно как-то по другому представить данные котировок.

Кто-нибудь пробовал построить шкалу с интервалами по времени прихода тика?Интересно было-бы посмотреть на неё.

 

Нет ничего проще, если воспользоваться MS XL.

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