Пример #1
0
    def __init__(self,
                 token,
                 tickers,
                 stockmarket=StockMarket.NASDAQ,
                 start=datetime.datetime(2016, 1, 1),
                 end=datetime.datetime(2016, 1, 30),
                 verify=None):
        """
        Initializer
        Args:
            token (str): quandl access token
            tickers (str or list): tickers
            stockmarket (StockMarket): NYSE or NASDAQ
            start (datetime): first data point
            end (datetime): last data point precedes this date
            verify (None or str or boolean): if verify is None, certify certificates
                will be used (default);
                if this is False, no certificates will be checked; if this is a string,
                it should be pointing
                to a certificate for the HTTPS connection to NASDAQ (dataondemand.nasdaq.com),
                either in the
                form of a CA_BUNDLE file or a directory wherein to look.
        Raises:
            QiskitFinanceError: invalid data
        """
        # if not isinstance(atoms, list) and not isinstance(atoms, str):
        #    raise QiskitFinanceError("Invalid atom input for DOD Driver '{}'".format(atoms))

        super().__init__()

        if isinstance(tickers, list):
            self._tickers = tickers
        else:
            self._tickers = tickers.replace('\n', ';').split(";")
        self._n = len(self._tickers)

        if stockmarket not in [StockMarket.NASDAQ, StockMarket.NYSE]:
            msg = "NASDAQ Data on Demand does not support "
            msg += stockmarket.value
            msg += " as a stock market."
            raise QiskitFinanceError(msg)

        # This is to aid serialization; string is ok to serialize
        self._stockmarket = str(stockmarket.value)

        self._token = token
        self._start = start
        self._end = end
        self._verify = verify
 def run(self):
     """ Loads data, thus enabling get_similarity_matrix and get_covariance_matrix methods in the base class. """
     self.check_provider_valid()
     if self._token:
         quandl.ApiConfig.api_key = self._token
     quandl.ApiConfig.api_version = '2015-04-09'
     self._data = []
     for (cnt, s) in enumerate(self._tickers):
         try:
             d = quandl.get("WIKI/" + s,
                            start_date=self._start,
                            end_date=self._end)
         except NotFoundError as ex:
             raise QiskitFinanceError(
                 "Cannot retrieve Wikipedia data due to an invalid token."
             ) from ex
         # The exception will be urllib3 NewConnectionError, but it can get dressed by quandl
         except Exception as ex:  # pylint: disable=broad-except
             raise QiskitFinanceError(
                 "Cannot retrieve Wikipedia data.") from ex
         try:
             self._data.append(d["Adj. Close"])
         except KeyError as ex:
             raise QiskitFinanceError("Cannot parse quandl output.") from ex
Пример #3
0
    def __init__(self,
                 token=None,
                 tickers=None,
                 stockmarket=StockMarket.NASDAQ,
                 start=datetime.datetime(2016, 1, 1),
                 end=datetime.datetime(2016, 1, 30)):
        """
        Initializer
        Args:
            token (str): quandl access token, which is not needed, strictly speaking
            tickers (str or list): tickers
            stockmarket (StockMarket): NASDAQ, NYSE
            start (datetime.datetime): start time
            end (datetime.datetime): end time
        Raises:
            QiskitFinanceError: provider doesn't support stock market input
        """
        # if not isinstance(atoms, list) and not isinstance(atoms, str):
        #    raise QiskitFinanceError("Invalid atom input for Wikipedia Driver '{}'".format(atoms))
        super().__init__()
        tickers = tickers if tickers is not None else []
        if isinstance(tickers, list):
            self._tickers = tickers
        else:
            self._tickers = tickers.replace('\n', ';').split(";")
        self._n = len(self._tickers)

        if stockmarket not in [StockMarket.NASDAQ, StockMarket.NYSE]:
            msg = "WikipediaDataProvider does not support "
            msg += stockmarket.value
            msg += " as a stock market."
            raise QiskitFinanceError(msg)

        # This is to aid serialization; string is ok to serialize
        self._stockmarket = str(stockmarket.value)

        self._token = token
        self._tickers = tickers
        self._start = start
        self._end = end
        self._data = []
