Andrew
Andrew

Reputation: 409

Portfolio tracker in python

I'm making a portfolio tracker using pandas remote data function, however, I'm running into a problem passing in multiple stock names and tickers.

I would like to create separate data frames by the company name and I'm attempting to use **kwargs, but am a little fuzzy on how it works.

I think I'm pretty close but missing something somewhere.

def portfolio(startDateYE, startDateMonth, startDateDay, end_dateYE,
              end_dateMonth, end_dateDay,  **kwargs):
    '''insert desired started and ending date as 2014,1,1 and key value pairs
    of the stock you would like to look up, i.e. ford = "f" '''
    start = datetime.datetime(startDateYE, startDateMonth, startDateDay)
    end = datetime.datetime(end_dateYE, end_dateMonth, end_dateDay)
    for key, value in kwargs.items():
        key = web.DataReader("%s" % value,'yahoo', start, end)

Example of how I would pass in the variable amount of variables:

portfolio(2010,1,1,2011,1,1,ford="f",google="googl")

The output I'm aiming for is:

In [6]: ford.ix['2010-01-04']
Out[6]: 
Open         1.017000e+01
High         1.028000e+01
Low          1.005000e+01
Close        1.028000e+01
Volume       6.085580e+07
Adj Close    8.755953e+00
Name: 2010-01-04 00:00:00, dtype: float64

EDITED:

def portfolio(startDateYE, startDateMonth, startDateDay, end_dateYE,
              end_dateMonth, end_dateDay,  **kwargs):
    '''insert desired started and ending date as 2014,1,1 and key value pairs
    of the stock you would like to look up, i.e. ford = "f" '''
    start = datetime.datetime(startDateYE, startDateMonth, startDateDay)
    end = datetime.datetime(end_dateYE, end_dateMonth, end_dateDay)
    results = {}  # this is an empty dictionary
    for key, value in kwargs.iteritems():
        results[key] = web.DataReader(value, key, 'yahoo', start, end)

    print(results)

EDIT:

Now I'm getting the following error:

`---------------------------------------------------------------------------

ValueError Traceback (most recent call last) in () 34 ''' 35 ---> 36 portfolio(2012,1,1,2013,1,1,facebook="f",google="googl") 37 38 # Adjusted_f = f['Adj Close']

in portfolio(startDateYE, startDateMonth, startDateDay, end_dateYE, end_dateMonth, end_dateDay, **kwargs) 27 results = {} # this is an empty dictionary 28 for key, value in kwargs.iteritems(): ---> 29 results[key] = web.DataReader(value, key, 'yahoo', start, end) 30 31 '''

/Users/andrewclark/anaconda2/lib/python2.7/site-packages/pandas/io/data.pyc in DataReader(name, data_source, start, end, retry_count, pause) 86 ff = DataReader("F-F_ST_Reversal_Factor", "famafrench") 87 """ ---> 88 start, end = _sanitize_dates(start, end) 89 90 if data_source == "yahoo":

/Users/andrewclark/anaconda2/lib/python2.7/site-packages/pandas/io/data.pyc in _sanitize_dates(start, end) 104 def _sanitize_dates(start, end): 105 from pandas.core.datetools import to_datetime --> 106 start = to_datetime(start) 107 end = to_datetime(end) 108 if start is None:

/Users/andrewclark/anaconda2/lib/python2.7/site-packages/pandas/util/decorators.pyc in wrapper(*args, **kwargs) 89 else: 90 kwargs[new_arg_name] = new_arg_value ---> 91 return func(*args, **kwargs) 92 return wrapper 93 return _deprecate_kwarg

/Users/andrewclark/anaconda2/lib/python2.7/site-packages/pandas/tseries/tools.pyc in to_datetime(arg, errors, dayfirst, yearfirst, utc, box, format, exact, coerce, unit, infer_datetime_format) 285 yearfirst=yearfirst, 286 utc=utc, box=box, format=format, exact=exact, --> 287 unit=unit, infer_datetime_format=infer_datetime_format) 288 289

/Users/andrewclark/anaconda2/lib/python2.7/site-packages/pandas/tseries/tools.pyc in _to_datetime(arg, errors, dayfirst, yearfirst, utc, box, format, exact, unit, freq, infer_datetime_format) 414 return _convert_listlike(arg, box, format) 415 --> 416 return _convert_listlike(np.array([arg]), box, format)[0] 417 418

/Users/andrewclark/anaconda2/lib/python2.7/site-packages/pandas/tseries/tools.pyc in _convert_listlike(arg, box, format, name) 400 return DatetimeIndex._simple_new(values, name=name, tz=tz) 401 except (ValueError, TypeError): --> 402 raise e 403 404 if arg is None:

ValueError: Unknown string format

Thank you!

Upvotes: 0

Views: 1205

Answers (1)

Burhan Khalid
Burhan Khalid

Reputation: 174698

The problem is that you keep overwriting the key value, so you are effectively only saving the last data set.

You should track the keys and their results separately, something like this:

results = {}  # this is an empty dictionary
for key, value in kwargs.iteritems():
    results[key] = web.DataReader(value, key, start, end)

print(results)

Upvotes: 1

Related Questions