设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

access关于计算市盈率的问题

2015-4-11 21:45| 发布者: admin| 查看: 796| 评论: 13|原作者: ppan|来自: www.office-cn.net

摘要: 各位大哥: 小弟有一问题请教: 到手的原始库有两个:行情库(有价格、成交量)和财务库,有每股盈余,结构是这样的 行情库: 代码 简称日期价格(其中代码和日期组成主关键字,每个股票每天有一条记录, ...

到手的原始库有两个:行情库(有价格、成交量)和财务库,有每股盈余,结构是这样的

行情库:
代码   简称  日期  价格  (其中代码和日期组成主关键字,每个股票每天有一条记录,这张表很大)

财务库,
代码  简称 日期 每股盈余 (也是代码和日期组成主关键字,每个股票每年有两条记录,分别是中报和年报记录)

现在想生成一张表:
代码  简称 日期 市盈率,
要求每天的数据。市盈率=价格/每股盈余。同一个股票在两个财务数据中间的日期的市盈率用第一个财务数据,用当天的价格计算。我想不出比较快的算法。
比如深发展2001年年报发布之前,用2001年中报的每股盈余和每天的收盘价计算每天的市盈率,发布之后,用2001年年报的数据计算市盈率。

具体实施办法在二楼
发表评论

最新评论

引用 wyh 2002-3-23 04:59
已做了个例子,请看附件文件下载
引用 ppan 2002-3-25 17:29
多谢多谢!!

PS:我的机器是Access97的,你的是2000还是2001版的呀?我好找人帮忙装一个。
引用 tmtony 2002-3-25 17:33
2000的,如果不行,我转成97再上传给你
引用 tmtony 2002-3-25 17:39
文件下载
上传97版本
请看查询里的
引用 ppan 2002-3-25 21:55
看到了,多谢。
好象问题还是没有解决??因为EPS信息是历年的。可能是97,98,99,01等等,但是代码中只是用了first 和last取出了第一年和最后一年的财务数据,所以对多年的数据来说还是没有解决问题。
我原来的笨办法是先把财务数据导入到Excel中,按代码和日期排序,然后复制日期,删除第一行,这样就形成了每条记录两个日期,用原始日期减去初始日期,如果得到的数字小于等于0,就把这一条记录删除。然后用select语句,只要原来价格在这财务数据两个日期中间,我就计算EPS。不知道在Access中如何实现?也不知道是否逻辑上有漏洞。
多谢。
引用 ppan 2002-3-25 21:56
对不起,是“用新日期(上移一行的日期)减去原始日期”
引用 tmtony 2002-3-25 23:05
我明白你的需求了
我迟些改好再传给你
引用 tmtony 2002-3-27 17:07
不好意思,这几天比较忙, 现在才做了放上来给你 文件下载
引用 ppan 2002-3-29 17:16
老大,问题好象还是没有解决耶。头几天是对的,后来就不对了。
引用 tmtony 2002-3-29 17:19
我对了一下,好象对了啊,你能告诉我哪个股哪一天的EPS不对吗
引用 ppan 2002-3-29 17:50
记录164,334出现零,我看懂了你的代码。好象逻辑上也没有问题,可是为什么有那两个零呢?
引用 tmtony 2002-3-29 18:02
164记录的EPS是 .588569564280641
334记录的EPS是 1.33277075987978
不是0啊
引用 ppan 2002-3-29 19:06
我手工删空了price_result表,然后再运算,结果还是一样,164,334是零,而且164前后的记录是0.356571340271414,也不对,00-12-31的eps数字没有出现在结果里。
我想到了一个问题:你的是2000编写的,我请同事帮忙转换成了97格式,会有问题吗?
原代码是否是这样的:
Option Compare Database

Private Sub Command0_Click()
Dim myDb As DAO.Database
Dim myRs As DAO.Recordset
Dim myEps As Double
Set myDb = CurrentDb
myDb.Execute "delete * from price_result"

myDb.Execute "insert into price_result select * from price"
Set myRs = myDb.OpenRecordset("price_result")
Do While Not myRs.EOF
    myRs.Edit
    myEps = Nz(DLast("eps", "finance", "ticker=" & myRs!ticker & " and date<=#" & myRs!Date & "#"))
    myRs!eps = myEps
    myRs.Update
    myRs.MoveNext
   
Loop

End Sub
运行时也没有提示任何错误。help里面也能找到Nz函数和Dlast函数。以及compare database 的解释。唉!不知道为什么。

查看全部评论(13)

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-3-28 16:37 , Processed in 0.091868 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部