Exemple #1
0
    def get_benchmark(self, benchmark_ticker='^GSPC'):

        if benchmark_ticker == 'sp500' or benchmark_ticker == '^GSPC':
            _ticker = '^GSPC'
        else:
            _ticker = '^GSPC'  # S&P 500 as default

        # create security class object for benchmark ticker
        _benchmark = Security(_ticker, start=self.min_date, end=self.max_date)

        # calculate returns for the benchmark
        _benchmark.data = returns_column(df=_benchmark.data, column='Close')

        self.benchmark = _benchmark
Exemple #2
0
    def get_benchmark(self, benchmark_ticker='^GSPC'):

        self.min_date = self.data.index.min()
        self.max_date = min(self.data.index.max(), datetime.datetime.now())

        if benchmark_ticker == 'sp500' or benchmark_ticker == '^GSPC':
            _ticker = '^GSPC'
        else:
            _ticker = '^GSPC'  # S&P 500 as default

        # create security class object for benchmark ticker
        _benchmark = Security(_ticker, start=self.min_date, end=self.max_date)

        # calculate returns for the benchmark
        _benchmark.data = returns_column(df=_benchmark.data,
                                         column='Close',
                                         uselogs=True)

        self.benchmark = _benchmark
Exemple #3
0
 def add_security(self, ticker):
     if ticker in self.securities_archive:
         self.securities[ticker] = self.securities_archive[ticker]
         self.tickers.append(ticker)
     else:
         _security = Security(ticker)
         self.securities[_security.ticker] = _security
         self.tickers.append(ticker)
         self.prices[ticker] = deque()
         self.prices_lifo[ticker] = deque()
         self.prices_fifo[ticker] = deque()
Exemple #4
0
    def positions(self):
        # you have to have one security in the portfolio for meaningful output
        if len(self.securities) > 0:
            # sum up by ticker

            _df = self.transactions.loc[self.transactions.Transaction.isin(
                ('buy', 'sell')), :].copy()
            _df.loc[_df.Transaction == 'sell',
                    'Quantity'] = _df.loc[_df.Transaction == 'sell',
                                          'Quantity'].apply(lambda x: -x)
            _df.loc[_df.Transaction == 'sell',
                    'TradeValue'] = _df.loc[_df.Transaction == 'sell',
                                            'TradeValue'].apply(lambda x: -x)
            self.positions_df = _df.groupby(by=['Ticker'])['Quantity',
                                                           'TradeValue'].sum()

            # sum up purchases
            self.positions_df["Bought"] = _df.loc[
                _df.Transaction == 'buy', :].groupby(
                    by=['Ticker'])['Quantity'].sum()
            self.positions_df["Invested"] = _df.loc[
                _df.Transaction == 'buy', :].groupby(
                    by=['Ticker'])['TradeValue'].sum()

            # sum up sales
            self.positions_df["Sold"] = _df.loc[
                _df.Transaction == 'sell', :].groupby(
                    by=['Ticker'])['Quantity'].sum()
            self.positions_df["Devested"] = _df.loc[
                _df.Transaction == 'sell', :].groupby(
                    by=['Ticker'])['TradeValue'].sum()

            # check if sum over volume of a security is < 0
            for index, row in self.positions_df.iterrows():
                if row['Quantity'] < 0.0:
                    print('Negative volume encountered: {0:5}\t{1}'.format(
                        index, row['Quantity']))

            # join in last price and names of securities
            for ticker in set(self.positions_df.index):
                if ticker in self.tickers:
                    self.positions_df.loc[self.positions_df.index == ticker,
                                          'LastPrice'] = self.securities[
                                              ticker].get_last_price()
                    self.positions_df.loc[
                        self.positions_df.index == ticker,
                        'Description'] = self.securities[ticker].name
                else:
                    _security = Security(ticker)
                    self.positions_df.loc[
                        self.positions_df.index == ticker,
                        'LastPrice'] = _security.get_last_price()
                    self.positions_df.loc[self.positions_df.index == ticker,
                                          'Description'] = _security.name

            self.positions_df['CurrentValue'] = self.positions_df[
                'LastPrice'] * self.positions_df['Quantity']

            # sum up dividends by ticker
            self.positions_df['Dividends'] = self.dividends.groupby(
                by='Ticker')['Amount'].sum()

            #self.positions_df['AvgPrice'] = self.positions_df['TradeValue'] / (1.0*self.positions_df['Quantity'])
            self.positions_df.fillna(0.0, inplace=True)
            self.positions_df['Return'] = self.positions_df[
                'CurrentValue'] - self.positions_df[
                    'TradeValue'] + self.positions_df['Dividends']
            self.positions_df['PercentGrowth'] = 100.0 * self.positions_df[
                'Return'] / self.positions_df['Invested']
            self.positions_df.PercentGrowth.replace([np.inf, -np.inf],
                                                    np.nan,
                                                    inplace=True)

            print(self.positions_df[[
                'Quantity', 'Bought', 'Sold', 'CurrentValue', 'Invested',
                'Devested', 'Dividends', 'Return', 'PercentGrowth',
                'Description'
            ]].sort_values(by=['CurrentValue', 'Invested'], ascending=False))

        else:
            print("No positions in portfolio.")
Exemple #5
0
 def add_security_archive(self, ticker):
     _security = Security(ticker)
     self.securities_archive[_security.ticker] = _security
     self.tickers_archive.append(ticker)
Exemple #6
0
 def add_security(self, ticker):
     _security = Security(ticker)
     self.securities[_security.ticker] = _security
     self.tickers.append(ticker)