Преобразование Фурье
- roman
-
Автор темы
- Не в сети
- Модератор
-
Меньше
Больше
- Сообщений: 187
- Репутация: 1
- Спасибо получено: 0
2 года 3 мес. назад - 2 года 3 мес. назад #194
от roman
roman создал тему: Преобразование Фурье
Информация о преобразовании Фурье -
см. здесь
.
Решил попробовать разложить сигнал на гармонические составляющие с помощью встроенного языка Pine в TradingView:
Re_hl=0.0
Im_hl=0.0
Price=hl2-ema(hl2,120)
j=1 //номер гармоники
ff_T=120 //Период расчета
for i = 0 to (ff_T-1)
Re_hl := Re_hl+Price*cos(2*3.14159*i*j/ff_T)
Im_hl := Im_hl-Price*sin(2*3.14159*i*j/ff_T)
Am_hl=2*sqrt(Re_hl*Re_hl+Im_hl*Im_hl)/ff_T
Ph_hl=atan(Im_hl/Re_hl)
В результате возникли проблемы:
1. Функция atan определяет величину в радианах в диапазоне -Pi/2 до Pi/2. Т.е. получается разрыв угла, что вызывает проблемы в расчете sin, т.к. также возникают разрывы.
2. Какой брать Период расчета - это скорее всего вопрос без ответа.
Решил попробовать разложить сигнал на гармонические составляющие с помощью встроенного языка Pine в TradingView:
Re_hl=0.0
Im_hl=0.0
Price=hl2-ema(hl2,120)
j=1 //номер гармоники
ff_T=120 //Период расчета
for i = 0 to (ff_T-1)
Re_hl := Re_hl+Price*cos(2*3.14159*i*j/ff_T)
Im_hl := Im_hl-Price*sin(2*3.14159*i*j/ff_T)
Am_hl=2*sqrt(Re_hl*Re_hl+Im_hl*Im_hl)/ff_T
Ph_hl=atan(Im_hl/Re_hl)
В результате возникли проблемы:
1. Функция atan определяет величину в радианах в диапазоне -Pi/2 до Pi/2. Т.е. получается разрыв угла, что вызывает проблемы в расчете sin, т.к. также возникают разрывы.
2. Какой брать Период расчета - это скорее всего вопрос без ответа.
Последнее редактирование: 2 года 3 мес. назад пользователем roman.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- roman
-
Автор темы
- Не в сети
- Модератор
-
Меньше
Больше
- Сообщений: 187
- Репутация: 1
- Спасибо получено: 0
1 год 8 мес. назад #218
от roman
roman ответил в теме Преобразование Фурье
Пример разложения динамики изменения цены через дискретное преобразование Фурье представлено на сайте tradingview:
https://www.tradingview.com/script/UTPOoabQ-Low-Frequency-Fourier-Transform/
https://www.tradingview.com/script/UTPOoabQ-Low-Frequency-Fourier-Transform/
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
- roman
-
Автор темы
- Не в сети
- Модератор
-
Меньше
Больше
- Сообщений: 187
- Репутация: 1
- Спасибо получено: 0
1 год 1 мес. назад #229
от roman
roman ответил в теме Преобразование Фурье
//@version=4
study("Low Frequency Fourier Transform", overlay = false, shorttitle="LFFT")
//This Study uses the Real Discrete Fourier Transform algorithm to generate 3 sinusoids possibly indicative of future price.
//I got information about this RDFT algorithm from "http://www.dspguide.com/ch8/5.htm" and "http://www.dspguide.com/ch8/6.htm".
//Declaration of const
pi = acos(-1)
//Declaration of user-defined variables
N = input(defval=64, title="Sample Time Window", type=input.integer, minval=2, maxval=600, confirm=false, step=1, options=[2,4,8,16,32,64,128,256,512,1024,2048,4096])
//Real part of the Frequency Domain Representation
ReX(k) =>
sum = 0.0
for i=0 to N-1
sum := sum + close[i]*cos(2*pi*k*i/N)
return = sum
//Imaginary part of the Frequency Domain Representation
ImX(k) =>
sum = 0.0
for i=0 to N-1
sum := sum + close[i]*sin(2*pi*k*i/N)
return = -sum
//Get sinusoidal amplitude from frequency domain
ReX_(k) =>
case = 0.0
if(k!=0 and k!=N/2)
case := 2*ReX(k)/N
if(k==0)
case := ReX(k)/N
if(k==N/2)
case := ReX(k)/N
return = case
//Get sinusoidal amplitude from frequency domain
ImX_(k) =>
return = -2*ImX(k)/N
//Get full Fourier Transform
x(i, N) =>
sum1 = 0.0
sum2 = 0.0
for k=0 to N/2
sum1 := sum1 + ReX_(k)*cos(2*pi*k*i/N)
for k=0 to N/2
sum2 := sum2 + ImX_(k)*sin(2*pi*k*i/N)
return = sum1+sum2
//Get single constituent sinusoid
sx(i, k) =>
sum1 = ReX_(k)*cos(2*pi*k*i/N)
sum2 = ImX_(k)*sin(2*pi*k*i/N)
return = sum1+sum2
//Plot 3 Low-Freq Sinusoids
plot(sx(0,1), color=#00ff00)
plot(sx(0,2), color=#0000ff)
plot(sx(0,3), color=#ff0000)
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Время создания страницы: 0.123 секунд