python中的投资组合跟踪器

时间:2016-07-05 00:54:43

标签: python python-2.7 pandas yahoo-finance

我正在使用pandas远程数据功能创建投资组合跟踪器,但是,我遇到了传递多个股票名称和代码的问题。

我想按公司名称创建单独的数据框,我正在尝试使用**kwargs,但我对它的工作原理有点模糊。

我觉得我很亲密,但却遗漏了某些地方。

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)

我将如何传递可变数量的变量的示例:

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

我的目标是:

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

编辑:

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)

编辑:

现在我收到以下错误:

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

ValueError Traceback(最近一次调用最后一次)  in()      34'''      35 ---> 36投资组合(2012,1,1,2013,1,1,facebook =“f”,google =“googl”)      37      38#Adjusted_f = f ['Adj Close']

投资组合中的

(startDateYE,startDateMonth,startDateDay,end_dateYE,end_dateMonth,end_dateDay,** kwargs)      27 results = {}#这是一个空字典      28为密钥,值为kwargs.iteritems(): ---> 29结果[key] = web.DataReader(值,键,'yahoo',开始,结束)      三十      31'''

DataReader中的

/Users/andrewclark/anaconda2/lib/python2.7/site-packages/pandas/io/data.pyc(name,data_source,start,end,retry_count,pause)      86 ff = DataReader(“F-F_ST_Reversal_Factor”,“famafrench”)      87“”“ ---> 88 start,end = _sanitize_dates(开始,结束)      89      90如果data_source ==“yahoo”:

/Users/andrewclark/anaconda2/lib/python2.7/site-packages/pandas/io/data.pyc in _sanitize_dates(start,end)     104 def _sanitize_dates(开始,结束):     来自pandas.core.datetools的105导入to_datetime - > 106 start = to_datetime(start)     107结束= to_datetime(结束)     108如果start是None:

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

to_datetime中的 _to_datetime中的 /Users/andrewclark/anaconda2/lib/python2.7/site-packages/pandas/tseries/tools.pyc in _convert_listlike(arg,box,format,name)     400返回DatetimeIndex._simple_new(values,name = name,tz = tz)     401除外(ValueError,TypeError): - > 402提高e     403     404如果arg为None:

ValueError:未知的字符串格式

谢谢!

1 个答案:

答案 0 :(得分:0)

问题是你一直在覆盖键值,所以你实际上只保存了最后一个数据集。

您应该分别跟踪键及其结果,如下所示:

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

print(results)