def cumulative_state(transactions): dt = pd.DataFrame(transactions) dates = get_dates(transactions) timestamps = get_timestamps(dates) tickers = rt.all_tickers(transactions) cs = prepare_cs(dates, timestamps) for ticker in tickers: lq = list() lp = list() lv = list() for ldate in dates: quantity = dt[(dt.ticker == ticker) & (dt.dt_date <= ldate)]['quantity'].sum() price = cv.close_price_from(ldate, ticker) lq.append(quantity) lp.append(price) lv.append(quantity * price) cs[ticker + '_q'] = lq cs[ticker + '_p'] = lp cs[ticker + '_v'] = lv tv_list = list() for ldate in dates: total_value = 0.0 for ticker in tickers: total_value = total_value + float(cs[cs.dt_date == ldate][ticker + '_v']) tv_list.append(total_value) cs['total_value'] = tv_list return cs
def worth_at_date(transaction_file, date): df = read_file(transaction_file) qs = df[df.dt_date <= date].groupby(['owner', 'ticker', 'quoted_in']).quantity.sum() return pd.DataFrame(qs).apply(lambda x: cv.close_price_from(date, x.name[1]) * x.quantity * cv.getUSDPair(date, x.name[2]), axis=1).reset_index().groupby('owner').sum()
def value_at(date, transactions): df = pd.DataFrame(transactions) df = df[df.dt_date <= date].groupby(['owner', 'ticker']).quantity.sum() df = pd.DataFrame(df).apply(lambda x: cv.close_price_from(date, x.name[1]) * x.quantity, axis=1).reset_index().groupby('owner').sum() return df