在Pandas中关联数组和嵌套for循环(股票投资组合分析)

时间:2013-05-12 04:34:24

标签: python arrays pandas finance stocks

我正在尝试用Python创建一个程序,其中用户输入了许多股票代码和所需的日期范围;假设股票的权重相等,则产出将是该日期范围内投资组合的每日累计回报的图表。

到目前为止,这是我的输入块:

import datetime
import pandas
import numpy
import matplotlib.pyplot as plt
from matplotlib import pyplot
import csv
from pandas.io.data import DataReader

isValid = False

userInStart = raw_input("Enter Start Date mm/dd/yyyy: ") """start of date range"""
userInEnd = raw_input ("Enter End Date mm/dd/yyyy: ") """end of date range"""

StockCount = input ('Input the number of stocks in the porfolio: ')
StockArray = list() """an array of input stocks"""
Return = [[]] """an array of daily returns for each stock"""
CumulativeReturn = list() """an array of cumulative returns for each stock"""

处理块是:

for i in range(0,StockCount): 
   for j in range(1,len(StockArray[i]["Adj Close"])):
       Return[i].append (StockArray[i]["Adj Close"][j] - StockArray[i]["Adj Close"][j-1])

1)如果我输入1股票,到最后,我会留下一系列退货但没有日期。如何将Return数组与日期

相关联

2)如果我输入多个股票,我会得到一个超出范围的索引错误。可能导致问题的原因是什么?

任何有关概念化解决方案的帮助也将受到高度赞赏。

谢谢

1 个答案:

答案 0 :(得分:0)

如果没有看到程序的完整列表,则无法回答问题2.如果仔细查看“索引超出范围”异常的堆栈跟踪,它应该告诉您异常所在的行号被解雇。从那里开始。

关于问题1,您应该考虑在您的应用程序中应用OO设计技术。

例如,return可以像这样实现

class Return(object):
   def __init__(self, date, r):
      self.date = date
      self.r = r 

通过这种方式,您可以将日期与返回值相关联。