【发布时间】:2016-05-04 21:21:33
【问题描述】:
from numpy import std
import csv
data = []
with open('Data.csv') as file:
reader = csv.reader(file)
for column in zip(*reader):
data.append(column)
dates = list(reversed(open('Dates.csv').read().split('\n')))
stock_value = [int(x) for x in open('stock_value.csv').read().split(',')]
companies = open('companies.csv').read().split(',')
stock_change = {}
with open('Data.csv') as file:
reader = list(csv.reader(file))
for i, j in enumerate(dates):
stock_change[j] = map(float, reader[i])
company_value = dict(zip(companies, stock_value))
def change(invested, date):
"""Will return the change of invested stocks at the given date."""
sum_product = sum([value[0] * value[1] * data for value, data
in zip(invested, stock_change[date])])
_sum = sum([value[0] * value[1] for value in invested])
return sum_product / _sum
def total_change(invested):
"""Will return the total change associated with an investment."""
total_changes = []
for date in dates:
total_changes.append(change(list(zip(stock_value, invested)), date))
return total_changes
def volatility(invested):
"""Will return the std deviation from the total_change of the invested."""
return std(total_change(invested), ddof=1)
def tuner(invested):
"""Will return a weight list."""
weights = []
for i in range(465):
temp = invested[:]
temp1 = temp[:]
print(stock_value)
while True:
temp[i] = temp[i] + 1
if volatility(temp) < volatility(temp1):
temp1 = temp[:]
else:
temp[i] = temp[i] - 1
break
weights.append(temp[i])
return weights
invested = [0] * 465
invested[0] = 1
print(tuner(invested))
Data.csv 文件包含 881 行数据,如下所示:
1.7529880478,2.8552887735,2.2606138577,1.7495626093,0.9274873524,0.6702840728,0.2543720191,2.1072796935,2.2385449458,2.2860610965,0.2590673575,...
每行对应一个日期。 company.csv 是一个文件,其中包含 465 个以逗号分隔的条目,其中包含公司的所有名称,而 stock_value.csv 包含以逗号分隔的 465 个条目,其中每个条目是同一索引中公司股票的值就像它一样。
在我打印 temp 的波动率、temp1 = 0 的波动率之后的调谐器函数中,然后在 temp = 0 的下一个循环波动率中,temp1 的波动率也是如此。有谁知道为什么我的价值观变为零?
【问题讨论】:
-
@AlexanderHuszagh 抱歉,我现在修好了。
-
另外,抱歉,示例中没有日期。而且我相信 stock_change 和 stock_value 也不包括在内。如果没有所有细节,很难修复一个示例。如果这太多了,创建一个 MVCE:stackoverflow.com/help/mcve
-
@AlexanderHuszagh 是否足够详细,还是我需要更多?
-
您可能需要检查您的
change和total_change函数。老实说,我怀疑您将单个值附加到total_change,因此您的标准偏差将始终为 0。 -
@AlexanderHuszagh 如果列表仅包含 1 项,我会收到错误消息。
标签: python-3.x numpy stocks