Попытался воспользоваться «Библиотекой функций быстрого преобразования Фурье FFT» ('Библиотека функций быстрого преобразования фурье FFT'), что-то не получилось с ходу разобраться в применении этих функций, описания у них почему-то у всех одинаковые. Помогите, пожалуйста! Как, например, имея значения Close 8-ми последних баров получить их спектр, потом оставить первые 4 частоты (типа НЧ-фильтр) и получить обратно сигнал?
- Создание готового советника - Мастер MQL4/MQL5
- Реальные и сгенерированные тики - Алгоритмический трейдинг, торговые роботы
- Использование технических индикаторов - Графики котировок, технический и фундаментальный анализ
Сомневаюсь, что из 8-и баров вообще можно получить 4 частоты, а не то, чтобы только оставить.
Преобразование (БПФ) 8 дискретных значений сигнала даст 8 частот, оставляем 4 нижних частоты, получаем НЧ-фильтр текущих колебаний курса.
Мне прислали апроксимацию по Фурье, если интересуетесь, может пригодится?
#property library //-------------------------------------------------------------------------------- double b = 0.7; double c1,c2,c3,c4,b2,b3; double e1,e2,e3,e4,e5,e6,n,w1,w2,t3f; int ft3; b2=b*b; b3=b2*b; c1=-b3; c2=(3*(b2+b3)); c3=-3*(2*b2+b+b3); c4=(1+3*b+b3+3*b2); //============================================== double af_T3( int i,int pt3, double ct3) { //--------------------------- if (ft3==0) {n=pt3; if (n<1) n=1; n=1+0.5*(n-1); w1=2/(n+1); w2=1-w1; ft3=1;} //------------------------ e1=w1*ct3+w2*e1; e2=w1*e1+w2*e2; e3=w1*e2+w2*e3; e4=w1*e3+w2*e4; e5=w1*e4+w2*e5; e6=w1*e5+w2*e6; t3f=c1*e6+c2*e5+c3*e4+c4*e3; return(t3f); }
#property copyright "ANG3110@latchess.com" //---------------------------------------- #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Blue //------------------------------- #import "af_T3.ex4" int af_T3( int i,int pt3, double ct3); //------------------------------- extern int hrf = 2; extern int hrT3 = 6; extern int days = 1; //----------------------------------------- double ak[],bk[],fx[],w,ak0,ss,sc,sk,dfx[]; double pi=3.1415926535897932384626433832795; int T,sm,k; double t3[],ct3,dc[]; int pt3; //========================================== int init() { IndicatorBuffers(5); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,fx); SetIndexBuffer(1,t3); SetIndexBuffer(2,ak); SetIndexBuffer(3,bk); SetIndexBuffer(4,dc); //-------------------------- pt3=hrT3*60/Period(); T=days*1440/Period(); w=2*pi/T; k=T/(hrf*60/Period()); return(0); } //*************************************************** int start() { //----------------- int n,i,cbi; //------------------ cbi=Bars-IndicatorCounted()-2; for(i=cbi; i>=0; i--) { //--------------------- ct3=Close[i]; t3[i]=af_T3(i,pt3,ct3); dc[i]=Close[i]-t3[i]; } //-------------------------- ak0=0.0; for (n=0; n<=k; n++) { sc=0.0; ss=0.0; for (i=0; i<=T-1; i++) { if (n==0) ak0+=dc[i]; if (n!=0) {sc=sc+dc[i]*MathCos(n*i*w); ss=ss+dc[i]*MathSin(n*i*w);} } ak[n]=sc*2/T; bk[n]=ss*2/T; } ak0=ak0/T; //-------------------------- for (i=0; i<=T-1; i++) { sk=0.0; for (n=1; n<=k; n++) { sk=sk+ak[n]*MathCos(n*i*w)+bk[n]*MathSin(n*i*w);} fx[i]=ak0+sk+t3[i]; } //--------------------------- return(0); } //****************************************************
Заодно может и расскажите - почему если вместо библиотеки первый код вставить непосредственно в индюк - показывает погоду в Африке.
Такое ощущение, как будто только я один с радиофака. 1 бар – это одна частота, постоянная величина, f(x)=k0. 2 бара – 2 частоты, f(x)=k0+k1*Sin(a1*x+b1). И т.д.
Bookkeeper, погода в Африке образуется из-за переменной ft3, она не определена, вот и получаются разные значения.
Вот пример (индикатор), на котором я изучал фурье...
Там посмотрите в коде - не сложно.
По умолчанию выводиться спектр периодической функции...
Можно засылать любой индикатор. Что потом делать со спектром, - Ваша фантазия.
Я сейчас хочу из полученных спектрограм собрать паттерны и "запихнуть" все это в нейросеть для распознавания.
Перезалил файл
Файлы:
lsv:
Такое ощущение, как будто только я один с радиофака. 1 бар – это одна частота, постоянная величина, f(x)=k0. 2 бара – 2 частоты, f(x)=k0+k1*Sin(a1*x+b1). И т.д.
Насколько помню, из 8 баров в БПФ получается 8 частот,Такое ощущение, как будто только я один с радиофака. 1 бар – это одна частота, постоянная величина, f(x)=k0. 2 бара – 2 частоты, f(x)=k0+k1*Sin(a1*x+b1). И т.д.
но половина из них симметрична второй половине (сдвинуты на Пи кажется)
Так что реально остается 4.
По другому и быть не может.
Одна частота (синусоида) содержит 3 параметра - G(t) = A*Sin(w*t+p)
Частоты (w) у нас фиксированы, остается 2 параметра - амплитуда (А) и фаза (р).
При любом преобразовании из К независимых величин (значения баров)
можно получить не более К независимых параметров.
Т.е. из 8 баров можно получить не более 4 частот (по 2 парамтра на каждую)
klot, у тебя файл почему-то не доступен. Я вначале хотел использовать Фурье для извлечения тренда, т.е. как ФЧ-фильтр, но вспомнил, что по Фурье предполагается, что анализируемый участок повторяется. Т.е. если есть бары с ценами 10,11, 13, 12, то по Фурье предполагается, что за ними будут идти бары 10,11, 13, 12, 10,11, 13, 12. А это портит всю идею.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь