def arimaTest(l_eq):
    for i in range(1, 6):
        ar = ARIMA(l_eq, order=(i, d, 0))
        arfit = ar.fit(disp=-1)
        arresults = ARIMAResults.bic(arfit)
        mktBIC["AR (" + str(i) + ")"] = arresults
    for i in range(1, 6):
        ma = ARIMA(l_eq, order=(0, d, i))
        mafit = ma.fit(disp=-1)
        maresults = ARIMAResults.bic(mafit)
        mktBIC["MA (" + str(i) + ")"] = maresults
    def model_select(self):
        self.aic = []
        self.bic = []
        ## If data is stock
        if self.is_stock:
            for i in range(3):
                for j in range(3):
                    if i == 0:
                        if j == 2:
                            continue
                        init = [.1 for j in range(i + j + 2)]
                        model = ARIMA(self.train_set, order=(j + 1, 0, i))
                        self.model_fit = model.fit(start_params=init, disp=0)

                        self.aic.append(ARIMAResults.aic(self.model_fit))
                        self.bic.append(ARIMAResults.bic(self.model_fit))
                        #print(ARIMAResults.summary(self.model_fit))
                    else:
                        init = [.4 for j in range(i + j + 1)]
                        model = ARIMA(self.train_set, order=(j, 0, i))
                        self.model_fit = model.fit(start_params=init,
                                                   maxiter=150,
                                                   disp=0)

                        self.aic.append(ARIMAResults.aic(self.model_fit))
                        self.bic.append(ARIMAResults.bic(self.model_fit))
                        #print(ARIMAResults.summary(self.model_fit))
        ## If data is forex
        else:
            for i in range(3):
                for j in range(3):
                    if i == 0:
                        if j == 2:
                            continue
                        init = [.1 for j in range(i + j + 2)]
                        model = ARIMA(self.train_set, order=(j + 1, 0, i))
                        self.model_fit = model.fit(start_params=init,
                                                   maxiter=150,
                                                   disp=0)

                        self.aic.append(ARIMAResults.aic(self.model_fit))
                        self.bic.append(ARIMAResults.bic(self.model_fit))
                        print(ARIMAResults.summary(self.model_fit))
                    else:
                        init = [.28 for j in range(i + j + 1)]
                        model = ARIMA(self.train_set, order=(j, 0, i))

                        self.model_fit = model.fit(start_params=init,
                                                   maxiter=150,
                                                   disp=0)

                        self.aic.append(ARIMAResults.aic(self.model_fit))
                        self.bic.append(ARIMAResults.bic(self.model_fit))
                        print(ARIMAResults.summary(self.model_fit))

        ## Compare AIC and BIC, select the best model
        min_aic = min(self.aic)
        min_bic = min(self.bic)

        x = PrettyTable(["Model", "AIC", "BIC"])
        x.align["Model"] = "l"
        x.padding_width = 1
        x.add_row(["ARIMA(1,1,0)", self.aic[0], self.bic[0]])
        x.add_row(["ARIMA(2,1,0)", self.aic[1], self.bic[1]])
        x.add_row(["ARIMA(0,1,1)", self.aic[2], self.bic[2]])
        x.add_row(["ARIMA(1,1,1)", self.aic[3], self.bic[3]])
        x.add_row(["ARIMA(2,1,1)", self.aic[4], self.bic[4]])
        x.add_row(["ARIMA(0,1,2)", self.aic[5], self.bic[5]])
        x.add_row(["ARIMA(1,1,2)", self.aic[6], self.bic[6]])
        x.add_row(["ARIMA(2,1,2)", self.aic[7], self.bic[7]])
        print(x)