Что-то не то показывает.
Где ошибка?
Что бы на лету просчиывался спектр.
И можно будет, например фильтры цифровые (Fatl-ы, Satl-ы и тд. ..) подстраивать автоматически..., ну еще ряд идей есть.
Если у кого-нибудь есть наработки подскажите, пожалуйста.
А вообще, конечной целью является написание анализатора спектра котировок на заданном интервале.
Что бы на лету просчиывался спектр.
И можно будет, например фильтры цифровые (Fatl-ы, Satl-ы и тд. ..) подстраивать автоматически..., ну еще ряд идей есть.
Если у кого-нибудь есть наработки подскажите, пожалуйста.
Писал разложение цены в ряд фурье. Ничего хорошего не получилось. Найти бы алгоритм MESA. Может кто знает где он есть?
Файл нужно положить в
c:\Program Files\MetaTrader 4\experts\libraries\ и скомпилировать.
там семь функций:
//+------------------------------------------------------------------+
//| My function |
//+------------------------------------------------------------------+
//| #import "#_lib_FFT.ex4" |
//| void fastfouriertransform(double& a[], int nn, bool inversefft); |
//| void realfastfouriertransform(double& a[], int tnn, |
//| bool inversefft); |
//| void fastcorellation(double& signal[], int signallen, |
//| double& pattern[], int patternlen); |
//| void fastconvolution(double& signal[], int signallen, |
//| double& response[], int negativelen, int positivelen); |
//| void fastsinetransform(double& a[], int tnn, bool inversefst); |
//| void fastcosinetransform(double& a[],int tnn, bool inversefct); |
//| void tworealffts(double a1[], double a2[], double& a[], |
//| double& b[], int tn); |
//| #import |
//+------------------------------------------------------------------+
Подробное описание каждой функции есть в исходнике #_lib_FFT.mq4
а также на сайте http://alglib.sources.ru/fft/
А вообще, конечной целью является написание анализатора спектра котировок на заданном интервале.
Что бы на лету просчиывался спектр.
И можно будет, например фильтры цифровые (Fatl-ы, Satl-ы и тд. ..) подстраивать автоматически..., ну еще ряд идей есть.
Если у кого-нибудь есть наработки подскажите, пожалуйста.
Писал разложение цены в ряд фурье. Ничего хорошего не получилось. Найти бы алгоритм MESA. Может кто знает где он есть?
Да, MESA не помешало бы, но и Фурье тоже не плох!!! если его правильно приготовить :)
У меня все получилось.
Здравствуйте, не подскажите, как можно увеличить скорость работы индикатора и убрать перерисовку
//+------------------------------------------------------------------+ //| FullSSA.mq4 | //| Copyright © 2007, klot | //| klot@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, klot" #property link "klot@mail.ru" #import "SSA.ex4" //"FullSSA.dll" void fastsingular(double a[],int n,int lag,int s,double& b[]); #import #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Yellow #property indicator_level1 0.0 //---- extern int Lag=10; extern int NumComps=2; extern int PeriodNorm=10; extern int N=300; double arryTimeSeries[]; //---- buffers double SSA[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,SSA); ArrayResize(arryTimeSeries,N); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- SetIndexDrawBegin(0,Bars-N); double dev,ma; int i, nmax, nmin; //--- for( i=N-1; i>=0; i--) { //----- ma=iMA(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i); dev=3*iStdDev(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i); if(dev==0) dev=0.1; arryTimeSeries[i]=(Close[i]-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i); } fastsingular(arryTimeSeries,N,Lag,NumComps,SSA); nmax=ArrayMaximum(SSA,3,1); nmin=ArrayMinimum(SSA,3,1); if(nmax==2) { ObjectCreate("Sell"+Time[0],OBJ_ARROW,0,Time[0],Open[0]); ObjectSet("Sell"+Time[0],OBJPROP_ARROWCODE,226); } if(nmin==2) { ObjectCreate("Buy"+Time[0],OBJ_ARROW,0,Time[0],Open[0]); ObjectSet("Buy"+Time[0],OBJPROP_ARROWCODE,225); } //---- return(0); } //+------------------------------------------------------------------+
на сколько я понял, низкая скорость расчёта в вызываемой функции.
void fastsingular( double X[],int n,int l,int s,double &Y[]) { if( l>MaxCatLag ) l=MaxCatLag; if( s>MaxCompCol ) s=MaxCompCol; if( s>l ) s=l; if( n>MaxLen ) n=MaxLen; double A[200][200]; //Matrix *A = new Matrix(MaxCatLag,MaxCatLag); double B[5000][200]; //ArrayResize(B,n); //Matrix *B = new Matrix(n,MaxCatLag); double Bn[200][5000]; //Matrix *Bn = new Matrix(MaxCatLag,n); int kb,lb,m,k,i,j,i1; double V[200][5000]; //Matrix *V = new Matrix(MaxCompCol,n); double Yn[200][5000]; //Matrix *Yn = new Matrix(MaxCompCol,n); double ls[200]; //--- double Vtemp[200]; //--- j=0; k=n-l+1; /*Формируем матрицу А в методе который я скачал на сайте создателей эта матрица S*/ for (i=0;i<=l-1;i++) { for (j=0;j<=l-1;j++) { A[i][j]=0; //A->m[i][j]=0; for (m=0;m<=k-1;m++) // (m=0;m<=k-1;m++) { A[i][j]=A[i][j]+X[i+m]*X[m+j]; //A->m[i][j]=A->m[i][j]+1.0*X[i+m]*X[m+j]; B[m][j]=X[m+j]; //B->m[m][j]=X[m+j]; } } } /*Находим собственные числа и векторы матрицы А*/ for (i=0;i<=s-1;i++) { ls[i]=gaussbisectionl(A,l-i,l); svector(A,ls[i],l,Vtemp); //svector(A,ls[i],l,V->m[i]); for( j=0;j<=l-1; j++) V[i][j]=Vtemp[j]; } //------ /*Формируется восстановленная матрица*/ for (i1=0;i1<=s-1;i1++) { //------ for (i=0;i<=k-1;i++) { Yn[i1][i]=0; //Yn->m[i1][i]=0; for (j=0;j<=l-1;j++) Yn[i1][i]=Yn[i1][i]+B[i][j]*V[i1][j]; //Yn->m[i1][i]=Yn->m[i1][i]+1.0*B->m[i][j]*V->m[i1][j]; } //------ for (i=0;i<=l-1;i++){ for (j=0;j<=k-1;j++) Bn[i][j]=V[i1][i]*Yn[i1][j]; //Bn->m[i][j]=1.0*V->m[i1][i]*Yn->m[i1][j]; } //------- //Диагональное усреднение (восстановление ряда) kb=k; lb=l; for (i=0;i<=n-1;i++) { Yn[i1][i]=0; //Yn->m[i1][i]=0; if (i<lb-1) { for (j=0;j<=i;j++) { if (l<=k) Yn[i1][i] = Yn[i1][i]+Bn[j][i-j]; //Yn->m[i1][i] = Yn->m[i1][i]+Bn->m[j][i-j]; if (l>k) Yn[i1][i] = Yn[i1][i]+Bn[i-j][j]; //Yn->m[i1][i] = Yn->m[i1][i]+Bn->m[i-j][j]; } Yn[i1][i] = Yn[i1][i]/(1.0*(i+1)); //Yn->m[i1][i]=1.0*Yn->m[i1][i]/(i+1); } if ((lb-1<=i)&&(i<kb-1)) { for (j=0;j<=lb-1;j++) { if (l<=k) Yn[i1][i]=Yn[i1][i]+Bn[j][i-j]; //Yn->m[i1][i]=Yn->m[i1][i]+Bn->m[j][i-j]; if (l>k) Yn[i1][i]=Yn[i1][i]+Bn[i-j][j]; //Yn->m[i1][i]=Yn->m[i1][i]+Bn->m[i-j][j]; } Yn[i1][i] = Yn[i1][i]/(1.0*lb); //Yn->m[i1][i] = 1.0*Yn->m[i1][i]/lb; } if (kb-1<=i) { for (j=i-kb+1;j<=n-kb;j++) { if (l<=k) Yn[i1][i]=Yn[i1][i]+Bn[j][i-j]; //Yn->m[i1][i]=Yn->m[i1][i]+Bn->m[j][i-j]; if (l>k) Yn[i1][i]=Yn[i1][i]+Bn[i-j][j]; //Yn->m[i1][i]=Yn->m[i1][i]+Bn->m[i-j][j]; } Yn[i1][i] = Yn[i1][i]/(1.0*(n-i));//(?! что такое N)//Yn->m[i1][i]=1.0*Yn->m[i1][i]/(n-i); //Yn[i1][i]=1.0*Yn[i1][i]/kb;/*(?! что такое N)*/ } } } /* Вот здесь если не суммировать, то будут отдельные компоненты разложения процесса по собственным функциям */ for (i=0;i<=n-1;i++) { Y[i]=0; //Y[i]=Yn[3][i]; for (i1=0;i1<=s-1;i1++) Y[i]=Y[i]+Yn[i1][i]; //Y[i]=Y[i]+Yn->m[i1][i]; } //delete A; //delete B; //delete Bn; //delete V; //delete Yn; //delete[] X; } //-----------------------------------------------------------------------------+ /*{Х-вектор исходного ряда n-его длина l-длина лага s-число собственных компонент (там исходный ряд разбивается на компонеты, а потом восстанавливается, тут ты и задаешь сколько компонент тебе надо) Y - восстановленный ряд (сглаженный гусеницей) там я в конце еще добавил комментарий, где находятся отдельные компоненты ряда */ //---------------------------------------------------------------------------
подскажите хотя бы можно это вообще сделать.
переворотная стратегия от уровней +/-, очень низкая скорость тестирования.
Кто знает куда подевался klot ? В одно время он был очень активен и его разработки известны многим. А примерно 3 года назад пропал. Может он изменил ник?
Кто знает куда подевался klot ? В одно время он был очень активен и его разработки известны многим. А примерно 3 года назад пропал. Может он изменил ник?
Месяц назад был тут по причине нового бида и не работоспособности его индюков.
он просто свалил отсюда. ищите на других форумах.
Месяц назад был тут по причине нового бида и не работоспособности его индюков.
Если не сложно напишите на каких форумах он сейчас активен и под каким ником. Можно в личку если открыто нельзя.
мне тоже.
кстати, а какие у него разработки? я читал про его нейросеть построенной на сети Кохонена и оформленной на MQL4...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Хочу наладить библиотечку корреляции двух функций с помощью быстрого преобазования Фурье, но что-то запутался....
Посмотрите, пожауйста правильно ли я перевел исходник с С++ на MQL4 ?
первоисточник тут
http://alglib.sources.ru/fft/fastcorellation.php