Пример #4
0
    def __init__(self,
                 token,
                 tickers,
                 stockmarket=StockMarket.LONDON,
                 start=datetime.datetime(2016, 1, 1),
                 end=datetime.datetime(2016, 1, 30)):
        """
        Initializer
        Args:
            token (str): quandl access token
            tickers (str or list): tickers
            stockmarket (StockMarket): LONDON, EURONEXT, or SINGAPORE
            start (datetime): first data point
            end (datetime): last data point precedes this date
        Raises:
            QiskitFinanceError: provider doesn't support stock market
        """

        super().__init__()

        if isinstance(tickers, list):
            self._tickers = tickers
        else:
            self._tickers = tickers.replace('\n', ';').split(";")
        self._n = len(self._tickers)

        if stockmarket not in [
                StockMarket.LONDON, StockMarket.EURONEXT, StockMarket.SINGAPORE
        ]:
            msg = "ExchangeDataProvider does not support "
            msg += stockmarket.value
            msg += " as a stock market."
            raise QiskitFinanceError(msg)

        # This is to aid serialization; string is ok to serialize
        self._stockmarket = str(stockmarket.value)

        self._token = token
        self._tickers = tickers
        self._start = start
        self._end = end
Пример #5
0
    def init_from_input(cls, section):
        """
        Initialize via section dictionary.

        Args:
            params (dict): section dictionary

        Returns:
            Driver: Driver object
        """
        if section is None or not isinstance(section, dict):
            raise QiskitFinanceError(
                'Invalid or missing section {}'.format(section))

        params = section
        kwargs = {}
        #for k, v in params.items():
        #    if k == ExchangeDataDriver. ...: v = UnitsType(v)
        #    kwargs[k] = v
        logger.debug('init_from_input: {}'.format(kwargs))
        return cls(**kwargs)
    def __init__(self,
                 tickers=["TICKER1", "TICKER2"],
                 stockmarket=StockMarket.RANDOM,
                 start=datetime.datetime(2016, 1, 1),
                 end=datetime.datetime(2016, 1, 30),
                 seed=None):
        """
        Initializer
        Args:
            tickers (str or list): tickers
            stockmarket (StockMarket): RANDOM
            start (datetime): first data point
            end (datetime): last data point precedes this date
            seed (None or int): shall a seed be used?
        """
        super().__init__()

        # if not isinstance(atoms, list) and not isinstance(atoms, str):
        #    raise QiskitFinanceError("Invalid atom input for RANDOM data provider '{}'".format(atoms))

        if isinstance(tickers, list):
            self._tickers = tickers
        else:
            self._tickers = tickers.replace('\n', ';').split(";")
        self._n = len(self._tickers)

        if not (stockmarket in [StockMarket.RANDOM]):
            msg = "RandomDataProvider does not support "
            msg += stockmarket.value
            msg += " as a stock market. Please use Stockmarket.RANDOM."
            raise QiskitFinanceError(msg)

        # This is to aid serialisation; string is ok to serialise
        self._stockmarket = str(stockmarket.value)

        self._start = start
        self._end = end
        self._seed = seed
Пример #7
0
    def init_from_input(cls, section):
        """
        Initialize via section dictionary.

        Args:
            section (dict): section dictionary

        Returns:
            WikipediaDataProvider: data provider object
        Raises:
            QiskitFinanceError: Invalid section
        """
        if section is None or not isinstance(section, dict):
            raise QiskitFinanceError(
                'Invalid or missing section {}'.format(section))

        # params = section
        kwargs = {}
        # for k, v in params.items():
        #    if k == ExchangeDataDriver. ...: v = UnitsType(v)
        #    kwargs[k] = v
        logger.debug('init_from_input: %s', kwargs)
        return cls(**kwargs)
Пример #8
0
    def __init__(self,
                 tickers=None,
                 stockmarket=StockMarket.RANDOM,
                 start=datetime.datetime(2016, 1, 1),
                 end=datetime.datetime(2016, 1, 30),
                 seed=None):
        """
        Initializer
        Args:
            tickers (str or list): tickers
            stockmarket (StockMarket): RANDOM
            start (datetime): first data point
            end (datetime): last data point precedes this date
            seed (None or int): shall a seed be used?
        Raises:
            QiskitFinanceError: provider doesn't support stock market value
        """
        super().__init__()
        tickers = tickers if tickers is not None else ["TICKER1", "TICKER2"]
        if isinstance(tickers, list):
            self._tickers = tickers
        else:
            self._tickers = tickers.replace('\n', ';').split(";")
        self._n = len(self._tickers)

        if stockmarket not in [StockMarket.RANDOM]:
            msg = "RandomDataProvider does not support "
            msg += stockmarket.value
            msg += " as a stock market. Please use Stockmarket.RANDOM."
            raise QiskitFinanceError(msg)

        # This is to aid serialization; string is ok to serialize
        self._stockmarket = str(stockmarket.value)

        self._start = start
        self._end = end
        self._seed = seed