SPX прогноз с RMSE

تم الإنشاء في: ٢١ نوفمبر ٢٠٢٤

تمت الإجابة باستخدام OpenAI 01 Preview بواسطة OpenAI01

سؤال

как эксперт в питон и торговле акциями напиши стратегию и реализуй в коде которая предсказывает максимальные и минимальные значения завтрашнего дня в 15:00 spx с минимальным rmse. Начинай расчет с 10 утра, данные на 9 утра завтра уже получены

الفكرة

Предлагаю создать стратегию предсказания спотовой цены.

Понимание стратегии
Я сейчас разбираюсь в причине несообразности данных с временными временными интервалами, подтверждая, что данные до 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.

Стратегия:

  1. Сбор данных:

    • Соберите исторические данные SPX, включая открытие, максимум, минимум, закрытие и объем торгов.
    • Используйте данные фьючерсов и предрыночные данные, доступные на 9 утра завтрашнего дня.
  2. Предобработка данных:

    • Создайте новые функции (фичи), такие как скользящие средние, индикаторы технического анализа и т.д.
    • Объедините данные, доступные на 10 утра сегодня и на 9 утра завтрашнего дня.
  3. Моделирование:

    • Разделите данные на обучающую и тестовую выборки.
    • Обучите регрессионную модель (например, Gradient Boosting Regressor) для предсказания максимума и минимума.
  4. Оценка модели:

    • Используйте RMSE для оценки точности модели.
    • Подберите гиперпараметры для минимизации RMSE.
  5. Прогноз:

    • Используйте обученную модель для предсказания максимальных и минимальных значений на 15:00 завтрашнего дня.

Реализация на 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]}')

Пояснения:

  • yfinance: используется для загрузки исторических данных SPX.
  • pre_market_data.csv: файл, содержащий предрыночные данные на 9 утра завтрашнего дня.
  • GradientBoostingRegressor: выбран как мощная модель для регрессионных задач.
  • create_features: функция для создания технических индикаторов из исходных данных.
  • RMSE: используется как метрика для оценки точности модели.

Примечания:

  • В реальной ситуации необходимо убедиться, что данные корректны и полностью соответствуют временным рамкам.
  • Можно улучшить модель, добавив больше фичей или использовав другие алгоритмы машинного обучения.
  • Гиперпараметры модели можно оптимизировать с помощью Grid Search или Random Search для дальнейшего уменьшения RMSE.

Заключение:

Представленная стратегия использует исторические данные и методы машинного обучения для предсказания максимальных и минимальных значений SPX до 15:00 завтрашнего дня. Реализация на Python позволяет автоматизировать процесс и получить прогноз с минимальной RMSE.

مشاركة هذا السؤال والجواب