торговая стратегия на базе Волновой теории Эллиота - страница 34

 
Вывел систему уравнений для нахождения коэ-тов параболы по методу наименьших квадратов. Кто помнит линейку? Или самому придется лезть в детерминанты...

Здесь алгоритм решения системы линейных уравнений и реализация в форме полиномиальной регрессии.
При m=1 - линия,
при m=2 - будет парабола,
при m=3 - кубик, и т.д.
//--------------------------------
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 LightSkyBlue
//-----------------------------------
extern double hours = 24;
extern int m = 2;
extern int i0 = 0;
//-----------------------
double fx[];
double a[10,10],b[10],x[10],sx[20];
double sum; 
int p;
int nn;
//*******************************************
int init() 
{
   IndicatorShortName("at_PR (Din)");
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,fx);
   p=hours*60/Period(); 
   nn=m+1; 
   return(0);
}
//**********************************************************
int start()
{ 
  int i,n,k;
  sx[1]=p+1;
  SetIndexDrawBegin(0,Bars-p+i0);
  //----------------------sx---------------------
  for(i=1; i<=nn*2-2; i++) 
  {
    sum=0.0; 
    for(n=i0; n<=i0+p; n++) {sum+=MathPow(n,i);} 
    sx[i+1]=sum;
  }  
  //----------------------syx--------------------
  for(i=1; i<=nn; i++) 
  {
    sum=0.0; 
    for(n=i0; n<=i0+p; n++) 
    {
      if (i==1) sum+=Close[n]; 
      else 
      sum+=Close[n]*MathPow(n,i-1);
    } 
    b[i]=sum;
  } 
  //===============Matrix========================
  for(int j=1; j<=nn; j++) 
  {
    for(i=1; i<=nn; i++) 
    {
      k=i+j-1; 
      a[i,j]=sx[k];
    }
  }  
  //===============Gauss=========================
  af_Gauss(nn,a,b,x);
  //=============================================
  for (i=i0; i<=i0+p; i++) 
  {
    sum=0; 
    for(k=1; k<=m; k++) sum+=x[k+1]*MathPow(i,k); 
    fx[i]=x[1]+sum;
  } 
  //-------------------------------------------------------------
  return(0);
}
//*************************************************************** 
void af_Gauss(int n, double& a[][],double& b[], double& x[])
{
  int i,j,k,l;
  double q,m,t;

  for(k=1; k<=n-1; k++) 
  {
    l=0; 
    m=0; 
    for(i=k; i<=n; i++) 
    {
      if (MathAbs(a[i,k])>m) {m=MathAbs(a[i,k]); l=i;}
    } 
    if (l==0) return(0);   

    if (l!=k) 
    {
      for(j=1; j<=n; j++) 
      {
        t=a[k,j]; 
        a[k,j]=a[l,j]; 
        a[l,j]=t;
      } 
      t=b[k]; 
      b[k]=b[l]; 
      b[l]=t;
    }  

    for(i=k+1;i<=n;i++) 
    {
      q=a[i,k]/a[k,k]; 
      for(j=1;j<=n;j++) 
      {
        if (j==k) a[i,j]=0; 
        else 
        a[i,j]=a[i,j]-q*a[k,j];
      } 
      b[i]=b[i]-q*b[k];
    }
  }  
  
  x[n]=b[n]/a[n,n]; 
  
  for(i=n-1;i>=1;i--) 
  {
    t=0; 
    for(j=1;j<=n-i;j++) 
    {
      t=t+a[i,i+j]*x[i+j]; 
      x[i]=(1/a[i,i])*(b[i]-t);
    }
  }
  return;
}
//********************************************************************** 


На базе этого можно строить и СКО, и вероятностные уровни и оптимизировать длину, и экстраполяцию.
Хотя с достоверной экстраполяцией, мне пока не все понятно, может кто-то просветит?
Если вообще на это кто-то обратил внимание? А то может я зря все это привожу?

 
Вывел систему уравнений для нахождения коэ-тов параболы по методу наименьших квадратов. Кто помнит линейку? Или самому придется лезть в детерминанты...

