Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas as pd
- import yfinance as yf
- import numpy as np
- import matplotlib.pyplot as plt
- from scipy.interpolate import interp1d
- from sklearn.linear_model import LinearRegression
- # Функция Вейерштрасса-Мандельброта C(t)
- def C(t, b=0.5, D=1.8):
- j_max = 100
- result = 0
- for j in range(-j_max, j_max + 1):
- result += (1 - np.cos(b ** j * t)) / (b ** (j * (2 - D)))
- return result
- # Создаем временной ряд t с шагом h
- N = 600
- t = np.linspace(0, 1, N)
- # Загружаем данные из CSV файла
- currency_df = pd.read_csv('/Users/danilalipatov/Downloads/Прошлые данные - AFLT.csv', index_col=0, parse_dates=True)
- # Интерполируем курс валюты для получения N точек
- for ind in currency_df['Макс.'].index:
- currency_df.at[ind, 'Макс.'] = float(currency_df['Макс.'][ind].replace(',', '.'))
- f = interp1d(np.linspace(0, 1, len(currency_df)), currency_df['Макс.'])
- interpolated_currency = f(np.linspace(0, 1, N))
- # Нормируем значения курса валюты
- normalized_currency = (interpolated_currency - np.min(interpolated_currency)) / (np.max(interpolated_currency) - np.min(interpolated_currency))
- # Применяем линейную регрессию для выделения линейного тренда курса валюты
- reg = LinearRegression().fit(np.linspace(0, 1, N).reshape(-1, 1), normalized_currency.reshape(-1, 1))
- trend_currency = reg.predict(np.linspace(0, 1, N).reshape(-1, 1)).reshape(-1)
- # Убираем линейный тренд из курса валюты
- detrended_currency = normalized_currency - trend_currency
- b = 3.5
- D = 1.4
- # Вычисляем значения функции C(t)
- C_values = np.array([C(t_i, b, D) for t_i in t])
- # Нормируем значения функции C(t)
- C_values_normalized = (C_values - np.min(C_values)) / (np.max(C_values) - np.min(C_values))
- # Применяем линейную регрессию для выделения линейного тренда функции C(t)
- reg = LinearRegression().fit(t.reshape(-1, 1), C_values.reshape(-1, 1))
- trend_C = reg.predict(t.reshape(-1, 1)).reshape(-1)
- # Убираем линейный тренд из функции C(t)
- detrended_C = C_values - trend_C
- # b D
- # 1.1 1.1
- # 1.1 1.95
- # Строим график курса EUR/USD без тренда и функции C(t) без тренда на одном рисунке
- plt.figure(figsize=(10, 6))
- plt.plot(t, detrended_currency, label='Detrended Aeroflot')
- plt.plot(t, detrended_C, label='Detrended C(t)')
- plt.title('Detrended Aeroflot Exchange Rate and Function C(t)')
- plt.xlabel('Time')
- plt.ylabel('Detrended Normalized Value')
- plt.legend()
- plt.grid(True)
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement