首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:优化金融BETA计算查询

MySQL:优化金融BETA计算查询
EN

Stack Overflow用户
提问于 2011-04-20 13:25:26
回答 1查看 927关注 0票数 0

在金融学中,股票的beta是股票每日收益和指数每日收益之间的协方差除以指数每日收益的方差。我尝试计算一组股票和一组指数的beta。

以下是我对50个工作日滚动窗口的查询,我希望您能帮助我优化它以提高速度:

代码语言:javascript
复制
INSERT INTO betas (permno, index_id, DATE, beta) 
(SELECT 
  permno, index_id, s.date, IF(
    s.`seq` >= 50, 
    (SELECT 
 (AVG(s2.log_return*i2.log_return)-AVG(s2.log_return)*AVG(i2.log_return))/VAR_POP(i2.log_return) AS beta
    FROM
      stock_series s2
      INNER JOIN `index_series` i2 ON i2.date=s2.date 
      WHERE i2.index_id=i.index_id AND s2.permno = s.permno 
      AND s2.`seq` BETWEEN s.`seq` - 49 AND s.`seq` 
      GROUP BY index_id,permno), NULL)
   AS beta 
FROM
  stock_series s
  INNER JOIN `index_series` i ON i.index_id IN ('SP500') AND i.date=s.date
 ) 
ON DUPLICATE KEY 
UPDATE beta=  VALUES (beta)

这两个主表都已经按实体和日期按升序排序,并且它们已经包括日志每日返回以及"seq“列。Seq按顺序枚举公司(或索引)方面的所有每日行,即,对于表中的每个新股票或索引,seq从1开始,并计数到给定实体的总行数。我创建它是为了支持滚动窗口。

到目前为止,有500家公司和1个索引,查询需要很长时间才能完成。让我知道你想到的任何优化,比如视图,存储的过程,临时表,当然,如果你发现任何不一致的地方。

stock_series有主键(permno,date)和唯一键(permno,seq),index_series有主键(index_id,date)

解释一家公司的扩展结果(通过包括WHERE s.permno=...最后的限制):

解释所有约500家公司的扩展结果:

EN

回答 1

Stack Overflow用户

发布于 2011-04-21 00:11:03

这里我要做的是:不要在数据库中计算它。拉取数据,计算,重新插入。我现在工作的地方,他们有一个hugh网格在一天的运行结束时做这些事情。是的,在相当多的机器中,gris - like。我们谈到生成of的csv文件,然后将这些文件重新加载到数据库中。Beta,Gamma,PnL on交易120.000种不同的元素。数据库没有针对此进行优化。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5725878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档