Ejemplo n.º 1
0
    def up_down_stats(self):

        m_df = self.db.load_data(table_name=TableName.DAY,
                                 time_from=self.time_from,
                                 symbols=[self.selected_stock])

        m_df_spy = self.db.load_data(table_name=TableName.DAY,
                                     time_from=self.time_from,
                                     symbols=["SPY"])

        m_df, m_df_spy = FinI.get_sizes(m_df, m_df_spy)

        self.candle_chart(m_df, m_df_spy)
        # above_sma9, under_sma9, above_boll,under_boll = {"1":0,"2":0,"3":0,"4":0,"5":0,"6":0}
        ind = pd.DataFrame()
        ws = pd.DataFrame()
        u = 0
        pred = pd.DataFrame()

        for index, row in m_df.iterrows():

            if row.weekday == 0:
                i = 1

                while m_df.iloc[
                        m_df.index.get_loc(index) +
                        i].weekday == m_df.iloc[m_df.index.get_loc(index) + 1 +
                                                i].weekday - 1:
                    rw = m_df.iloc[m_df.index.get_loc(index) + i]

                    st.write(str(rw.date) + " - " + str(rw.size_body))
                    i += 1
            st.write(row.week_in_month)

            if True or row.size_sma9 > 0 and row.size_boll > 0:
                if row.size_body > 0:
                    # st.write(u)
                    if u < 0:
                        ind = ind.append([u])
                        u = 0

                    u += 1
                elif row.size_body < 0:
                    if u > 0:
                        ind = ind.append([u])
                        #   st.write(ind)
                        u = 0

                    u -= 1
        #
        st.dataframe(ind)
        st.dataframe(ind.groupby(ind.columns[0]).size())
Ejemplo n.º 2
0
    def prepare_data_for_ml(self):

        m_df = self.db.load_data(table_name=TableName.DAY,
                                 time_from=self.time_from,
                                 symbols=[self.selected_stock])

        m_df_spy = self.db.load_data(table_name=TableName.DAY,
                                     time_from=self.time_from,
                                     symbols=["SPY"])

        m_df, m_df_spy = FinI.get_sizes(m_df, m_df_spy)

        st.dataframe(m_df)
        self.process_data(m_df)
        self.candle_chart(m_df, m_df_spy)
        self.show_sizes(m_df)
        self.get_heatmap(m_df)
        self.nn_pred(m_df)
