def cmo_cb_pressed(stock_analysis_tool: QMainWindow,
                           cb: QCheckBox) -> None:
            """

            :param cb:
            :return:
            """
            if cb.isChecked():
                stock_analysis_tool.df['cmo'] = chande_momentum_oscillator(
                    close_data=stock_analysis_tool.df['close'],
                    period=stock_analysis_tool.cmo_n)
                stock_analysis_tool.df['cmo overbought'] = 50
                stock_analysis_tool.df['cmo oversold'] = -50
                # Add CMO to Display Graph
                stock_analysis_tool.add_column_to_graph(column_name='cmo')
                stock_analysis_tool.add_column_to_graph(
                    column_name='cmo overbought',
                    color=stock_analysis_tool.protected_colors['red'])
                stock_analysis_tool.add_column_to_graph(
                    column_name='cmo oversold',
                    color=stock_analysis_tool.protected_colors['green'])
            else:
                # Remove CMO from Display Graph
                stock_analysis_tool.remove_column_from_graph(column_name='cmo')
                stock_analysis_tool.remove_column_from_graph(
                    column_name='cmo overbought')
                stock_analysis_tool.remove_column_from_graph(
                    column_name='cmo oversold')
                stock_analysis_tool.df = stock_analysis_tool.df.drop("cmo",
                                                                     axis=1)
                stock_analysis_tool.df = stock_analysis_tool.df.drop(
                    "cmo overbought", axis=1)
                stock_analysis_tool.df = stock_analysis_tool.df.drop(
                    "cmo oversold", axis=1)
        def rsi_cb_pressed(stock_analysis_tool: QMainWindow,
                           cb: QCheckBox) -> None:
            """

            :param stock_analysis_tool:
            :param cb:
            :return:
            """
            if cb.isChecked():
                # Add RSI to Display Graph
                stock_analysis_tool.df['rsi'] = rsi(
                    close=stock_analysis_tool.df['close'],
                    n=stock_analysis_tool.rsi_n)
                stock_analysis_tool.df['rsi overbought'] = 70
                stock_analysis_tool.df['rsi oversold'] = 30
                stock_analysis_tool.add_column_to_graph(column_name='rsi')
                stock_analysis_tool.add_column_to_graph(
                    column_name='rsi overbought',
                    color=stock_analysis_tool.protected_colors['red'])
                stock_analysis_tool.add_column_to_graph(
                    column_name='rsi oversold',
                    color=stock_analysis_tool.protected_colors['green'])
            else:
                # Remove RSI from Display Graph
                stock_analysis_tool.remove_column_from_graph(column_name='rsi')
                stock_analysis_tool.remove_column_from_graph(
                    column_name='rsi overbought')
                stock_analysis_tool.remove_column_from_graph(
                    column_name='rsi oversold')
                stock_analysis_tool.df = stock_analysis_tool.df.drop("rsi",
                                                                     axis=1)
                stock_analysis_tool.df = stock_analysis_tool.df.drop(
                    "rsi overbought", axis=1)
                stock_analysis_tool.df = stock_analysis_tool.df.drop(
                    "rsi oversold", axis=1)
        def rsi_time_frame_text_changed(stock_analysis_tool: QMainWindow,
                                        rsi_time_frame_text: QTextEdit):
            """

            :param stock_analysis_tool:
            :param rsi_time_frame_text:
            :return:
            """
            text = rsi_time_frame_text.toPlainText()

            if text != "":
                try:
                    stock_analysis_tool.rsi_n = int(text)
                    if 'rsi' in stock_analysis_tool.df.columns:
                        stock_analysis_tool.df = stock_analysis_tool.df.drop(
                            "rsi", axis=1)
                        stock_analysis_tool.df['rsi'] = rsi(
                            close=stock_analysis_tool.df['close'],
                            n=stock_analysis_tool.rsi_n)
                        x = [
                            datetime.timestamp(date_time)
                            for date_time in stock_analysis_tool.df.index
                        ]
                        stock_analysis_tool.data_lines['rsi'].setData(
                            x, stock_analysis_tool.df['rsi'])
                except ValueError:
                    print("Invalid RSI Input")
        def stock_combo_changed(stock_analysis_tool: QMainWindow,
                                combo: QComboBox, source: IntEnum) -> None:
            combo_text = combo.currentText()

            if source == Ui_StockAnalysisTool.StockSources.YAHOO_FIN:
                stock_analysis_tool.df = retrieve_yahoo_fin_stock_data(
                    ticker=combo_text)
            elif source == Ui_StockAnalysisTool.StockSources.ASTRASS:
                # retrieve data from ASTRASS
                stock_analysis_tool.df = None
            elif source == Ui_StockAnalysisTool.StockSources.YFINANCE:
                # retrieve data from YFinance
                stock_analysis_tool.df = None

            stock_analysis_tool.update_data_on_graph(
                data_frame=stock_analysis_tool.df)
        def williams_r_cb_pressed(stock_analysis_tool: QMainWindow,
                                  cb: QCheckBox) -> None:
            """

            :param cb:
            :return:
            """
            if cb.isChecked():
                # Add WilliamsR to Display Graph
                stock_analysis_tool.df['WilliamsR'] = wr(
                    stock_analysis_tool.df['high'],
                    stock_analysis_tool.df['low'],
                    stock_analysis_tool.df['close'])
                stock_analysis_tool.df['WilliamsR overbought'] = -20
                stock_analysis_tool.df['WilliamsR oversold'] = -80
                stock_analysis_tool.add_column_to_graph(
                    column_name='WilliamsR')
                stock_analysis_tool.add_column_to_graph(
                    column_name='WilliamsR overbought',
                    color=stock_analysis_tool.protected_colors['red'])
                stock_analysis_tool.add_column_to_graph(
                    column_name='WilliamsR oversold',
                    color=stock_analysis_tool.protected_colors['green'])
            else:
                # Remove WilliamsR from Display Graph
                stock_analysis_tool.remove_column_from_graph(
                    column_name='WilliamsR')
                stock_analysis_tool.remove_column_from_graph(
                    column_name='WilliamsR overbought')
                stock_analysis_tool.remove_column_from_graph(
                    column_name='WilliamsR oversold')
                stock_analysis_tool.df = stock_analysis_tool.df.drop(
                    "WilliamsR", axis=1)
                stock_analysis_tool.df = stock_analysis_tool.df.drop(
                    "WilliamsR overbought", axis=1)
                stock_analysis_tool.df = stock_analysis_tool.df.drop(
                    "WilliamsR oversold", axis=1)
        def roc_cb_pressed(stock_analysis_tool: QMainWindow,
                           cb: QCheckBox) -> None:
            """

            :param cb:
            :return:
            """
            if cb.isChecked():
                # Add ROC to Display Graph
                stock_analysis_tool.df['roc'] = roc(
                    close=stock_analysis_tool.df['close'],
                    n=stock_analysis_tool.roc_n)
                stock_analysis_tool.add_column_to_graph(column_name='roc')
            else:
                # Remove ROC from Display Graph
                stock_analysis_tool.remove_column_from_graph(column_name='roc')
                stock_analysis_tool.df = stock_analysis_tool.df.drop("roc",
                                                                     axis=1)
        def dpo_cb_pressed(stock_analysis_tool: QMainWindow,
                           cb: QCheckBox) -> None:
            """

            :param cb:
            :return:
            """
            if cb.isChecked():
                # Add DPO to Display Graph
                stock_analysis_tool.df['dpo'] = dpo(
                    close=stock_analysis_tool.df['close'],
                    n=stock_analysis_tool.dpo_n)
                stock_analysis_tool.add_column_to_graph(column_name='dpo')
            else:
                # Remove DPO from Display Graph
                stock_analysis_tool.remove_column_from_graph(column_name='dpo')
                stock_analysis_tool.df = stock_analysis_tool.df.drop("dpo",
                                                                     axis=1)
        def cci_cb_pressed(stock_analysis_tool: QMainWindow,
                           cb: QCheckBox) -> None:
            """

            :param cb:
            :return:
            """
            if cb.isChecked():
                # Add CCI to Display Graph
                stock_analysis_tool.df['cci'] = cci(
                    close=stock_analysis_tool.df['close'],
                    low=stock_analysis_tool.df['low'],
                    high=stock_analysis_tool.df['high'],
                    n=stock_analysis_tool.cci_n)
                stock_analysis_tool.add_column_to_graph(column_name='cci')
            else:
                # Remove CCI from Display Graph
                stock_analysis_tool.remove_column_from_graph(column_name='cci')
                stock_analysis_tool.df = stock_analysis_tool.df.drop("cci",
                                                                     axis=1)
        def adx_cb_pressed(stock_analysis_tool: QMainWindow,
                           cb: QCheckBox) -> None:
            """

            :param cb:
            :return:
            """
            if cb.isChecked():
                # Add ADX to Display Graph
                stock_analysis_tool.df['adx'] = adx(
                    high=stock_analysis_tool.df['high'],
                    low=stock_analysis_tool.df['low'],
                    close=stock_analysis_tool.df['close'],
                    n=stock_analysis_tool.adx_n)
                stock_analysis_tool.add_column_to_graph(column_name='adx')
            else:
                # Remove ADX from Display Graph
                stock_analysis_tool.remove_column_from_graph(column_name='adx')
                stock_analysis_tool.df = stock_analysis_tool.df.drop("adx",
                                                                     axis=1)
        def cmf_cb_pressed(stock_analysis_tool: QMainWindow,
                           cb: QCheckBox) -> None:
            """

            :param cb:
            :return:
            """
            if cb.isChecked():
                # Add CMF to Display Graph
                stock_analysis_tool.df['cmf'] = chaikin_money_flow(
                    high=stock_analysis_tool.df['high'],
                    low=stock_analysis_tool.df['low'],
                    close=stock_analysis_tool.df['close'],
                    volume=stock_analysis_tool.df['volume'],
                    n=stock_analysis_tool.cmf_n)
                stock_analysis_tool.add_column_to_graph(column_name='cmf')
            else:
                # Remove CMF from Display Graph
                stock_analysis_tool.remove_column_from_graph(column_name='cmf')
                stock_analysis_tool.df = stock_analysis_tool.df.drop("cmf",
                                                                     axis=1)
        def macd_cb_pressed(stock_analysis_tool: QMainWindow,
                            cb: QCheckBox) -> None:
            """

            :param cb:
            :return:
            """
            if cb.isChecked():
                # Add MACD to Display Graph
                stock_analysis_tool.df['MACD'] = macd(close=stock_analysis_tool.df['close'],
                                                      n_slow=stock_analysis_tool.macd_slow,
                                                      n_fast=stock_analysis_tool.macd_fast) - \
                                                 macd_signal(close=stock_analysis_tool.df['close'],
                                                             n_slow=stock_analysis_tool.macd_slow,
                                                             n_fast=stock_analysis_tool.macd_fast,
                                                             n_sign=stock_analysis_tool.macd_sign)
                stock_analysis_tool.add_column_to_graph(column_name='MACD')
            else:
                # Remove MACD from Display Graph
                stock_analysis_tool.remove_column_from_graph(
                    column_name='MACD')
                stock_analysis_tool.df = stock_analysis_tool.df.drop("MACD",
                                                                     axis=1)