一次操作后,值返回零

时间:2016-05-04 21:21:33

标签: python-3.x numpy stocks

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,...

其中每一行对应一个日期。 companies.csv是一个包含465个条目的文件,用逗号分隔公司的所有名称,stock_value.csv包含用逗号分隔的465个条目,其中每个条目是同一索引的公司股票的值因为它。

在我打印温度波动率后的调谐器函数中,temp1 = 0的波动率然后在temp = 0的下一个环波动率中是temp1的波动率。有谁知道为什么我的值变为零?

1 个答案:

答案 0 :(得分:0)

等等哦。我知道。对不起,我只是仔细查看了代码。

你有这个(我改变了它以使它更清晰):

def change(vs):
    product = sum([v[0] * v[1] * d for v, d in zip(vs, ds)])
    sums = sum([v[0] * v[1] for v in vs])
    return product / sums

现在,使用基本数学,我们得到了:

(v1 * v2 * d) / (v1 * v2)
(v1 * v2) * d / (v1 * v2)
d

所以,这个等式总是等于:

def change(vs):
    return sum(ds)

如果您注意到,您的输出不依赖于您的输入,因此它是一个独立变量,因此返回一个常量值,将所有值清零。

这有点过于简单,因为您确实通过了日期,然后获取了库存变化。但是,由于传递了相同的日期数组,您将获得从total_change返回的常量数组值。