如何跟踪股票投资组合中的更改项目?

时间:2012-06-30 14:30:11

标签: database algorithm finance financial

我有一个系统,人们可以选择一些股票,并重视他们的投资组合,但我每天都以有效的方式做这件事,因为我创建的条目没有任何变化(把它想象成我正在测量值并进行版本控制,这样我就可以跟踪投资组合设计方式的变化。

这是一个例子(每天的股票名称和权重的投资组合):

Day1:
ibm = 10%
microsoft = 50%
google = 40%

day5:
ibm = 20%
microsoft = 20%
google = 40%
cisco = 20%

我可以在第1天测量投资组合的价值,并了解我需要在第5天再次测量它(当它发生变化时)但是如何在不重新创建数据库中day1的条目的情况下测量day2-4?

我现在的方法(我不喜欢)是在我的数据库中创建临时条目,以便当有人更改投资组合时,然后在当天结束时计算值,如果有临时条目我使用,否则我使用最后几天数据创建一个新条目(对于day2-4)。问题是因为数据通常不会改变我正在创建基本上重复的条目。问题是:我的库存数据全都是每天。我还想到了投资组合,如果它在3天内没有更新,找到每个股票的最近3天的回报,但我不确定是否有更好的解决方案。

有什么想法吗?我认为这是一个直接的问题,但我看不出有效的方法。

注意:在财务方面,它被称为创建资产净值,大多数公司以低效的方式来做这件事,但是因为这个过程是在50年前创建的,并没有改变。我认为这个问题与版本控制非常相似,但我似乎无法解决问题。

1 个答案:

答案 0 :(得分:0)

在存储方面,最重要的是只存储:

UserId - StockId1 - 23% - 2012-06-25 UserId - StockId2 - 11% - 2012-06-26 UserId - StockId1 - 20% - 2012-06-30

所以你看到股票1在30日下跌。现在,如果您想知道28日的StockId1百分比,您只需选择:

SELECT * 
FROM stocks 
WHERE datecolumn<=DATE(2012-06-28) 
ORDER BY datecolumn DESC LIMIT 0,1

如果没有任何回报,你没有得到它,否则你会得到最后一个位置。

顺便说一句。如果你需要一个股票1的图表,你可以加入一个充满日期的表。然后你可以轻松填补空白。

在这里发现这篇文章,例如:

UPDATE mytable
SET number = (@n := COALESCE(number, @n))
ORDER BY date;

SQL QUERY replace NULL value in a row with a value from the previous known value