Esempio n. 1
0
    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)
Esempio n. 2
0
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()