Exemplo n.º 1
0
class AVInterface:
    """
    AlphaVantage interface class, provides methods to call AlphaVantage API
    and return the result in useful format handling possible errors.
    """

    def __init__(self, apiKey, config):
        self.read_configuration(config)
        self._last_call_ts = dt.datetime.now()
        self.TS = TimeSeries(
            key=apiKey,
            output_format="pandas",
            indexing_type="integer",
            treat_info_as_error=True,
            retries=0,
        )
        self.TI = TechIndicators(key=apiKey, output_format="pandas", retries=0)
        logging.info("AlphaVantage initialised.")

    def read_configuration(self, config):
        self.enable = config["alpha_vantage"]["enable"]
        self.api_timeout = config["alpha_vantage"]["api_timeout"]

    def get_prices(self, market_id, interval):
        """
        Return the price time series of the requested market with the interval
        granularity. Return None if the interval is invalid
        """
        if (
            interval == AVInterval.MIN_1
            or interval == AVInterval.MIN_5
            or interval == AVInterval.MIN_15
            or interval == AVInterval.MIN_30
            or interval == AVInterval.MIN_60
        ):
            return self.intraday(market_id, interval)
        elif interval == AVInterval.DAILY:
            return self.daily(market_id)
        elif interval == AVInterval.WEEKLY:
            return self.weekly(market_id)
        # TODO implement monthly call
        else:
            return None

    def daily(self, marketId):
        """
        Calls AlphaVantage API and return the Daily time series for the given market

            - **marketId**: string representing an AlphaVantage compatible market id
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call()
        market = self._format_market_id(marketId)
        try:
            data, meta_data = self.TS.get_daily(symbol=market, outputsize="full")
            return data
        except Exception as e:
            logging.error("AlphaVantage wrong api call for {}".format(market))
            logging.debug(e)
            logging.debug(traceback.format_exc())
            logging.debug(sys.exc_info()[0])
        return None

    def intraday(self, marketId, interval):
        """
        Calls AlphaVantage API and return the Intraday time series for the given market

            - **marketId**: string representing an AlphaVantage compatible market id
            - **interval**: string representing an AlphaVantage interval type
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call()
        if interval is AVIntervals.DAILY:
            logging.error("AlphaVantage Intraday does not support DAILY interval")
            return None
        market = self._format_market_id(marketId)
        try:
            data, meta_data = self.TS.get_intraday(
                symbol=market, interval=interval.value, outputsize="full"
            )
            return data
        except Exception as e:
            logging.error("AlphaVantage wrong api call for {}".format(market))
            logging.debug(e)
            logging.debug(traceback.format_exc())
            logging.debug(sys.exc_info()[0])
        return None

    def weekly(self, marketId):
        """
        Calls AlphaVantage API and return the Weekly time series for the given market

            - **marketId**: string representing an AlphaVantage compatible market id
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call()
        market = self._format_market_id(marketId)
        try:
            data, meta_data = self.TS.get_weekly(symbol=market)
            return data
        except Exception as e:
            logging.error("AlphaVantage wrong api call for {}".format(market))
            logging.debug(e)
            logging.debug(traceback.format_exc())
            logging.debug(sys.exc_info()[0])
        return None

    def quote_endpoint(self, market_id):
        """
        Calls AlphaVantage API and return the Quote Endpoint data for the given market

            - **market_id**: string representing the market id to fetch data of
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call()
        market = self._format_market_id(market_id)
        try:
            data, meta_data = self.TS.get_quote_endpoint(
                symbol=market, outputsize="full"
            )
            return data
        except:
            logging.error("AlphaVantage wrong api call for {}".format(market))
        return None

    # Technical indicators

    def macdext(self, marketId, interval):
        """
        Calls AlphaVantage API and return the MACDEXT tech indicator series for the given market

            - **marketId**: string representing an AlphaVantage compatible market id
            - **interval**: string representing an AlphaVantage interval type
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call()
        market = self._format_market_id(marketId)
        try:
            data, meta_data = self.TI.get_macdext(
                market,
                interval=interval.value,
                series_type="close",
                fastperiod=12,
                slowperiod=26,
                signalperiod=9,
                fastmatype=2,
                slowmatype=1,
                signalmatype=0,
            )
            if data is None:
                return None
            data.index = range(len(data))
            return data
        except Exception as e:
            logging.error("AlphaVantage wrong api call for {}".format(market))
            logging.debug(e)
            logging.debug(traceback.format_exc())
            logging.debug(sys.exc_info()[0])
        return None

    def macd(self, marketId, interval):
        """
        Calls AlphaVantage API and return the MACDEXT tech indicator series for the given market

            - **marketId**: string representing an AlphaVantage compatible market id
            - **interval**: string representing an AlphaVantage interval type
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call()
        market = self._format_market_id(marketId)
        try:
            data, meta_data = self.TI.get_macd(
                market,
                interval=interval.value,
                series_type="close",
                fastperiod=12,
                slowperiod=26,
                signalperiod=9,
            )
            return data
        except Exception as e:
            logging.error("AlphaVantage wrong api call for {}".format(market))
            logging.debug(e)
            logging.debug(traceback.format_exc())
            logging.debug(sys.exc_info()[0])
        return None

    # Utils functions

    def _format_market_id(self, marketId):
        """
        Convert a standard market id to be compatible with AlphaVantage API.
        Adds the market exchange prefix (i.e. London is LON:)
        """
        return "{}:{}".format("LON", marketId.split("-")[0])

    def _wait_before_call(self):
        """
        Wait between API calls to not overload the server
        """
        while (dt.datetime.now() - self._last_call_ts) <= dt.timedelta(
            seconds=self.api_timeout
        ):
            time.sleep(0.5)
        self._last_call_ts = dt.datetime.now()
