示例#1
0
    def load(self, datadir="../data/", start=None, end=None):
        """
        Tries to load from csv first, then pulls from Yahoo!
        """
        filepath = "{0}{1}.csv".format(datadir, self.ticker)
        print("Checking {}".format(filepath))

        if start is None:
            start = self.start
        else:
            start = standard_date_format(last_trading_day(start))
        if end is None:
            end = self.end
        else:
            end = standard_date_format(last_trading_day(end))

        if path.isfile(filepath):
            self.data = read_yahoo_csv(path=filepath)
            csv_start = standard_date_format(self.data.index.min())
            csv_end = standard_date_format(self.data.index.max())
            if (pd.to_datetime(csv_end) < pd.to_datetime(end)) | (
                pd.to_datetime(csv_start) > pd.to_datetime(start)
            ):
                _refresh_success = self.refresh(
                    datadir=datadir, start=min(start, csv_start), end=max(end, csv_end)
                )
            else:
                _refresh_success = 1
            if _refresh_success:
                self.data = read_yahoo_csv(path=filepath, startdate=start, enddate=end)
        else:
            self.data = retrieve_yahoo_data(
                ticker=self.ticker, startdate=start, enddate=end
            )
            self.save(filename="{}.csv".format(self.ticker), datadir=datadir)
示例#2
0
    def load(self, datadir="../data/", start="2000-01-01", end="2100-01-01"):
        """
        Tries to load from csv first, then pulls from Yahoo!
        """

        start = standard_date_format(start)
        end = standard_date_format(end)

        filepath = "{0}{1}.csv".format(datadir, self.name)
        print("Checking {}".format(filepath))

        if path.isfile(filepath):
            self.data = read_treasury_csv(path=filepath,
                                          startdate=start,
                                          enddate=end)
            csv_start = standard_date_format(self.data.index.min())
            csv_end = standard_date_format(self.data.index.max())
            if (csv_end < end) | (csv_start > start):
                _refresh_success = self.refresh(
                    url=self.url,
                    datadir=datadir,
                    start=min(start, csv_start),
                    end=max(end, csv_end),
                )
                if _refresh_success:
                    self.data = read_treasury_csv(path=filepath,
                                                  startdate=start,
                                                  enddate=end)
        else:
            self.data = retrieve_treasury_yield_curve_rates(url=self.url,
                                                            startdate=start,
                                                            enddate=end)
            self.save(filename="{}.csv".format(self.name), datadir=datadir)
示例#3
0
def read_treasury_csv(path=None, startdate="2000-01-01", enddate=None):
    """
    Read locally stored csv with data from US Deparment of the Treasury.

    """
    if enddate == None:
        enddate = todays_date()

    # convert dates to pandas format
    startdate = standard_date_format(startdate)
    enddate = standard_date_format(enddate)

    _df = pd.read_csv(path, index_col="Date", parse_dates=True)

    return _df.loc[(_df.index >= startdate) & (_df.index <= enddate)]
示例#4
0
def read_yahoo_csv(path=None, startdate="2000-01-01", enddate=None):
    """
    Read locally stored csv with data from Yahoo! Finance for a security.
 
    """

    if enddate == None:
        enddate = todays_date()

    # convert dates to pandas format
    startdate = standard_date_format(startdate)
    enddate = standard_date_format(enddate)

    df = pd.read_csv(path, index_col="Date", parse_dates=True)

    return df.loc[(df.index >= startdate) & (df.index <= enddate)]
示例#5
0
    def refresh(self,
                url,
                datadir="../data/",
                start="1900-01-01",
                end="2100-01-01"):
        """
        Tries to load from csv first, then pulls from Yahoo!
        """

        start = standard_date_format(start)
        end = standard_date_format(end)

        try:
            self.data = retrieve_treasury_yield_curve_rates(url=url,
                                                            startdate=start,
                                                            enddate=end)
            self.save(filename="{}.csv".format(self.name), datadir=datadir)
            return 1
        except:
            print("Refresh failed")
            return 0
示例#6
0
 def __init__(self, name, start=None, end=None):
     super().__init__(name)
     if start is None:
         self.start = standard_date_format(last_trading_day("2000-01-01"))
     else:
         self.start = standard_date_format(last_trading_day(start))
     if end is None:
         self.end = standard_date_format(last_trading_day(todays_date()))
     else:
         self.end = standard_date_format(last_trading_day(end))
     self.ticker = name
     self.set_name(name)
     self.load(start=self.start, end=self.end)
     self.get_last_price()
     self.get_max_price()
     self.get_min_price()
     self.get_median_price()
     self.get_mean_price()
     self.get_std_price()
     self.dividends = 0.0
     self.benchmark_ticker = "sp500"
     self.benchmark = None
示例#7
0
    def refresh(self, datadir="../data/", start=None, end=None):
        """
        Tries to load from csv first, then pulls from Yahoo!
        """

        if start is None:
            start = self.start
        else:
            start = standard_date_format(last_trading_day(start))
        if end is None:
            end = self.end
        else:
            end = standard_date_format(last_trading_day(end))

        try:
            self.data = retrieve_yahoo_data(
                ticker=self.ticker, startdate=start, enddate=end
            )
            self.save(filename="{}.csv".format(self.ticker), datadir=datadir)
            return 1
        except:
            print("Refresh failed")
            return 0
示例#8
0
def retrieve_treasury_yield_curve_rates(
    url="https://www.treasury.gov/resource-center/data-chart-center/interest-rates/Pages/TextView.aspx?data=yieldAll",
    startdate="20000101",
    enddate=None,
):
    """
    Download yield curve rates data from  US Deparment of the Treasury.

    """

    if enddate == None:
        enddate = todays_date()

    # convert dates to pandas format
    startdate = standard_date_format(startdate)
    enddate = standard_date_format(enddate)

    _headers = {
        "User-Agent":
        "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"
    }

    # use request to retrieve data
    req = urllib.request.Request(url, headers=_headers)
    f = urllib.request.urlopen(req)
    html_data = f.read().decode("utf-8")

    soup = BeautifulSoup(html_data, "lxml")
    table = soup.find("table", {"class": "t-chart"})

    _df = pd.read_html(str(table),
                       header=0,
                       index_col="Date",
                       parse_dates=True)[0]

    return _df.loc[(_df.index >= startdate) & (_df.index <= enddate)]
示例#9
0
 def __init__(self, name):
     super().__init__(name)
     self.securities = {}
     self.securities_archive = {}
     self.tickers = []
     self.tickers_archive = []
     self.dividends = pd.DataFrame(columns=["Date", "Ticker", "Amount"])
     self.payments = pd.DataFrame(columns=["Date", "In", "Out"])
     self.wallet = pd.DataFrame(columns=["Date", "Change"])
     self.total_portfolio_value = 0.0
     self.total_security_value = 0.0
     self.cash = 0.0
     self.return_value = 0.0
     self.return_rate = 0.0
     self.prices = {}
     self.prices_fifo = {}
     self.prices_lifo = {}
     self.index = 0
     self.benchmark_ticker = "sp500"
     self.benchmark = None
     self.transactions = pd.DataFrame(columns=[
         "Date", "Transaction", "Ticker", "Currency", "Price", "Quantity"
     ])
     self.date = standard_date_format(todays_date())
示例#10
0
    def get_cash(self, date="2100-01-01"):
        date = standard_date_format(date)

        return self.wallet.loc[(self.wallet.Date <= date), "Change"].sum()