TradingView - платформа для просмотра и анализа биржевых котировок. Преимуществом данной платформы является то, что разработчиками был создан свой собственный язык программирования Pine, который позволяет создавать свои собственные индикаторы и сигналы.

Преобразование Фурье

Больше
01 сен 2022 18:49 #8 от 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. Какой брать Период расчета - это скорее всего вопрос без ответа.
Последнее редактирование: 2 года 6 мес. назад пользователем roman.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
01 сен 2022 18:50 #9 от roman
roman ответил в теме Преобразование Фурье
Пример разложения динамики изменения цены через дискретное преобразование Фурье представлено на сайте tradingview:
[url] www.tradingview.com/script/UTPOoabQ-Low-...y-Fourier-Transform/ [/url]

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
01 сен 2022 18:52 #10 от 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 " www.dspguide.com/ch8/5.htm " and " 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*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*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)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Работает на Kunena форум
Пользовательское соглашение.

По всем возникшим вопросам Вы можете обратиться к администрации сайта по электронной почте (administrator@simenergy.ru) или с помощью формы обратной связи.

Статистика сайта:
Яндекс.Метрика