торговая стратегия на базе Волновой теории Эллиота - страница 34
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здесь алгоритм решения системы линейных уравнений и реализация в форме полиномиальной регрессии.
При 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 большую часть вычислительного времени, поскольку всё остальное может занимать менее значительную часть по длительности расчётов.
Удачи и попутных трендов.
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 года, и потому я шибко поумнел :)
(Колмогоров или Демидович был бы лучше)
Спасибо, понял. Хотя я с этим не согласен и остаюсь при своем мнении.
Это ОЧЕНЬ хорошо, что существует простое решение не требующее итераций. Я просто тоже линал сильно уж подзабыл :o(. Прийдётся тоже посмотреть книжки. Rosh, если Вы уже окончательно с этим разобрались, то думаю, что всем заинтересованным будет также интересно ознакомиться с полным вариантом решения, которое Вы уже набросали выше. А может быть Вы даже сможете оформить это отдельной статьёй на альпари?
А тут как бы курс- http://www.exponenta.ru/educat/class/courses/student/la/examples.asp
Здесь алгоритм решения системы линейных уравнений и реализация в форме полиномиальной регрессии.
При m=1 - линия,
при m=2 - будет парабола,
при m=3 - кубик, и т.д.
Да, это оно и есть, то что хотел solandr. Правда, возник вопрос - написать по моим формулам так быстро такой немного хитрый код - это нужно быть спецом. Правда, я рассмотрел код, и алгоритм там свой , по-крайней мере, индексация матричных членов идет зеркально моей системе уравнений. Теперь я вижу, что ANG3110 собаку съел на таких вещах (ветку на пауке помню) :)
Действительно, полностью поддерживаю!!!
Очень красивый и НУЖНЫЙ индикатор!
ANG3110, Вы могли бы дать пояснения по коду? С наскоку его сложно разобрать. Может быть у Вас имеется своя ветка на форуме, где про этот индикатор всё подробно расписано? Заранее благодарю за информацию.