Exemplo n.º 2
0
class AVInterface(StocksInterface):
    """
    AlphaVantage interface class, provides methods to call AlphaVantage API
    and return the result in useful format handling possible errors.
    """
    def initialise(self) -> None:
        logging.info("Initialising AVInterface...")
        api_key = self._config.get_credentials()["av_api_key"]
        self.TS = TimeSeries(key=api_key,
                             output_format="pandas",
                             treat_info_as_error=True)
        self.TI = TechIndicators(key=api_key,
                                 output_format="pandas",
                                 treat_info_as_error=True)

    def _to_av_interval(self, interval: Interval) -> AVInterval:
        """
        Convert the Broker Interval to AlphaVantage compatible intervals.
        Return the converted interval or None if a conversion is not available
        """
        if interval == Interval.MINUTE_1:
            return AVInterval.MIN_1
        elif interval == Interval.MINUTE_5:
            return AVInterval.MIN_5
        elif interval == Interval.MINUTE_15:
            return AVInterval.MIN_15
        elif interval == Interval.MINUTE_30:
            return AVInterval.MIN_30
        elif interval == Interval.HOUR:
            return AVInterval.MIN_60
        elif interval == Interval.DAY:
            return AVInterval.DAILY
        elif interval == Interval.WEEK:
            return AVInterval.WEEKLY
        elif interval == Interval.MONTH:
            return AVInterval.MONTHLY
        else:
            logging.error(
                "Unable to convert interval {} to AlphaVantage equivalent".
                format(interval.value))
            raise ValueError("Unsupported Interval value: {}".format(interval))

    def get_prices(self, market: Market, interval: Interval,
                   data_range: int) -> MarketHistory:
        data = None
        av_interval = self._to_av_interval(interval)
        if (av_interval == AVInterval.MIN_1 or av_interval == AVInterval.MIN_5
                or av_interval == AVInterval.MIN_15
                or av_interval == AVInterval.MIN_30
                or av_interval == AVInterval.MIN_60):
            data = self.intraday(market.id, av_interval)
        elif av_interval == AVInterval.DAILY:
            data = self.daily(market.id)
        elif av_interval == AVInterval.WEEKLY:
            data = self.weekly(market.id)
        # TODO implement monthly call
        else:
            raise ValueError("Unsupported Interval.{}".format(interval.name))
        history = MarketHistory(
            market,
            data.index,
            data["2. high"].values,
            data["3. low"].values,
            data["4. close"].values,
            data["5. volume"].values,
        )
        return history

    def daily(self, marketId: str) -> pandas.DataFrame:
        """
        Calls AlphaVantage API and return the Daily time series for the given market

            - **marketId**: string representing an AlphaVantage compatible market id
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call(self._config.get_alphavantage_api_timeout())
        market = self._format_market_id(marketId)
        try:
            data, meta_data = self.TS.get_daily(symbol=market,
                                                outputsize="full")
            return data
        except Exception as e:
            print(e)
            logging.error("AlphaVantage wrong api call for {}".format(market))
            logging.debug(e)
            logging.debug(traceback.format_exc())
            logging.debug(sys.exc_info()[0])
        return None

    def intraday(self, marketId: str,
                 interval: AVInterval) -> pandas.DataFrame:
        """
        Calls AlphaVantage API and return the Intraday time series for the given market

            - **marketId**: string representing an AlphaVantage compatible market id
            - **interval**: string representing an AlphaVantage interval type
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call(self._config.get_alphavantage_api_timeout())
        market = self._format_market_id(marketId)
        try:
            data, meta_data = self.TS.get_intraday(symbol=market,
                                                   interval=interval.value,
                                                   outputsize="full")
            return data
        except Exception as e:
            logging.error("AlphaVantage wrong api call for {}".format(market))
            logging.debug(e)
            logging.debug(traceback.format_exc())
            logging.debug(sys.exc_info()[0])
        return None

    def weekly(self, marketId: str) -> pandas.DataFrame:
        """
        Calls AlphaVantage API and return the Weekly time series for the given market

            - **marketId**: string representing an AlphaVantage compatible market id
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call(self._config.get_alphavantage_api_timeout())
        market = self._format_market_id(marketId)
        try:
            data, meta_data = self.TS.get_weekly(symbol=market)
            return data
        except Exception as e:
            logging.error("AlphaVantage wrong api call for {}".format(market))
            logging.debug(e)
            logging.debug(traceback.format_exc())
            logging.debug(sys.exc_info()[0])
        return None

    def quote_endpoint(self, market_id: str) -> pandas.DataFrame:
        """
        Calls AlphaVantage API and return the Quote Endpoint data for the given market

            - **market_id**: string representing the market id to fetch data of
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call(self._config.get_alphavantage_api_timeout())
        market = self._format_market_id(market_id)
        try:
            data, meta_data = self.TS.get_quote_endpoint(symbol=market,
                                                         outputsize="full")
            return data
        except Exception:
            logging.error("AlphaVantage wrong api call for {}".format(market))
        return None

    # Technical indicators

    def get_macd(self, market: Market, interval: Interval,
                 datapoints_range: int) -> MarketMACD:
        av_interval = self._to_av_interval(interval)
        data = self.macdext(market.id, av_interval)
        macd = MarketMACD(
            market,
            data.index,
            data["MACD"].values,
            data["MACD_Signal"].values,
            data["MACD_Hist"].values,
        )
        return macd

    def macdext(self, marketId: str, interval: AVInterval) -> pandas.DataFrame:
        """
        Calls AlphaVantage API and return the MACDEXT tech indicator series for the given market

            - **marketId**: string representing an AlphaVantage compatible market id
            - **interval**: string representing an AlphaVantage interval type
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call(self._config.get_alphavantage_api_timeout())
        market = self._format_market_id(marketId)
        data, meta_data = self.TI.get_macdext(
            market,
            interval=interval.value,
            series_type="close",
            fastperiod=12,
            slowperiod=26,
            signalperiod=9,
            fastmatype=2,
            slowmatype=1,
            signalmatype=0,
        )
        return data

    def macd(self, marketId: str, interval: AVInterval) -> pandas.DataFrame:
        """
        Calls AlphaVantage API and return the MACDEXT tech indicator series for the given market

            - **marketId**: string representing an AlphaVantage compatible market id
            - **interval**: string representing an AlphaVantage interval type
            - Returns **None** if an error occurs otherwise the pandas dataframe
        """
        self._wait_before_call(self._config.get_alphavantage_api_timeout())
        market = self._format_market_id(marketId)
        data, meta_data = self.TI.get_macd(
            market,
            interval=interval.value,
            series_type="close",
            fastperiod=12,
            slowperiod=26,
            signalperiod=9,
        )
        return data

    # Utils functions

    def _format_market_id(self, marketId: str) -> str:
        """
        Convert a standard market id to be compatible with AlphaVantage API.
        Adds the market exchange prefix (i.e. London is LON:)
        """
        # TODO MarketProvider/IGInterface should return marketId without "-UK"
        return "{}:{}".format("LON", marketId.split("-")[0])
cmo_data, meta_data = ti.get_cmo(symbol=symbol, interval=interval)
dema_data, meta_data = ti.get_dema(symbol=symbol, interval=interval)
dx_data, meta_data = ti.get_dx(symbol=symbol, interval=interval)
ema_data, meta_data = ti.get_ema(symbol=symbol, interval=interval)
ht_dcperiod_data, meta_data = ti.get_ht_dcperiod(symbol=symbol, interval=interval)
ht_dcphase_data, meta_data = ti.get_ht_dcphase(symbol=symbol, interval=interval)
ht_phasor_data, meta_data = ti.get_ht_phasor(symbol=symbol, interval=interval)
ht_sine_data, meta_data = ti.get_ht_sine(symbol=symbol, interval=interval)
ht_trendline_data, meta_data = ti.get_ht_trendline(symbol=symbol, interval=interval)
ht_trendmode_data, meta_data = ti.get_ht_trendmode(symbol=symbol, interval=interval)

print("Progress: 40% complete...")

kama_data, meta_data = ti.get_kama(symbol=symbol, interval=interval)
macd_data, meta_data = ti.get_macd(symbol=symbol, interval=interval)
macdext_data, meta_data = ti.get_macdext(symbol=symbol, interval=interval)
mama_data, meta_data = ti.get_mama(symbol=symbol, interval=interval)
mfi_data, meta_data = ti.get_mfi(symbol=symbol, interval=interval)
midpoint_data, meta_data = ti.get_midpoint(symbol=symbol, interval=interval)
midprice_data, meta_data = ti.get_midprice(symbol=symbol, interval=interval)
minus_di_data, meta_data = ti.get_minus_di(symbol=symbol, interval=interval)
mom_data, meta_data = ti.get_mom(symbol=symbol, interval=interval)
natr_data, meta_data = ti.get_natr(symbol=symbol, interval=interval)

print("Progress: 60% complete...")

obv_data, meta_data = ti.get_obv(symbol=symbol, interval=interval)
plus_di_data, meta_data = ti.get_plus_di(symbol=symbol, interval=interval)
plus_dm_data, meta_data = ti.get_plus_dm(symbol=symbol, interval=interval)
ppo_data, meta_data = ti.get_ppo(symbol=symbol, interval=interval)
roc_data, meta_data = ti.get_roc(symbol=symbol, interval=interval)
def techIndicatorPull(symbol):
    interval = "1min"
    print("Calculating Tech Indicators ...")

    ti = TechIndicators(key='1HAYLUHGCB6E0VXC', output_format='pandas')

    print("Progress: 0% complete...")

    ad_data, meta_data = ti.get_ad(symbol=symbol, interval=interval)
    adosc_data, meta_data = ti.get_adosc(symbol=symbol, interval=interval)
    adx_data, meta_data = ti.get_adx(symbol=symbol, interval=interval)
    adxr_data, meta_data = ti.get_adxr(symbol=symbol, interval=interval)
    apo_data, meta_data = ti.get_apo(symbol=symbol, interval=interval)
    aroon_data, meta_data = ti.get_aroon(symbol=symbol, interval=interval)
    aroonosc_data, meta_data = ti.get_aroonosc(symbol=symbol,
                                               interval=interval)
    atr_data, meta_data = ti.get_atr(symbol=symbol, interval=interval)
    bop_data, meta_data = ti.get_bop(symbol=symbol, interval=interval)
    cci_data, meta_data = ti.get_cci(symbol=symbol, interval=interval)

    print("Progress: 20% complete...")

    cmo_data, meta_data = ti.get_cmo(symbol=symbol, interval=interval)
    dema_data, meta_data = ti.get_dema(symbol=symbol, interval=interval)
    dx_data, meta_data = ti.get_dx(symbol=symbol, interval=interval)
    ema_data, meta_data = ti.get_ema(symbol=symbol, interval=interval)
    ht_dcperiod_data, meta_data = ti.get_ht_dcperiod(symbol=symbol,
                                                     interval=interval)
    ht_dcphase_data, meta_data = ti.get_ht_dcphase(symbol=symbol,
                                                   interval=interval)
    ht_phasor_data, meta_data = ti.get_ht_phasor(symbol=symbol,
                                                 interval=interval)
    ht_sine_data, meta_data = ti.get_ht_sine(symbol=symbol, interval=interval)
    ht_trendline_data, meta_data = ti.get_ht_trendline(symbol=symbol,
                                                       interval=interval)
    ht_trendmode_data, meta_data = ti.get_ht_trendmode(symbol=symbol,
                                                       interval=interval)

    print("Progress: 40% complete...")

    kama_data, meta_data = ti.get_kama(symbol=symbol, interval=interval)
    macd_data, meta_data = ti.get_macd(symbol=symbol, interval=interval)
    macdext_data, meta_data = ti.get_macdext(symbol=symbol, interval=interval)
    mama_data, meta_data = ti.get_mama(symbol=symbol, interval=interval)
    mfi_data, meta_data = ti.get_mfi(symbol=symbol, interval=interval)
    midpoint_data, meta_data = ti.get_midpoint(symbol=symbol,
                                               interval=interval)
    midprice_data, meta_data = ti.get_midprice(symbol=symbol,
                                               interval=interval)
    minus_di_data, meta_data = ti.get_minus_di(symbol=symbol,
                                               interval=interval)
    mom_data, meta_data = ti.get_mom(symbol=symbol, interval=interval)
    natr_data, meta_data = ti.get_natr(symbol=symbol, interval=interval)

    print("Progress: 60% complete...")

    obv_data, meta_data = ti.get_obv(symbol=symbol, interval=interval)
    plus_di_data, meta_data = ti.get_plus_di(symbol=symbol, interval=interval)
    plus_dm_data, meta_data = ti.get_plus_dm(symbol=symbol, interval=interval)
    ppo_data, meta_data = ti.get_ppo(symbol=symbol, interval=interval)
    roc_data, meta_data = ti.get_roc(symbol=symbol, interval=interval)
    rocr_data, meta_data = ti.get_rocr(symbol=symbol, interval=interval)
    rsi_data, meta_data = ti.get_rsi(symbol=symbol, interval=interval)
    sar_data, meta_data = ti.get_sar(symbol=symbol, interval=interval)
    sma_data, meta_data = ti.get_sma(symbol=symbol, interval=interval)
    stoch_data, meta_data = ti.get_stoch(symbol=symbol, interval=interval)

    print("Progress: 80% complete...")

    stochf_data, meta_data = ti.get_stochf(symbol=symbol, interval=interval)
    stochrsi_data, meta_data = ti.get_stochrsi(symbol=symbol,
                                               interval=interval)
    t3_data, meta_data = ti.get_t3(symbol=symbol, interval=interval)
    tema_data, meta_data = ti.get_tema(symbol=symbol, interval=interval)
    trange_data, meta_data = ti.get_trange(symbol=symbol, interval=interval)
    trima_data, meta_data = ti.get_trima(symbol=symbol, interval=interval)
    trix_data, meta_data = ti.get_trix(symbol=symbol, interval=interval)
    ultsoc_data, meta_data = ti.get_ultsoc(symbol=symbol, interval=interval)
    willr_data, meta_data = ti.get_willr(symbol=symbol, interval=interval)
    wma_data, meta_data = ti.get_wma(symbol=symbol, interval=interval)
    bbands_data, meta_data = ti.get_bbands(symbol=symbol, interval=interval)

    print("Progress: 90% complete...")

    result = pd.concat([
        ad_data, adosc_data, adx_data, adxr_data, apo_data, aroon_data,
        aroonosc_data, atr_data, bop_data, cci_data, cmo_data, dema_data,
        dx_data, ema_data, ht_dcperiod_data, ht_dcphase_data, ht_phasor_data,
        ht_sine_data, ht_trendline_data, ht_trendmode_data, kama_data,
        macd_data, macdext_data, mama_data, mfi_data, midpoint_data,
        midprice_data, minus_di_data, mom_data, natr_data, obv_data,
        plus_di_data, plus_dm_data, ppo_data, roc_data, rocr_data, rsi_data,
        sar_data, sma_data, stoch_data, stochf_data, stochrsi_data, t3_data,
        tema_data, trange_data, trima_data, trix_data, ultsoc_data, willr_data,
        wma_data, bbands_data
    ],
                       axis=1)

    result["stockticker"] = symbol

    result = result.reindex(result.index.rename('timestamp'))
    result = result.dropna(axis=0, how='any')
    result = result.round(2)
    result = result.rename(
        columns={
            'Chaikin A/D': 'ChaikinAD',
            'Aroon Up': 'AroonUp',
            'Aroon Down': 'AroonDown',
            'LEAD SINE': 'LeadSine',
            'Real Upper Band': 'RealUpperBand',
            'Real Middle Band': 'RealMiddleBand',
            'Real Lower Band': 'RealLowerBand'
        })

    fd = open('results/rawTechIndicatorData.csv', 'w')
    result.to_csv(fd, index=True, encoding='utf-8')
    fd.close()

    print("Progress: 99% complete...")

    df = pd.read_csv('results/rawTechIndicatorData.csv')

    insertToOracleDatabase(
        df,
        '''insert /*+ ignore_row_on_dupkey_index(stocktechindicator, stocktechindicator_pk) */
                                    into stocktechindicator 
                                    (timestamp,ChaikinAD,ADOSC,ADX,ADXR,
                                    APO,AroonUp,AroonDown,AROONOSC,ATR,
                                    BOP,CCI,CMO,DEMA,DX,
                                    EMA,DCPERIOD,HT_DCPHASE,QUADRATURE, PHASE,
                                    LEADSINE,SINE,HT_TRENDLINE,TRENDMODE,KAMA,
                                    MACD,MACD_Hist,MACD_Signal,MACD_Signal2,MACD2,
                                    MACD_Hist2,FAMA,MAMA,MFI,MIDPOINT,
                                    MIDPRICE,MINUS_DI,MOM,NATR,OBV,
                                    PLUS_DI,PLUS_DM,PPO,ROC,ROCR,
                                    RSI,SAR,SMA,SlowK,SlowD,
                                    FastK,FastD,FastK2,FastD2,T3,
                                    TEMA,TRANGE,TRIMA,TRIX,ULTOSC,
                                    WILLR,WMA,RealLowerBand,RealUpperBand,RealMiddleBand,
                                    stockticker) 
                                    values (:1, :2, :3, :4, :5, 
                                            :6, :7, :8, :9, :10,
                                            :11, :12, :13, :14, :15, 
                                            :16, :17, :18, :19, :20, 
                                            :21, :22, :23, :24, :25, 
                                            :26, :27, :28, :29, :30, 
                                            :31, :32, :33, :34, :35, 
                                            :36, :37, :38, :39, :40, 
                                            :41, :42, :43, :44, :45, 
                                            :46, :47, :48, :49, :50, 
                                            :51, :52, :53, :54, :55, 
                                            :56, :57, :58, :59, :60, 
                                            :61, :62, :63, :64, :65, 
                                            :66)''')
Exemplo n.º 5
0
def save_ti(ticker, interval='daily'):
    ti = TechIndicators(key='WS8K5VM8FZL52BTH', output_format='pandas')

    ti.get_sma(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_sma.csv')
    call_check()
    ti.get_ema(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_ema.csv')
    call_check()
    ti.get_wma(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_wma.csv')
    call_check()
    ti.get_dema(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_dema.csv')
    call_check()
    ti.get_tema(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_tema.csv')
    call_check()
    ti.get_trima(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_trima.csv')
    call_check()
    ti.get_kama(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_kama.csv')
    call_check()
    ti.get_mama(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_mama.csv')
    call_check()
    ti.get_t3(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_t3.csv')
    call_check()
    ti.get_macd(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_macd.csv')
    call_check()
    ti.get_macdext(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_macdext.csv')
    call_check()
    ti.get_stoch(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_stoch.csv')
    call_check()
    ti.get_stochf(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_stochf.csv')
    call_check()
    ti.get_rsi(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_rsi.csv')
    call_check()
    ti.get_stochrsi(ticker, interval)[0].to_csv(
        f'./Stock Data/TI/{ticker}_{interval}_stochris.csv')
    call_check()
    ti.get_willr(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_willr.csv')
    call_check()
    ti.get_adx(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_adx.csv')
    call_check()
    ti.get_adxr(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_adxr.csv')
    call_check()
    ti.get_apo(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_apo.csv')
    call_check()
    ti.get_ppo(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_ppo.csv')
    call_check()
    ti.get_mom(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_mom.csv')
    call_check()
    ti.get_bop(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_bop.csv')
    call_check()
    ti.get_cci(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_cci.csv')
    call_check()
    ti.get_cmo(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_cmo.csv')
    call_check()
    ti.get_roc(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_roc.csv')
    call_check()
    ti.get_rocr(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_rocr.csv')
    call_check()
    ti.get_aroon(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_aroon.csv')
    call_check()
    ti.get_aroonosc(ticker, interval)[0].to_csv(
        f'./Stock Data/TI/{ticker}_{interval}_aroonosc.csv')
    call_check()
    ti.get_mfi(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_mfi.csv')
    call_check()
    ti.get_trix(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_trix.csv')
    call_check()
    ti.get_ultosc(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_ultosc.csv')
    call_check()
    ti.get_dx(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_dx.csv')
    call_check()
    ti.get_minus_di(ticker, interval)[0].to_csv(
        f'./Stock Data/TI/{ticker}_{interval}_minus_di.csv')
    call_check()
    ti.get_plus_di(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_plus_di.csv')
    call_check()
    ti.get_minus_dm(ticker, interval)[0].to_csv(
        f'./Stock Data/TI/{ticker}_{interval}_minus_dm.csv')
    call_check()
    ti.get_plus_dm(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_plus_dm.csv')
    call_check()
    ti.get_bbands(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_bbands.csv')
    call_check()
    ti.get_midpoint(ticker, interval)[0].to_csv(
        f'./Stock Data/TI/{ticker}_{interval}_midpoint.csv')
    call_check()
    ti.get_midprice(ticker, interval)[0].to_csv(
        f'./Stock Data/TI/{ticker}_{interval}_midprice.csv')
    call_check()
    ti.get_sar(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_sar.csv')
    call_check()
    ti.get_trange(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_trange.csv')
    call_check()
    ti.get_atr(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_atr.csv')
    call_check()
    ti.get_natr(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_natr.csv')
    call_check()
    ti.get_ad(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_ad.csv')
    call_check()
    ti.get_adosc(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_adosc.csv')
    call_check()
    ti.get_obv(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_obv.csv')
    call_check()
    ti.get_ht_trendline(ticker, interval)[0].to_csv(
        f'./Stock Data/TI/{ticker}_{interval}_ht_trendline.csv')
    call_check()
    ti.get_ht_sine(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_ht_sine.csv')
    call_check()
    ti.get_ht_trendmode(ticker, interval)[0].to_csv(
        f'./Stock Data/TI/{ticker}_{interval}_ht_trendmode.csv')
    call_check()
    ti.get_ht_dcperiod(ticker, interval)[0].to_csv(
        f'./Stock Data/TI/{ticker}_{interval}_dcperiod.csv')
    call_check()
    ti.get_ht_dcphase(
        ticker,
        interval)[0].to_csv(f'./Stock Data/TI/{ticker}_{interval}_dcphase.csv')
    call_check()
    ti.get_ht_phasor(ticker, interval)[0].to_csv(
        f'./Stock Data/TI/{ticker}_{interval}_ht_phasor.csv')