Rosh, зачем так всё сложно? Как Вы собираетесь искать коэффициенты, если Вы заранее не знаете, что именно в этой выборке есть то что Вам нужно? На самом деле можно всё сделать проще! Vladislav ведь ещё в самом начале говорил, что ошибки аппрксимации показывают порядок аппроксимации. И я уже писал про это. Могу ещё раз повторить. Если у нас есть уравнение вида y=ax^2+bx+c, то аппроксимируя выборку каналом линейной регрессии у1=b1X+c1 Вы на самом деле получаете коэффициент b1 равный коэфициенту b начального уравнения. Далее вычитая из первого уравнения уравнение линейной регресиии мы получаем уравнение вида y=ax^2+c2. То есть из этого уравнения мы уже можем сразу сказать, что вершина параболы будет смещена относительно оси x на величину c2. Также нужно принимать во внимание ещё и то обстоятельство что вершина параболы будет лежать строго по середине выборки. Если мы примем вершину параболы в точке (0,c2), то есть центр отсчёта по выборке разметим в вершине параболы, то мы будем иметь дело с уравнением (y-c2)=ax^2. Но мы естественно не знаем в этом уравнении 2х параметров a и c2. Но мы знаем как они зависят друг от друга с2=y-ax^2. Также мы знаем точки пересечения параболы с осью X. Итого имеем три точки по оси х - вершину и пересечения с осью x, по которым нужно найти искомую параболу. И тут я не вижу никакого другого способа решения проблемы как просто методом последовательного приближения найти такой параметр a и следовательно c2, при которых СКО ошибки от аппроксимации уже параболой будет минимальна. И далее по известному с2 мы можем получить и параметр c из самого первого уравнения, благодаря которому мы имеем полное уравнение квадратичной функции. Я думаю, что именно это и занимает у Vladislava большую часть вычислительного времени, поскольку всё остальное может занимать менее значительную часть по длительности расчётов.
 
Юрий, Вы абсолютно зря раздражаетесь. Я действительно не понял Ваш вопрос. Отвечаю как просили: для той постановки задачи, которая решается - правильно там нужна именно такая оценка.

Удачи и попутных трендов.
 
Vladislav, на картинке, представленной Вами, видно, что в индикаторе MMLevls_VG параметр MMPeriod равен 240. Так ли это? Вы говорите, что всё приводите к дневкам. Может чего не понимаю?
 
Вывел систему уравнений для нахождения коэ-тов параболы по методу наименьших квадратов. Кто помнит линейку? Или самому придется лезть в детерминанты...

Rosh, зачем так всё сложно? Как Вы собираетесь искать коэффициенты, если Вы заранее не знаете, что именно в этой выборке есть то что Вам нужно? На самом деле можно всё сделать проще! Vladislav ведь ещё в самом начале говорил, что ошибки аппрксимации показывают порядок аппроксимации. И я уже писал про это. Могу ещё раз повторить. Если у нас есть уравнение вида y=ax^2+bx+c, то аппроксимируя выборку каналом линейной регрессии у1=b1X+c1 Вы на самом деле получаете коэффициент b1 равный коэфициенту b начального уравнения. Далее вычитая из первого уравнения уравнение линейной регресиии мы получаем уравнение вида y=ax^2+c2. То есть из этого уравнения мы уже можем сразу сказать, что вершина параболы будет смещена относительно оси x на величину c2. Также нужно принимать во внимание ещё и то обстоятельство что вершина параболы будет лежать строго по середине выборки. Если мы примем вершину параболы в точке (0,c2), то есть центр отсчёта по выборке разметим в вершине параболы, то мы будем иметь дело с уравнением (y-c2)=ax^2. Но мы естественно не знаем в этом уравнении 2х параметров a и c2. Но мы знаем как они зависят друг от друга с2=y-ax^2. Также мы знаем точки пересечения параболы с осью X. Итого имеем три точки по оси х - вершину и пересечения с осью x, по которым нужно найти искомую параболу. И тут я не вижу никакого другого способа решения проблемы как просто методом последовательного приближения найти такой параметр a и следовательно c2, при которых СКО ошибки от аппроксимации уже параболой будет минимальна. И далее по известному с2 мы можем получить и параметр c из самого первого уравнения, благодаря которому мы имеем полное уравнение квадратичной функции. Я думаю, что именно это и занимает у Vladislava большую часть вычислительного времени, поскольку всё остальное может занимать менее значительную часть по длительности расчётов.