Ejemplo n.º 3
0
    def logistic_regresion(self, symbols=None):

        if symbols is None:
            symbols = [self.selected_stock]
        # LOGISTIC REGRESSION  sucesfully finish this logic
        st.write(f"Logistic regression: {self.selected_stock}")

        df = self.db.load_data(table_name=TableName.DAY,
                               time_from=self.time_from,
                               symbols=symbols)

        m_df_spy = self.db.load_data(table_name=TableName.DAY,
                                     time_from=self.time_from,
                                     symbols=["SPY"])

        df_best_buy = pd.DataFrame()
        df_lr_raw = self.logistic_regression_raw()
        st.write("logistic regression RAW SPY")
        st.dataframe(df_lr_raw)

        # remove volume, industry, symbol cols
        # df = df.iloc[:,:4]
        # df =  df.dropna()
        # df = df.iloc[:, :4]
        # df = df.retype(spy)
        df['open-close'] = df['close'] - df['open'].shift(1)
        df['close-close'] = df['close'].shift(-1) - df['close']
        # wrong close close only for research
        df['close-close-prev'] = df['close'] - df['close'].shift(1)
        # df['close-close-1'] = df['close'] - df['close'].shift(1)
        # df['close-close-2'] = df['close'].shift(1) - df['close'].shift(2)
        # df['close-close-3'] = df['close'].shift(2) - df['close'].shift(3)
        # df['close-close-4'] = df['close'].shift(3)- df['close'].shift(4)
        df, m_df_spy = FinI.get_sizes(df, m_df_spy)
        # df = FinI.add_weekday(df)
        # df = FinI.add_week_of_month(df)
        df = FinI.add_yearweek(df)

        # df = FinI.add_levels(df)
        # only first nine rows be aware of this

        # df = FinI.add_indicators(df)
        # df["MACD"] = ta.trend.macd(close=df['close'])
        # df['S_9'] = df['close'].rolling(window=9).mean()
        # df['S_20'] = df['close'].rolling(window=20).mean()
        # df['S_50'] = df['close'].rolling(window=50).mean()

        # df['Corr'] = df['close'].rolling(window=10).corr(df['S_9'])
        # df['RSI'] = ta.momentum.rsi(close= df['close'], n=9)
        # Initialize Bollinger Bands Indicator

        # Add Bollinger Bands features
        # df['bb_bbm'] = indicator_bb.bollinger_mavg()
        # df['bb_bbh'] = indicator_bb.bollinger_hband()
        # df['bb_bbl'] = indicator_bb.bollinger_lband()

        df['S_9'] = df['close'].rolling(window=9).mean()
        df['S_20'] = df['close'].rolling(window=20).mean()
        # df['S_50'] = df['close'].rolling(window=50).mean()
        # df['S_200'] = df['close'].rolling(window=200).mean()
        df['Corr_9'] = df['close'].rolling(window=9).corr(df['S_9'])
        df['Corr_20'] = df['close'].rolling(window=9).corr(df['S_20'])
        df['RSI'] = ta.momentum.rsi(close=df['close'])
        # df["MACD"] = ta.trend.macd(close=df['close'])
        df = df.fillna(0)
        st.write("Correlation Matrix - Heatmap")
        self.get_heatmap(df)
        # remove open, high, low
        # df = df.iloc[:,3:]
        y = np.where(df['close'].shift(-1) > df['close'], 1, -1)
        st.write("Rows:")
        st.write(len(df))
        # df = df.drop(columns= ["date",
        #                        "yearweek",
        #                        "size_boll_ub",
        #                        "size_boll_lb",
        #                        "size_boll",
        #                        "up_down_row",
        #                        "green_red_row",
        #                        "price_level",
        #                        "weekday",
        #                        "boll",
        #                        "sma9",
        #                        "close_20_sma",
        #                        "size_top",
        #                        "size_btm",
        #                        "close_20_mstd",
        #                        "size_top-2",
        #                        "size_top-1",
        #                        "size_btm-2",
        #                        "size_btm-1",
        #                        "boll_ub",
        #                        "boll_lb",
        #                        "size_btm-3",
        #                        "size_top-3",
        #                        "size_sma9",
        #                        "size_sma20",
        #                         "sma20",
        #                        "open",
        #                        "close",
        #                        "high",
        #                        "low",
        #                        "size_body-1",
        #                        "size_body-2",
        #                        "size_body-3",
        #                        "week_in_month",
        #                        "size_body",
        #                        "size_prev_chng",
        #                        "symbol",
        #                        "sector",
        #                        "sym",
        #                        "industry",
        #                        "amount",
        #                        "volume",
        #  "open-close",
        # "close-close"
        #                        ])
        df_strategy = df.copy()

        # relatively good negative prediction
        # df = df[["size_sma9"]]
        # values by corelation matrix
        # df = df[["size_sma20","size_sma9","up_down_row"]]
        # df = df[["green_red_row", "size_sma9", "up_down_row", "size_body"]]
        # df = df[["green_red_row", "size_sma9", "up_down_row", "size_body","volume"]]
        # origin
        # df = df[["Corr_9","Corr_20", "open-close", "close-close-prev", "RSI","sma9"]]
        df = df[["Corr_9", "open-close", "close-close-prev", "RSI", "sma9"]]
        # overnight, negative precision
        # df = df[["green_red_row", "size_body-1","size_body-2","size_body-3", "size_prev_chng","weekday"]]

        # df = df[["close", "sma9", "sma20"]]
        st.write("Dataframe")
        st.dataframe(df)
        X = df.iloc[:, :30]
        st.write(len(y))
        st.write(len(X))
        # split to test dataset

        split = int(0.7 * len(df))

        X_train, X_test, y_train, y_test = X[:split], X[split:], y[:split], y[
            split:]

        # We will instantiate the logistic regression in Python using ‘LogisticRegression’
        # function and fit the model on the training dataset using ‘fit’ function.
        model = LogisticRegression()
        model = model.fit(X_train, y_train)

        # Examine coeficients
        pd.DataFrame(zip(X.columns, np.transpose(model.coef_)))
        st.write("Examine The Coefficients")
        st.write(pd.DataFrame(zip(X.columns, np.transpose(model.coef_))))

        #We will calculate the probabilities of the class for the test dataset using ‘predict_proba’ function.
        st.write("probability")
        probability = model.predict_proba(X_test)
        st.write(probability)

        st.write("predicted")
        predicted = model.predict(X_test)
        st.write(predicted)

        st.write("Y test")
        st.write(y_test)
        st.write(len(X_test))
        st.write("Confusion matrix")
        conf_matrix = metrics.confusion_matrix(y_test, predicted)
        st.write(conf_matrix)

        st.write("classification report")
        st.write(metrics.classification_report(y_test, predicted))

        st.write("model accuracy")
        st.write(model.score(X_test, y_test))

        st.write("cross validation accuracy")
        cross_val = cross_val_score(LogisticRegression(),
                                    X,
                                    y,
                                    scoring='accuracy',
                                    cv=10)
        st.write(cross_val)
        st.write(cross_val.mean())

        st.write("Trading Strategy")

        df['Predicted_Signal'] = model.predict(X)
        st.write("Predicted signals")
        st.dataframe(df)

        #STRARTEGY count
        st.dataframe(df_strategy)

        # df_strategy = df_strategy.tail(len(df_strategy) - split)
        df_strategy["Predicted_Signal"] = model.predict(X)
        price_change = df_strategy.iloc[len(df_strategy) -
                                        1].close - df_strategy.iloc[0].close

        st.write("Perfect gain")
        df_strategy["perfect_gain"] = df_strategy["close-close"].where(
            df_strategy["close-close"] > 0).sum()
        st.write(df_strategy["perfect_gain"].iloc[0])

        st.write("Invest Gain")
        st.write(price_change)

        st.write("L.G. gain")
        df_strategy["lg_gain"] = df_strategy["close-close"].where(
            df_strategy["Predicted_Signal"] > 0).sum()
        st.write(df_strategy["lg_gain"].iloc[0])

        gap = -2
        st.write("sma9 gain: " + str(gap))
        df_strategy["sma9_gain"] = df_strategy["close-close"].where(
            df_strategy["size_sma9"] > gap).sum()
        st.write(df_strategy["sma9_gain"].iloc[0])

        st.write("sma9 gain 0")
        df_strategy["sma9_gain"] = df_strategy["close-close"].where(
            df_strategy["size_sma9"] > 0).sum()
        st.write(df_strategy["sma9_gain"].iloc[0])

        st.write("sma20 gain")
        df_strategy["sma20_gain"] = df_strategy["close-close"].where(
            df_strategy["size_sma20"] > -2).sum()
        st.write(df_strategy["sma20_gain"].iloc[0])