def preprocess_data(self, test_size=.3, random_state=42): """ :param test_size: :param random_state: :return: x_train, x_test, y_train, y_test """ from yahooquery import Ticker from sklearn.model_selection import train_test_split from API.Help import pct_change from apps.trading.models.PortfolioItems import PortfolioItems portfolio_item = PortfolioItems.objects.get(ai_model=self) ticker_history = Ticker(str(portfolio_item)).history( interval=portfolio_item.portfolio.get_trading_frequency(), period=portfolio_item.portfolio.get_max_period()) #cleaning the data if all(elem in list(ticker_history) for elem in ['dividends', 'splits']): ticker_history = ticker_history.drop(['dividends', 'splits'], axis=1) #applying pct_change and dropping NA values ticker_history = pct_change(ticker_history).dropna() # predicting next period movement based on last period numbers y_label = (ticker_history['close'] > 0).shift(-1).dropna() == True ticker_history = ticker_history[:-1] assert (ticker_history.size()[0] == y_label.size()[0]) return train_test_split(ticker_history, y_label, test_size=test_size, random_state=random_state)
import numpy as np from yahooquery import Ticker import armagarch as ag import multiprocessing as mp price = Ticker('AAPL').history(period='10y', interval='1d') price.reset_index(inplace=True) price.drop('symbol', axis=1, inplace=True) price.set_index('date', inplace=True) log_returns = np.log(price['adjclose'] / price['adjclose'].shift(1)).dropna() T = len(log_returns) intervals = [(i - 500, i) for i in range(500, T - 1)] def one_step_var(interval): t1, t2 = interval X = log_returns.values[t1:t2] prediction_date = log_returns.index[t2 + 1].strftime('%Y-%m-%d') model = ag.VaRModel() model.fit(X, 2, 2, verbose=False, summary_stats=False) value_at_risk95 = model.predict(X, threshold=0.95) with open( '/home/howardwong/Desktop/Research/ARMA-GARCH-Models/data/var-forecasts/{}.txt' .format(prediction_date), 'w') as f: f.write(prediction_date + ',' + str(value_at_risk95) + ',' + str(log_returns.values[t2 + 1])) f.close()