1 votos

Transformación FFT (Fourier) para principiantes sobre los precios de cierre de Apple

No sé mucho de matemáticas, pero llevo muchos años programando.

Me gustaría utilizar la FFT como parámetro de un modelo ML. La FFT está bajando mucho. He probado muchas acciones y es el mismo.

Por favor, ayuda :-)

import pandas as pd
import io
import requests
import datetime
import matplotlib.pyplot as plt
import numpy as np

############################################################
# API KEY IS FREE FOR AAPL - PLEASE FEEL FREE TO USE PUBLICLY
url = "https://eodhistoricaldata.com/api/eod/AAPL.US?api_token=OeAFFmMliFG5orCUuwAKQ8l4WWFQ67YX&from=2016-01-01"
############################################################

s = requests.get(url).content
df = pd.read_csv(io.StringIO(s.decode('utf-8')),header=0)

df = df[:-1] # drop last row
# df.drop(df.index[:7000])
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')
df.drop('Close', axis=1, inplace=True) # Drop unadjusted close
df.rename(columns={'Adjusted_close': 'Close'},inplace=True)

close_fft = np.fft.fft(np.asarray(df['Close'].tolist()))
fft_df = pd.DataFrame({'fft':close_fft})
fft_df['absolute'] = fft_df['fft'].apply(lambda x: np.abs(x))
fft_df['angle'] = fft_df['fft'].apply(lambda x: np.angle(x))
plt.figure(figsize=(14, 7), dpi=100)
fft_list = np.asarray(fft_df['fft'].tolist())
for num_ in [3,6,25]:
    fft_list_m10= np.copy(fft_list); fft_list_m10[num_:-num_]=0
    plt.plot(np.fft.ifft(fft_list_m10), label='Fourier transform with {} components'.format(num_))
plt.plot( df['Close'])
plt.xlabel('Days')
plt.ylabel('USD')
plt.title('Figure 3: Apple (close) stock prices & Fourier transforms')
# plt.legend()
plt.show()

FFT for AAPL since 01-01-2016

¿Hay algo que pueda hacer para que los FFT no caigan en los últimos 30 compases y estén donde deben estar?

1 votos

Parece ser el fenómeno de Gibb, tal vez usted puede comprobar cómo solucionar eso

0 votos

Podría ser útil modelar los rendimientos en lugar de los precios.

0voto

user61085 Puntos 1

El problema es que la FFT (teoría) asume un número infinito de muestras antes y después del punto de inspección. Como usted está al final de su conjunto de datos de muestra, la FFT trata eso como un valor cero de ahí hacia la derecha. intente duplicar el conjunto de datos (por el bien de la FFT). Además, la salida de la FFT normalmente se ve diferente (Tiempo vs. Frecuencia), así que no estoy seguro de lo que está mostrando aquí.

0 votos

La línea azul comienza en 140 y también termina en 140 porque se supone que la señal es periódica (se repite una y otra vez). 140 es un compromiso entre los valores bajos de la señal de la izquierda y los valores altos de la señal de la derecha. En el centro, la línea azul se aproxima a la señal como se desea. Obviamente, el precio de las acciones de Apple no es periódico. No tiene sentido ajustarlo con senos y cosenos como se hace aquí.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X