SPX прогноз с RMSE
생성일: 2024년 11월 21일
답변에 사용된 모델 OpenAI 01 Preview by OpenAI01
생성일: 2024년 11월 21일
답변에 사용된 모델 OpenAI 01 Preview by OpenAI01
Предлагаю создать стратегию предсказания спотовой цены.
Понимание стратегии
Я сейчас разбираюсь в причине несообразности данных с временными временными интервалами, подтверждая, что данные до 9 утра завтра должны быть доступны.
Использование данных и методов прогнозирования для создания модели для предсказания максимума и минимума SPX в 15:00 (3 часа) на завтра.
Предполагам, что данные включают исторические данные до вчерашнего дня и данные до 9 утра завтра. Это значит, что в коде нужно считывать данные до 9 утра завтра и затем предсказать максимальные и минимальные значения на 15:00 завтра.
Реализация прогнозов
Я работаю над прогнозом максимальных и минимальных значений индекса SPX к 15:00 завтрашнего дня, используя данные с 10:00 сегодняшнего утра до 9:00 утра завтрашнего дня.
Предсказывая значения
Предполагаю, что пользователь хочет предсказать максимальные и минимальные значения SPX до 15:00 завтра, используя данные с 10:00 сегодняшнего дня и до 9:00 утра завтрашнего дня.
Создание модели
Предлагаю использовать исторические данные SPX, технические индикаторы и экономические данные для прогнозирования высоких и низких значений до 15:00.
Предлагаю
Использовать исторические данные для обучения регрессионных моделей, предсказывающих максимум и минимум дня, опираясь на данные до 9 утра следующего дня.
Чтобы предсказать максимальные и минимальные значения индекса S&P 500 (SPX) до 15:00 завтрашнего дня с минимальной RMSE, мы можем использовать исторические данные и методы машинного обучения. Ниже представлен план действий и реализация стратегии на Python.
Стратегия:
Сбор данных:
Предобработка данных:
Моделирование:
Оценка модели:
Прогноз:
Реализация на Python:
import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error from sklearn.ensemble import GradientBoostingRegressor import yfinance as yf import datetime # 1. Сбор данных # Загрузим исторические данные SPX end_date = datetime.datetime.now() start_date = end_date - datetime.timedelta(days=365*5) # данные за 5 лет spx_data = yf.download('^GSPC', start=start_date, end=end_date, interval='1d') # Предположим, что данные на 9 утра завтрашнего дня уже получены и сохранены в CSV # Загрузим эти данные pre_market_data = pd.read_csv('pre_market_data.csv') # 2. Предобработка данных # Функция для создания технических индикаторов def create_features(data): data = data.copy() data['MA_5'] = data['Close'].rolling(window=5).mean() data['MA_10'] = data['Close'].rolling(window=10).mean() data['MA_20'] = data['Close'].rolling(window=20).mean() data['STD_5'] = data['Close'].rolling(window=5).std() data['STD_10'] = data['Close'].rolling(window=10).std() data['Return'] = data['Close'].pct_change() data['Volume_Change'] = data['Volume'].pct_change() data = data.dropna() return data spx_data = create_features(spx_data) # Объединение с предрыночными данными # Предположим, что pre_market_data имеет такие же фичи full_data = pd.concat([spx_data, pre_market_data], ignore_index=True) # 3. Моделирование # Целевые переменные: High и Low до 15:00 # Для упрощения предположим, что у нас есть данные High_15 и Low_15 # В реальности нужно собрать данные о максимальных и минимальных значениях до 15:00 # Разделение данных на фичи и целевые переменные features = full_data.drop(['High', 'Low', 'Open', 'Close', 'Adj Close', 'Volume'], axis=1) target_high = full_data['High'] target_low = full_data['Low'] # Разделение на обучающую и тестовую выборки X_train, X_test, y_train_high, y_test_high, y_train_low, y_test_low = train_test_split( features, target_high, target_low, test_size=0.2, shuffle=False) # Обучение модели для High model_high = GradientBoostingRegressor() model_high.fit(X_train, y_train_high) # Обучение модели для Low model_low = GradientBoostingRegressor() model_low.fit(X_train, y_train_low) # 4. Оценка модели # Предсказание на тестовой выборке y_pred_high = model_high.predict(X_test) y_pred_low = model_low.predict(X_test) # Вычисление RMSE rmse_high = np.sqrt(mean_squared_error(y_test_high, y_pred_high)) rmse_low = np.sqrt(mean_squared_error(y_test_low, y_pred_low)) print(f'RMSE for High prediction: {rmse_high}') print(f'RMSE for Low prediction: {rmse_low}') # 5. Прогноз # Используем последние доступные данные для предсказания завтрашних значений latest_features = features.iloc[-1].values.reshape(1, -1) predicted_high = model_high.predict(latest_features) predicted_low = model_low.predict(latest_features) print(f'Predicted High at 15:00 tomorrow: {predicted_high[0]}') print(f'Predicted Low at 15:00 tomorrow: {predicted_low[0]}')
Пояснения:
Примечания:
Заключение:
Представленная стратегия использует исторические данные и методы машинного обучения для предсказания максимальных и минимальных значений SPX до 15:00 завтрашнего дня. Реализация на Python позволяет автоматизировать процесс и получить прогноз с минимальной RMSE.