Не понимаю - какие проблемы. Уравнение параболы ищется из тех же соображений, что и канал линейной регрессии - через МНК. Решение этой системы уравнений однозначное, и итераций не требующее, решается в лоб.
Zi=Deti/Det , где Zi - коэфиициенты параболы, Det - детерминант матрицы, Deti - детерминант матрицы, получаемый подстановкой в i столбец столбца свободных членов (Ti). Точно также мы можем применить к полученному криволинейному каналу (описываемому в будущем однозначно) те же самые критерии - СКО всей выборки в канале параболы не больше СКО 2/3 выборки. Насчет Херста к этому каналу - я пока промолчу, так как не имею ответа, но руки вот-вот дойдут этим заняться :)

ЗЫ Нашел справочник по математике 1986 года, и потому я шибко поумнел :)
(Колмогоров или Демидович был бы лучше)
 
Отвечаю как просили: для той постановки задачи, которая решается - правильно там нужна именно такая оценка.


Спасибо, понял. Хотя я с этим не согласен и остаюсь при своем мнении.
 
ЗЫ Нашел справочник по математике 1986 года, и потому я шибко поумнел :)

Это ОЧЕНЬ хорошо, что существует простое решение не требующее итераций. Я просто тоже линал сильно уж подзабыл :o(. Прийдётся тоже посмотреть книжки. Rosh, если Вы уже окончательно с этим разобрались, то думаю, что всем заинтересованным будет также интересно ознакомиться с полным вариантом решения, которое Вы уже набросали выше. А может быть Вы даже сможете оформить это отдельной статьёй на альпари?
 
Стал делать фотографии с книжки и плюнул- качество не ахти получается. Нашел через Яндекс http://www.exponenta.ru/educat/class/courses/la/theme3/theory.asp#4

А тут как бы курс- http://www.exponenta.ru/educat/class/courses/student/la/examples.asp
 
Вывел систему уравнений для нахождения коэ-тов параболы по методу наименьших квадратов. Кто помнит линейку? Или самому придется лезть в детерминанты...

Здесь алгоритм решения системы линейных уравнений и реализация в форме полиномиальной регрессии.
При m=1 - линия,
при m=2 - будет парабола,
при m=3 - кубик, и т.д.


Да, это оно и есть, то что хотел solandr. Правда, возник вопрос - написать по моим формулам так быстро такой немного хитрый код - это нужно быть спецом. Правда, я рассмотрел код, и алгоритм там свой , по-крайней мере, индексация матричных членов идет зеркально моей системе уравнений. Теперь я вижу, что ANG3110 собаку съел на таких вещах (ветку на пауке помню) :)
 
Теперь я вижу, что ANG3110 собаку съел на таких вещах (ветку на пауке помню) :)

Действительно, полностью поддерживаю!!!
Очень красивый и НУЖНЫЙ индикатор!
ANG3110, Вы могли бы дать пояснения по коду? С наскоку его сложно разобрать. Может быть у Вас имеется своя ветка на форуме, где про этот индикатор всё подробно расписано? Заранее благодарю за информацию.